diff --git a/.github/issue-labeler.yml b/.github/issue-labeler.yml index b4b6f70c8ada15..210ae86a24fbf6 100644 --- a/.github/issue-labeler.yml +++ b/.github/issue-labeler.yml @@ -1,8 +1,16 @@ darwin: - - "(ios|homepod|darwin|mac|macos)" + # Make sure we don't match random words that contain "mac" inside. + # + # Make sure we don't match random words that contain "ios" inside + # (like "kiosk" or whatnot), but do allow matching "ios8" and things + # like that. + # + # \\b means "word boundary" + # (?![a-z]) means "there is no next char in the range a-z". + - "/(\\bios(?![a-z])|homepod|darwin|\\bmac\\b|macos)/i" linux: - - "(linux)" + - "/(linux)/i" # Special Keywords for Cert Blockers air purifiers: diff --git a/.github/workflows/examples-efr32.yaml b/.github/workflows/examples-efr32.yaml index b0e3eef9b3cbe7..626a6913c1d6c7 100644 --- a/.github/workflows/examples-efr32.yaml +++ b/.github/workflows/examples-efr32.yaml @@ -38,7 +38,7 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: ghcr.io/project-chip/chip-build-efr32:1 + image: ghcr.io/project-chip/chip-build-efr32:8 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" steps: diff --git a/.github/workflows/recent_fail_summary.yaml b/.github/workflows/recent_fail_summary.yaml new file mode 100644 index 00000000000000..f41ecdc659be84 --- /dev/null +++ b/.github/workflows/recent_fail_summary.yaml @@ -0,0 +1,39 @@ +# Copyright (c) 2020 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Recent Fail Summary +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }} + +jobs: + list_workflows: + name: Summarize Recent Workflow Failures + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup + run: | + gh run list -b master -s failure --json displayTitle,workflowName > runlist.json + pip install pandas + env: + GH_TOKEN: ${{ github.token }} + - name: Run Summarization Script + run: python scripts/tools/summarize_fail.py + diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 48135fd924afa5..0be17862507fa0 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -455,6 +455,8 @@ jobs: scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_FAN_3_3.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_FAN_3_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_FAN_3_5.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' + scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_RVCCLEANM_1_2.py" --script-args "--int-arg PIXIT_ENDPOINT:1 --storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' + scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_RVCRUNM_1_2.py" --script-args "--int-arg PIXIT_ENDPOINT:1 --storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TestMatterTestingSupport.py" --script-args "--trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"' - name: Uploading core files uses: actions/upload-artifact@v3 diff --git a/docs/guides/chip_tool_guide.md b/docs/guides/chip_tool_guide.md index 49fe4ad48a83da..5ea235ab1263ac 100644 --- a/docs/guides/chip_tool_guide.md +++ b/docs/guides/chip_tool_guide.md @@ -1249,7 +1249,7 @@ The steps are the same as for the `subscribe` or `subscribe-event` commands.
-## Using wildcards +### Using wildcards The CHIP Tool supports command wildcards for parameter values for clusters, attributes or events, or endpoints, or any combination of these. With the @@ -1320,7 +1320,7 @@ In this command: $ ./chip-tool doorlock read-by-id 0xFFFFFFFF 1 0xFFFF ``` -### Using wildcards with `any` command +#### Using wildcards with `any` command Using the `any` command lets you use wildcards also for the cluster names. The `any` command can be combined with the following commands: @@ -1393,3 +1393,276 @@ $ ./chip-tool any read-by-id + +## Saving users and credentials on door lock devices + +Matter door lock devices can store pools of users and credentials that allow you +to configure different access scenarios. Each user and credential in the pool +has an index value. Additionally, each user has a list of Occupied Credentials. + +By default, each door lock device comes with no user or credential defined, but +it reserves several slots in both pools that can be populated with new users and +credentials, up to the value specified in the the `NumberOfTotalUsersSupported` +attribute and the `NumberOfCredentialsSupportedPerUser` attribute, respectively. + +All communication between users and credentials happens only using their +respective index values. No other information is shared between both pools. + +The CHIP Tool lets you add users and credentials on door lock devices and +securely match their indexes to one another. This is an optional feature +available only when working with devices that implement the `doorlock` cluster. + +> **Note:** Users and credentials can only be modified by whoever has the right +> permissions, as specified in the Access Control List. + +To save credentials and users, you need to complete the following steps, +described in detail in the following sections: + +1. Set up a user on the device. +1. Assign a credential for the newly created user. + +### Step 1: Set up a user + +To set up a user on a door lock device with the CHIP Tool, use the following +command pattern: + +``` +$ ./chip-tool doorlock set-user --timedInteractionTimeoutMs +``` + +In this command: + +- __ is one of the available types of operation for the user: + + - `Add` - This operation sets a new user in the slot at __. + - `Clear` - This operation removes an existing user from the slot at + __. + - `Modify` - This operation modifies an existing user at the slot at + __. + +- __ is the index value of the user, between `1` and the value of + the `NumberOfTotalUsersSupported` attribute. Setting the user index to `0` + will cause an error. +- __ is the name of the user, which can have maximum 10 bytes of + size. Can be set to `null`. +- __ is a 4-byte number that describes the unique user ID. + Can be set to `null`. +- __ can be set to `null` or to one of the following values: + + - `1` (`OccupiedEnabled`) - This status indicates that the given user slot + is used and active. + - `3` (`OccupiedDisabled`) - This status indicates that the given user + slot is used, but disabled. Unlike `0` and `1`, supporting this status + is optional. + +- __ is the type of the user, which can have one of the values + specified in the Matter Application Clusters specification for the + `doorlock` cluster (see section "5.2.9.16. `UserTypeEnum`"). Can be set to + `null`. +- __ is the number of credentials that must be used to + unlock the door lock. This parameter can be set to `null` or to one of the + following values: + + - `0` (Single) - One credential type is required to unlock. + - `1` (Dual) - Two credential types are required to unlock. + - `2` (Triple) - Three credential types are required to unlock. + +- __ is the node ID of the door lock device. +- __ is the ID of the endpoint on the door lock device. +- `--timedInteractionTimeoutMs` is the duration in milliseconds (__) + of the time window for receiving a request on the server side. This should + allow enough time for receiving the request. + +**Examples of command:** + +The following command runs the `set-user` command that adds (`0`) a user at the +index `1`; the user has the name `AAA` and the unique ID `6452`. The user's +status is set to `OccupiedEnabled` (`1`), the user type is set to +`UnrestrictedUser` (`0`), the credential rule is set to single (`0`), the +targeted node ID of the destination door lock device is `1` and the targeted +`doorlock` cluster's endpoint ID on that device is `1`. The +`--timedInteractionTimeoutMs` has a custom value. + +``` +$ ./chip-tool doorlock set-user 0 1 AAA 6452 1 0 0 1 1 --timedInteractionTimeoutMs 1000 +``` + +The following command mirrors the action of the command above, but it targets an +empty user name (`null`) and has `null` for the unique ID. The user status +defaults to `OccupiedEnabled`, the user type defaults to `UnrestrictedUser`, and +the credential rule defaults to single. + +``` +$ ./chip-tool doorlock set-user 0 1 null null null null null 1 1 --timedInteractionTimeoutMs 1000 +``` + +For more use cases for this command, see the "5.2.7.34. Set User Command" +section in the Matter Application Clusters specification. + +### Step 2: Assign a credential + +Once you have a user created on the door lock device, use the following command +pattern to assign a credential to it: + +``` +$ ./chip-tool doorlock set-credential <{Credential}> --timedInteractionTimeoutMs +``` + +In this command: + +- __ is one of the available types of operation for the + credential: + + - `Add` - This operation adds a new credential to a user at the slot at + __. + - `Clear` - This operation removes an existing credential from the user at + the slot at __. + - `Modify` - This operation modifies an existing credential for the user + at the slot at __. + +- _<{Credential}\>_ is a JSON object, with the following two fields: + + - `"credentialType"` is the key field for the type of the credential. It + can have one of the following values: + + - `0` - Programming PIN + - `1` - PIN + - `2` - RFID + - `3` - Fingerprint + - `4` - Finger vein + + - `"credentialIndex"` is the key field for the index of the credential. If + `"credentialType"` is not "Programming PIN", `"credentialIndex"` must be + between `1` and the value of the `NumberOfCredentialsSupportedPerUser` + attribute (see the section 5.2.3.20 of the Matter Application Clusters + specification for details). `0` is required for the Programming PIN. In + other cases, setting the credential index to `0` will cause an error. + +- __ is an octet string parameter with the secret credential + data. For example, the PIN code value (`12345` in the example below). +- __ is the index of the user that will be associated with the + credential. Can be set to `null` to create a new user. +- __ is the status of the user that will be associated with the + credential. See the description of this parameter in + [Set up a user](#step-1-set-up-a-user). Can be set to `null`. +- __ is the type of the user, which can have one of the values + specified in the Matter Application Clusters specification for the + `doorlock` cluster (see section "5.2.9.16. `UserTypeEnum`"). Can be set to + `null`. +- __ is the node ID of the door lock device. +- __ is the ID of the endpoint on the door lock device. +- `--timedInteractionTimeoutMs` is the duration in milliseconds (__) + of the time window for receiving a request on the server side. This should + allow enough time for receiving the request. + +**Example of command:** + +The following command runs the `set-credential` command that adds (`0`) a PIN +credential (type `1`) at the index `1`. The credential data is set to `12345` +(PIN code value). This credential is associated with the user at the index `1`. +The `null` parameters for the user status and the user type indicate that the +credentials are added to an existing user. The targeted node ID of the +destination door lock device is `1` and the targeted `doorlock` cluster's +endpoint ID on that device is `1`. The `--timedInteractionTimeoutMs` has a +custom value. + +``` +$ ./chip-tool doorlock set-credential 0 '{ "credentialType": 1, "credentialIndex": 1 }' "12345" 1 null null 1 1 --timedInteractionTimeoutMs 1000 +``` + +For more use cases for this command, see the "5.2.7.40. Set Credential Command" +section in the Matter Application Clusters specification. + +### Operations on users and credentials + +After you set up users and credentials on your door lock device, you can use +several CHIP Tool commands to interact with them. + +All commands reuse the parameters explained earlier in this section. The +following command patterns are available: + +- Reading the status of the user: + + ``` + $ ./chip-tool doorlock get-user + ``` + + This command returns the status of the user at the specified __ + at the specified __ and __. + +- Reading the status of the credential: + + ``` + $ ./chip-tool doorlock get-credential-status <{Credential}> + ``` + + This command returns the status of the credential of the specified + _<{Credential}\>_ at the specified __ and __. + +- Cleaning the user: + + ``` + $ ./chip-tool doorlock clear-user --timedInteractionTimeoutMs + ``` + + This command cleans the slot containing the specified __ at the + specified __ and __. + +- Cleaning the credential: + + ``` + $ ./chip-tool doorlock clear-credential <{Credential}> --timedInteractionTimeoutMs + ``` + + This command cleans the slot containing the specified _<{Credential}\>_ at + the specified __ and __. + +### Operations with user PIN code + +If you set the __ to PIN when +[assigning credentials](#step-2-assign-a-credential), you can use the following +command patterns to verify if it works and invoke it to open or close the door +lock: + +- Verifying the PIN code: + + ``` + $ ./chip-tool doorlock read require-pinfor-remote-operation + ``` + + This command returns either `false` or `true`: + + - `false` indicates that providing the PIN code is not required to close + or open the door lock. + - `true` indicates that the PIN code is required to close or open the door + lock. + +- Changing the requirement for the PIN code usage: + + ``` + $ ./chip-tool doorlock write require-pinfor-remote-operation true + ``` + + This command modifies the setting of `require-pinfor-remote-operation` to + `true`. After you run it, you will have to use the PIN code to lock or + unlock the door. + +- Closing the door lock with the PIN code: + + ``` + $ ./chip-tool doorlock lock-door --timedInteractionTimeoutMs --PinCode 12345 + ``` + + In this command, you need to provide `--PinCode` corresponding to the PIN + code you set with __ (for example `12345`). + +- Opening the door lock with the PIN code: + + ``` + $ ./chip-tool doorlock unlock-door --timedInteractionTimeoutMs --PinCode 12345 + ``` + + In this command, you need to provide `--PinCode` corresponding to the PIN + code you set with __ (for example `12345`). diff --git a/docs/guides/esp32/README.md b/docs/guides/esp32/README.md index 89d9225cf65dd8..e487a58f318591 100644 --- a/docs/guides/esp32/README.md +++ b/docs/guides/esp32/README.md @@ -17,3 +17,4 @@ example on ESP32 series of SoCs - [RPC Console and Device Tracing](rpc_console.md) - [Matter OTA](ota.md) - [Generating and Using ESP Secure Cert Partition](secure_cert_partition.md) +- [BLE Settings](ble_settings.md) diff --git a/docs/guides/esp32/ble_settings.md b/docs/guides/esp32/ble_settings.md new file mode 100644 index 00000000000000..36178ebece5d71 --- /dev/null +++ b/docs/guides/esp32/ble_settings.md @@ -0,0 +1,32 @@ +# Bluetooth Low Energy (BLE) + +## Nimble: scan response + +The `ConfigureScanResponseData` API is used to configure the scan response data +for advertising in a Bluetooth Low Energy (BLE) application based on the NimBLE +BLE stack. Scan response data is additional data that a BLE peripheral device +can include in its advertising packets to provide more information about itself. +This API allows you to set the scan response data that will be included in the +advertising packets. + +### Usage + +``` +{ + uint8_t scanResponse[31]; // 0x05, 0x09, a, b, c, d + scanResponse[0] = 0x05; + scanResponse[1] = 0x09; + scanResponse[2] = 0x61; + scanResponse[3] = 0x62; + scanResponse[4] = 0x63; + scanResponse[5] = 0x64; + chip::ByteSpan data(scanResponse); + CHIP_ERROR err = chip::DeviceLayer::Internal::BLEMgrImpl().ConfigureScanResponseData(data); + if (err != CHIP_NO_ERROR) + { + ESP_LOGE(TAG, "Failed to configure scan response, err:%" CHIP_ERROR_FORMAT, err.Format()); + } +} +``` + +Note: Scan response should be configure before `InitServer`. 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 795a76f7eed3ec..bfe7a2737aac8c 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 @@ -75,6 +75,10 @@ server cluster Identify = 3 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 5f5f6a077b93f6..b30257ec7d9875 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 @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -535,6 +538,10 @@ server cluster BinaryInputBasic = 15 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -6064,6 +6071,7 @@ server cluster FaultInjection = 4294048774 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster OtaSoftwareUpdateProvider; @@ -6085,6 +6093,10 @@ endpoint 0 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -6103,6 +6115,10 @@ endpoint 0 { callback attribute subjectsPerAccessControlEntry default = 4; callback attribute targetsPerAccessControlEntry default = 3; callback attribute accessControlEntriesPerFabric default = 4; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -6131,6 +6147,10 @@ endpoint 0 { callback attribute uniqueID; callback attribute capabilityMinima; callback attribute productAppearance; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -6150,6 +6170,10 @@ endpoint 0 { server cluster LocalizationConfiguration { persist attribute activeLocale default = "en-US"; 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; } @@ -6160,6 +6184,7 @@ endpoint 0 { callback attribute supportedCalendarTypes; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6167,6 +6192,10 @@ endpoint 0 { server cluster UnitLocalization { persist attribute temperatureUnit default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x1; ram attribute clusterRevision default = 1; } @@ -6179,6 +6208,10 @@ endpoint 0 { ram attribute batReplacementNeeded; ram attribute batReplaceability; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 2; } @@ -6189,6 +6222,10 @@ endpoint 0 { callback attribute regulatoryConfig default = 0; callback attribute locationCapability default = 0; callback attribute supportsConcurrentConnection default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6202,6 +6239,10 @@ endpoint 0 { ram attribute lastNetworkingStatus; ram attribute lastNetworkID; ram attribute lastConnectErrorValue; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; } @@ -6227,6 +6268,7 @@ endpoint 0 { callback attribute testEventTriggersEnabled; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6374,6 +6416,10 @@ endpoint 0 { callback attribute windowStatus default = 0; callback attribute adminFabricIndex default = 1; callback attribute adminVendorId default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6385,6 +6431,10 @@ endpoint 0 { callback attribute commissionedFabrics; callback attribute trustedRootCertificates; callback attribute currentFabricIndex; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6394,6 +6444,10 @@ endpoint 0 { callback attribute groupTable; callback attribute maxGroupsPerFabric; callback attribute maxGroupKeysPerFabric; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6441,6 +6495,7 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_onofflight = 256, version 1; binding cluster OnOff; @@ -6448,12 +6503,20 @@ endpoint 1 { server cluster Identify { ram attribute identifyTime default = 0x0000; 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 = 4; } 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 = 4; } @@ -6467,6 +6530,10 @@ endpoint 1 { ram attribute lastConfiguredBy; ram attribute sceneTableSize; callback attribute remainingCapacity; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 5; } @@ -6477,6 +6544,10 @@ endpoint 1 { ram attribute onTime default = 0x0000; ram attribute offWaitTime default = 0x0000; persist attribute startUpOnOff default = 0xFF; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x0001; ram attribute clusterRevision default = 5; } @@ -6520,6 +6591,10 @@ endpoint 1 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -6547,6 +6622,10 @@ endpoint 1 { ram attribute batReplacementNeeded; ram attribute batReplaceability; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 2; } @@ -7451,21 +7530,57 @@ endpoint 1 { } } endpoint 2 { + device type ma_powersource = 17, version 1; device type ma_onofflight = 256, version 1; + server cluster Identify { + ram attribute identifyTime default = 0x0000; + ram attribute identifyType default = 0x00; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + } + 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 = 4; } + server cluster Scenes { + callback attribute sceneCount default = 0x00; + ram attribute currentScene default = 0x00; + ram attribute currentGroup default = 0x0000; + ram attribute sceneValid default = 0x00; + ram attribute nameSupport; + ram attribute sceneTableSize; + callback attribute remainingCapacity; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 5; + } + server cluster OnOff { ram attribute onOff default = 0x00; ram attribute globalSceneControl default = 1; ram attribute onTime default = 0; ram attribute offWaitTime default = 0; ram attribute startUpOnOff; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x0000; ram attribute clusterRevision default = 5; } @@ -7475,6 +7590,10 @@ endpoint 2 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -7487,6 +7606,10 @@ endpoint 2 { ram attribute batReplacementNeeded; ram attribute batReplaceability; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 2; } diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap index f7983bd036f737..f6115a8eee56fe 100644 --- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap +++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap @@ -16,6 +16,12 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json", @@ -23,19 +29,49 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data with some extensions" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" } ], "endpointTypes": [ { + "id": 11, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 55, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 56, + 55 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -800,6 +836,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -890,6 +942,86 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1014,7 +1146,41 @@ "mfgCode": null, "define": "ACCESS_CONTROL_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Access Control", @@ -1104,6 +1270,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1162,6 +1392,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1524,6 +1770,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1896,7 +2206,41 @@ "mfgCode": null, "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Localization Configuration", @@ -1938,6 +2282,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1978,7 +2386,41 @@ "mfgCode": null, "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Time Format Localization", @@ -2068,6 +2510,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2124,7 +2582,41 @@ "mfgCode": null, "define": "UNIT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Unit Localization", @@ -2150,6 +2642,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -2256,7 +2812,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -2784,7 +3374,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2800,7 +3390,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2810,13 +3400,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2894,6 +3500,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3026,6 +3648,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -3118,6 +3804,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3298,13 +4000,61 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -3407,7 +4157,33 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3620,6 +4396,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -6029,6 +6821,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6103,6 +6911,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -6211,6 +7083,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6367,6 +7255,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -6443,6 +7395,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6551,6 +7519,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9480,7 +10512,43 @@ ] }, { + "id": 8, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 61, + 56 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -9511,6 +10579,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -9569,6 +10653,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9661,6 +10809,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -9737,6 +10901,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9837,6 +11065,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -10041,6 +11285,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -10133,6 +11441,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -10245,7 +11569,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -10261,7 +11585,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -10271,13 +11595,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -10951,6 +12291,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -11041,6 +12397,86 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -11835,6 +13271,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -12379,7 +13831,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -12395,7 +13847,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -12405,13 +13857,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -28933,7 +30401,43 @@ ] }, { + "id": 9, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 61, + 56 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -28953,9 +30457,33 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "TriggerEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -28980,7 +30508,7 @@ "mfgCode": null, "define": "IDENTIFY_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "attributes": [ { "name": "IdentifyTime", @@ -28998,6 +30526,102 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "IdentifyType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "IdentifyTypeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29074,6 +30698,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29150,6 +30790,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -29250,6 +30954,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29274,7 +30994,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "commands": [ { "name": "AddSceneResponse", @@ -29406,6 +31126,134 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29455,9 +31303,49 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29564,6 +31452,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -29714,6 +31666,54 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "RemainingTime", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "LevelControlOptions", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29740,6 +31740,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -29830,6 +31846,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -30242,7 +32338,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -30770,7 +32900,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -30786,7 +32916,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -30796,13 +32926,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -32539,7 +34685,33 @@ ] }, { + "id": 10, "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "id": 106, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + }, + "deviceTypes": [ + { + "id": 106, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + } + ], + "deviceTypeRefs": [ + 106 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 61442 + ], "deviceTypeName": "MA-secondary-network-commissioning", "deviceTypeCode": 61442, "deviceTypeProfileId": 259, @@ -33021,36 +35193,28 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 2, "profileId": 259, "endpointId": 2, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 3, "profileId": 259, "endpointId": 65534, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 61442 + "networkId": 0 } ], "log": [] diff --git a/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h b/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h index 939213d296ad53..fd6df4b90359f1 100644 --- a/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h +++ b/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h @@ -26,79 +26,39 @@ namespace chip { namespace app { namespace Clusters { + namespace OperationalState { // This is an application level delegate to handle operational state commands according to the specific business logic. -class OperationalStateDelegate : public Delegate +class GenericOperationalStateDelegateImpl : public Delegate { - public: /** - * Get the current operational state. - * @return The current operational state value + * Get the countdown time. This attribute is not used in this application. + * @return The current countdown time. */ - uint8_t GetCurrentOperationalState() override; + app::DataModel::Nullable GetCountdownTime() override { return {}; }; /** - * Get the list of supported operational states. * Fills in the provided GenericOperationalState with the state at index `index` if there is one, * or returns CHIP_ERROR_NOT_FOUND if the index is out of range for the list of states. + * Note: This is used by the SDK to populate the operational state list attribute. If the contents of this list changes, + * the device SHALL call the Instance's ReportOperationalStateListChange method to report that this attribute has changed. * @param index The index of the state, with 0 representing the first state. * @param operationalState The GenericOperationalState is filled. */ CHIP_ERROR GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) override; /** - * Get the list of supported operational phases. * Fills in the provided GenericOperationalPhase with the phase at index `index` if there is one, * or returns CHIP_ERROR_NOT_FOUND if the index is out of range for the list of phases. + * Note: This is used by the SDK to populate the phase list attribute. If the contents of this list changes, the + * device SHALL call the Instance's ReportPhaseListChange method to report that this attribute has changed. * @param index The index of the phase, with 0 representing the first phase. * @param operationalPhase The GenericOperationalPhase is filled. */ CHIP_ERROR GetOperationalPhaseAtIndex(size_t index, GenericOperationalPhase & operationalPhase) override; - /** - * Get current operational error. - * @param error The GenericOperationalError to fill with the current operational error value - */ - void GetCurrentOperationalError(GenericOperationalError & error) override; - - /** - * Get current phase - * @param phase The app::DataModel::Nullable to fill with the current phase value - */ - void GetCurrentPhase(app::DataModel::Nullable & phase) override; - - /** - * Get countdown time - * @param time The app::DataModel::Nullable to fill with the coutdown time value - */ - void GetCountdownTime(app::DataModel::Nullable & time) override; - - /** - * Set operational error. - * @param opErrState The new operational error. - */ - CHIP_ERROR SetOperationalError(const GenericOperationalError & opErrState) override; - - /** - * Set current operational state. - * @param opState The operational state that should now be the current one. - */ - CHIP_ERROR SetOperationalState(uint8_t opState) override; - - /** - * Set operational phase. - * @param phase The operational phase that should now be the current one. - */ - CHIP_ERROR SetPhase(const app::DataModel::Nullable & phase) override; - - /** - * Set coutdown time. - * @param time The coutdown time that should now be the current one. - */ - CHIP_ERROR SetCountdownTime(const app::DataModel::Nullable & time) override; - // command callback /** * Handle Command Callback in application: Pause @@ -124,27 +84,74 @@ class OperationalStateDelegate : public Delegate */ void HandleStopStateCallback(GenericOperationalError & err) override; - OperationalStateDelegate(uint8_t aOperationalState, GenericOperationalError aOperationalError, - Span aOperationalStateList, - Span aOperationalPhaseList, - app::DataModel::Nullable aPhase = DataModel::Nullable(), - app::DataModel::Nullable aCountdownTime = DataModel::Nullable()) : - mOperationalState(aOperationalState), - mOperationalError(aOperationalError), mOperationalStateList(aOperationalStateList), - mOperationalPhaseList(aOperationalPhaseList), mOperationalPhase(aPhase), mCountdownTime(aCountdownTime) - {} - ~OperationalStateDelegate() = default; +protected: + Span mOperationalStateList; + Span mOperationalPhaseList; +}; +// This is an application level delegate to handle operational state commands according to the specific business logic. +class OperationalStateDelegate : public GenericOperationalStateDelegateImpl +{ private: - uint8_t mOperationalState; - GenericOperationalError mOperationalError; - app::DataModel::List mOperationalStateList; - Span mOperationalPhaseList; - app::DataModel::Nullable mOperationalPhase; - app::DataModel::Nullable mCountdownTime; + const GenericOperationalState opStateList[4] = { + GenericOperationalState(to_underlying(OperationalStateEnum::kStopped)), + GenericOperationalState(to_underlying(OperationalStateEnum::kRunning)), + GenericOperationalState(to_underlying(OperationalStateEnum::kPaused)), + GenericOperationalState(to_underlying(OperationalStateEnum::kError)), + }; + + const GenericOperationalPhase opPhaseList[1] = { + // Phase List is null + GenericOperationalPhase(DataModel::Nullable()), + }; + +public: + OperationalStateDelegate() + { + GenericOperationalStateDelegateImpl::mOperationalStateList = Span(opStateList); + GenericOperationalStateDelegateImpl::mOperationalPhaseList = Span(opPhaseList); + } }; +void Shutdown(); + } // namespace OperationalState + +namespace RvcOperationalState { + +// This is an application level delegate to handle operational state commands according to the specific business logic. +class RvcOperationalStateDelegate : public OperationalState::GenericOperationalStateDelegateImpl +{ +private: + const OperationalState::GenericOperationalState rvcOpStateList[7] = { + OperationalState::GenericOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped)), + OperationalState::GenericOperationalState(to_underlying(OperationalState::OperationalStateEnum::kRunning)), + OperationalState::GenericOperationalState(to_underlying(OperationalState::OperationalStateEnum::kPaused)), + OperationalState::GenericOperationalState(to_underlying(OperationalState::OperationalStateEnum::kError)), + OperationalState::GenericOperationalState( + to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kSeekingCharger)), + OperationalState::GenericOperationalState(to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kCharging)), + OperationalState::GenericOperationalState(to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kDocked)), + }; + + const OperationalState::GenericOperationalPhase rvcOpPhaseList[1] = { + // Phase List is null + OperationalState::GenericOperationalPhase(DataModel::Nullable()), + }; + +public: + RvcOperationalStateDelegate() + { + GenericOperationalStateDelegateImpl::mOperationalStateList = + Span(rvcOpStateList); + GenericOperationalStateDelegateImpl::mOperationalPhaseList = + Span(rvcOpPhaseList); + } +}; + +void Shutdown(); + +} // namespace RvcOperationalState } // namespace Clusters } // namespace app } // namespace chip diff --git a/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp b/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp index 7501e386db00b7..f8a465e831f6eb 100644 --- a/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp +++ b/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp @@ -17,106 +17,151 @@ */ #include -namespace chip { -namespace app { -namespace Clusters { -namespace OperationalState { +using namespace chip; +using namespace chip::app; +using namespace chip::app::Clusters; +using namespace chip::app::Clusters::OperationalState; +using namespace chip::app::Clusters::RvcOperationalState; -using chip::Protocols::InteractionModel::Status; - -CHIP_ERROR OperationalStateDelegate::SetOperationalState(uint8_t opState) +CHIP_ERROR GenericOperationalStateDelegateImpl::GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) { - mOperationalState = opState; + if (index >= mOperationalStateList.size()) + { + return CHIP_ERROR_NOT_FOUND; + } + operationalState = mOperationalStateList[index]; return CHIP_NO_ERROR; } -CHIP_ERROR OperationalStateDelegate::SetPhase(const app::DataModel::Nullable & phase) +CHIP_ERROR GenericOperationalStateDelegateImpl::GetOperationalPhaseAtIndex(size_t index, GenericOperationalPhase & operationalPhase) { - mOperationalPhase = phase; + if (index >= mOperationalPhaseList.size()) + { + return CHIP_ERROR_NOT_FOUND; + } + operationalPhase = mOperationalPhaseList[index]; return CHIP_NO_ERROR; } -CHIP_ERROR OperationalStateDelegate::SetCountdownTime(const app::DataModel::Nullable & time) +void GenericOperationalStateDelegateImpl::HandlePauseStateCallback(GenericOperationalError & err) { - mCountdownTime = time; - return CHIP_NO_ERROR; + // placeholder implementation + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kPaused)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } -uint8_t OperationalStateDelegate::GetCurrentOperationalState() +void GenericOperationalStateDelegateImpl::HandleResumeStateCallback(GenericOperationalError & err) { - return mOperationalState; + // placeholder implementation + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kRunning)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } -CHIP_ERROR OperationalStateDelegate::SetOperationalError(const GenericOperationalError & opErrState) +void GenericOperationalStateDelegateImpl::HandleStartStateCallback(GenericOperationalError & err) { - mOperationalError = opErrState; - return CHIP_NO_ERROR; + // placeholder implementation + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kRunning)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } -void OperationalStateDelegate::GetCurrentOperationalError(GenericOperationalError & error) +void GenericOperationalStateDelegateImpl::HandleStopStateCallback(GenericOperationalError & err) { - error = mOperationalError; + // placeholder implementation + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kStopped)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } -void OperationalStateDelegate::GetCurrentPhase(app::DataModel::Nullable & phase) -{ - phase = mOperationalPhase; -} +// Init Operational State cluster -void OperationalStateDelegate::GetCountdownTime(app::DataModel::Nullable & time) -{ - time = mCountdownTime; -} +static OperationalState::Instance * gOperationalStateInstance = nullptr; +static OperationalStateDelegate * gOperationalStateDelegate = nullptr; -CHIP_ERROR OperationalStateDelegate::GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) +void OperationalState::Shutdown() { - if (index > mOperationalStateList.size() - 1) + if (gOperationalStateInstance != nullptr) { - return CHIP_ERROR_NOT_FOUND; + delete gOperationalStateInstance; + gOperationalStateInstance = nullptr; } - operationalState = mOperationalStateList[index]; - return CHIP_NO_ERROR; -} - -CHIP_ERROR OperationalStateDelegate::GetOperationalPhaseAtIndex(size_t index, GenericOperationalPhase & operationalPhase) -{ - if (index > mOperationalPhaseList.size() - 1) + if (gOperationalStateDelegate != nullptr) { - return CHIP_ERROR_NOT_FOUND; + delete gOperationalStateDelegate; + gOperationalStateDelegate = nullptr; } - operationalPhase = mOperationalPhaseList[index]; - return CHIP_NO_ERROR; } -void OperationalStateDelegate::HandlePauseStateCallback(GenericOperationalError & err) +void emberAfOperationalStateClusterInitCallback(chip::EndpointId endpointId) { - // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kPaused); - err.Set(to_underlying(ErrorStateEnum::kNoError)); -} + VerifyOrDie(endpointId == 1); // this cluster is only enabled for endpoint 1. + VerifyOrDie(gOperationalStateInstance == nullptr && gOperationalStateDelegate == nullptr); -void OperationalStateDelegate::HandleResumeStateCallback(GenericOperationalError & err) -{ - // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kRunning); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + gOperationalStateDelegate = new OperationalStateDelegate; + EndpointId operationalStateEndpoint = 0x01; + gOperationalStateInstance = new Instance(gOperationalStateDelegate, operationalStateEndpoint, Clusters::OperationalState::Id); + + gOperationalStateInstance->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped)); + + gOperationalStateInstance->Init(); } -void OperationalStateDelegate::HandleStartStateCallback(GenericOperationalError & err) +// Init RVC Operational State cluster + +static OperationalState::Instance * gRvcOperationalStateInstance = nullptr; +static RvcOperationalStateDelegate * gRvcOperationalStateDelegate = nullptr; + +void RvcOperationalState::Shutdown() { - // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kRunning); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + if (gRvcOperationalStateInstance != nullptr) + { + delete gRvcOperationalStateInstance; + gRvcOperationalStateInstance = nullptr; + } + if (gRvcOperationalStateDelegate != nullptr) + { + delete gRvcOperationalStateDelegate; + gRvcOperationalStateDelegate = nullptr; + } } -void OperationalStateDelegate::HandleStopStateCallback(GenericOperationalError & err) +void emberAfRvcOperationalStateClusterInitCallback(chip::EndpointId endpointId) { - // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kStopped); - err.Set(to_underlying(ErrorStateEnum::kNoError)); -} + VerifyOrDie(endpointId == 1); // this cluster is only enabled for endpoint 1. + VerifyOrDie(gRvcOperationalStateInstance == nullptr && gRvcOperationalStateDelegate == nullptr); -} // namespace OperationalState -} // namespace Clusters -} // namespace app -} // namespace chip + gRvcOperationalStateDelegate = new RvcOperationalStateDelegate; + EndpointId operationalStateEndpoint = 0x01; + gRvcOperationalStateInstance = + new Instance(gRvcOperationalStateDelegate, operationalStateEndpoint, Clusters::RvcOperationalState::Id); + + gRvcOperationalStateInstance->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped)); + + gRvcOperationalStateInstance->Init(); +} diff --git a/examples/all-clusters-app/all-clusters-common/src/operational-state-delegates.cpp b/examples/all-clusters-app/all-clusters-common/src/operational-state-delegates.cpp deleted file mode 100644 index 2b8bb08be608ca..00000000000000 --- a/examples/all-clusters-app/all-clusters-common/src/operational-state-delegates.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * - * Copyright (c) 2023 Project CHIP Authors - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include -#include -#include -#include - -namespace chip { -namespace app { -namespace Clusters { -namespace OperationalState { - -/** - * class to present Enquiry Table of Delegates - */ -struct DelegatesEnquiryTable -{ - /** - * Endpoint Id - */ - EndpointId mEndpointId; - /** - * Cluster Id - */ - ClusterId mClusterId; - /** - * The delegate for the cluster instance given by mEndpointId and mClusterId. - */ - Delegate * pItem; -}; - -/* - * An example to present device's endpointId - */ -constexpr EndpointId kDemoEndpointId = 1; - -/** - * Operational State List - * Note: User Define - */ -static const GenericOperationalState opStateList[] = { - GenericOperationalState(to_underlying(OperationalStateEnum::kStopped)), - GenericOperationalState(to_underlying(OperationalStateEnum::kRunning)), - GenericOperationalState(to_underlying(OperationalStateEnum::kPaused)), - GenericOperationalState(to_underlying(OperationalStateEnum::kError)), -}; - -/** - * Phase List - * Note: User Define - */ -static const GenericOperationalPhase opPhaseList[] = { - /** - * Phase List is null - */ - GenericOperationalPhase(DataModel::Nullable()), -}; - -/** - * Operational State Delegate - * Note: User Define - */ -static OperationalStateDelegate opStateDelegate(to_underlying(OperationalStateEnum::kStopped), - GenericOperationalError(to_underlying(ErrorStateEnum::kNoError)), - Span(opStateList), - Span(opPhaseList)); - -/** - * RVC Operational State List - * Note: User Define - */ -static const GenericOperationalState rvcOpStateList[] = { - GenericOperationalState(to_underlying(OperationalStateEnum::kStopped)), - GenericOperationalState(to_underlying(OperationalStateEnum::kRunning)), - GenericOperationalState(to_underlying(OperationalStateEnum::kPaused)), - GenericOperationalState(to_underlying(OperationalStateEnum::kError)), - GenericOperationalState(to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kSeekingCharger)), - GenericOperationalState(to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kCharging)), - GenericOperationalState(to_underlying(Clusters::RvcOperationalState::OperationalStateEnum::kDocked)), -}; - -/** - * RVC Operational State Delegate - * Note: User Define - */ -static OperationalStateDelegate rvcOpStateDelegate(to_underlying(OperationalStateEnum::kStopped), - GenericOperationalError(to_underlying(ErrorStateEnum::kNoError)), - Span(rvcOpStateList), - Span(opPhaseList)); - -/** - * Enquiry Table of Operational State Cluster and alias Cluter Delegate corresponding to endpointId and clusterId - * Note: User Define - */ -constexpr DelegatesEnquiryTable kDelegatesEnquiryTable[] = { - // EndpointId, ClusterId, Delegate - { Clusters::OperationalState::kDemoEndpointId, Clusters::OperationalState::Id, &opStateDelegate }, - { Clusters::OperationalState::kDemoEndpointId, Clusters::RvcOperationalState::Id, &rvcOpStateDelegate }, -}; - -/** - * Get the pointer of target delegate for target endpoint and cluster - * @param[in] aEndpiontId The endpointId - * @param[in] aClusterID The clusterId - * @return the pointer of target delegate - */ -Delegate * getGenericDelegateTable(EndpointId aEndpointId, ClusterId aClusterId) -{ - for (size_t i = 0; i < ArraySize(kDelegatesEnquiryTable); ++i) - { - if (kDelegatesEnquiryTable[i].mEndpointId == aEndpointId && kDelegatesEnquiryTable[i].mClusterId == aClusterId) - { - return kDelegatesEnquiryTable[i].pItem; - } - } - return nullptr; -} - -// @brief Instance getter for the delegate for the given operational state alias cluster on the given endpoint. -// The delegate API assumes there will be separate delegate objects for each cluster instance. -// (i.e. each separate operational state cluster derivation, on each separate endpoint) -// @note This API should always be called prior to using the delegate and the return pointer should never be cached. -// @return Default global delegate instance. -Delegate * GetOperationalStateDelegate(EndpointId endpointId, ClusterId clusterId) -{ - return getGenericDelegateTable(endpointId, clusterId); -} - -} // namespace OperationalState -} // namespace Clusters -} // namespace app -} // namespace chip - -void MatterOperationalStateServerInit() -{ - using namespace chip::app; - static Clusters::OperationalState::OperationalStateServer operationalstateServer(Clusters::OperationalState::kDemoEndpointId, - Clusters::OperationalState::Id); - operationalstateServer.Init(); - - static Clusters::OperationalState::OperationalStateServer rvcOperationalstateServer(Clusters::OperationalState::kDemoEndpointId, - Clusters::RvcOperationalState::Id); - rvcOperationalstateServer.Init(); -} diff --git a/examples/all-clusters-app/cc13x2x7_26x2x7/.gn b/examples/all-clusters-app/cc13x2x7_26x2x7/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/all-clusters-app/cc13x2x7_26x2x7/.gn +++ b/examples/all-clusters-app/cc13x2x7_26x2x7/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/all-clusters-app/cc13x4_26x4/.gn b/examples/all-clusters-app/cc13x4_26x4/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/all-clusters-app/cc13x4_26x4/.gn +++ b/examples/all-clusters-app/cc13x4_26x4/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/all-clusters-app/cc13x4_26x4/args.gni b/examples/all-clusters-app/cc13x4_26x4/args.gni index a524bf977b9a23..c54b13b4208104 100644 --- a/examples/all-clusters-app/cc13x4_26x4/args.gni +++ b/examples/all-clusters-app/cc13x4_26x4/args.gni @@ -13,6 +13,7 @@ # limitations under the License. import("//build_overrides/chip.gni") +import("${chip_root}/config/standalone/args.gni") import("${chip_root}/examples/platform/cc13x4_26x4/args.gni") ti_simplelink_sdk_target = get_label_info(":sdk", "label_no_toolchain") diff --git a/examples/all-clusters-app/cc13x4_26x4/main/AppTask.cpp b/examples/all-clusters-app/cc13x4_26x4/main/AppTask.cpp index b8fa3a21a4f9d8..314ac6edd9adb4 100644 --- a/examples/all-clusters-app/cc13x4_26x4/main/AppTask.cpp +++ b/examples/all-clusters-app/cc13x4_26x4/main/AppTask.cpp @@ -216,14 +216,13 @@ int AppTask::Init() ; } -#ifdef CONFIG_OPENTHREAD_MTD_SED +#if CHIP_DEVICE_CONFIG_THREAD_FTD + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); +#elif CONFIG_OPENTHREAD_MTD_SED ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice); -#elif CONFIG_OPENTHREAD_MTD - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #else - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #endif - if (ret != CHIP_NO_ERROR) { PLAT_LOG("ConnectivityMgr().SetThreadDeviceType() failed"); diff --git a/examples/all-clusters-app/linux/.kvs b/examples/all-clusters-app/linux/.kvs deleted file mode 100644 index 9976ff5b8b7caf..00000000000000 --- a/examples/all-clusters-app/linux/.kvs +++ /dev/null @@ -1,28 +0,0 @@ -[DEFAULT] -f/1/ac/0/0=FSQBBSQCAjYDBmm2AQAYNAQY -f/1/g=FSQBACQCACQDACQEACQFACQGASQHABg= -f/1/i=FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQTAhgkBwEkCAEwCUEE3KqJqpPwju/MeqShRDFpusi544wfWj6+gYRG/nor4oHRLfTRz4+zihd9ONWqQ9zwA/CQomn+sjmIvbcRYIYh2DcKNQEpARgkAmAwBBQPVaSOYFdX6pOarWj2mXieOQsSJzAFFGx6kZSTgFw3YQDgKHYjei851xbkGDALQPRuk4wx/ZAQXSmais4GD0JyZl9Jwxq1MM8TUdUQ1nCQ0Q/VuHZqy0pR9HxjgLUDPy2b4YFJIT1rIf8ZYHAeaCMY -f/1/k/0=FSQBACQCATYDFScEUAIAAOx/AAAlBVRMMAYQ7QtLfz7zOjEY6QUsagDDPRgVJAQAJAUAMAYQAAAAAAAAAAAAAAAAAAAAABgVJAQAJAUAMAYQAAAAAAAAAAAAAAAAAAAAABgYJQf//xg= -f/1/m=FSUA8f8sAQAY -f/1/n=FTABAQEkAgE3AyQTAhgmBIAigScmBYAlTTo3BiQVASYRIUM0EhgkBwEkCAEwCUEE7R7vwTlybDjtGBspWXkUMSnID4um6q91pa7EQdCSIioP+AgPAA3zqzXyYunmoZbVijM9UbzOUhvacYvA+2xanzcKNQEoARgkAgE2AwQCBAEYMAQUi5rGWgAt12jH/3fxeswo+bhw+YcwBRQPVaSOYFdX6pOarWj2mXieOQsSJxgwC0AtXja1zqi99vqxUOcDooFbR7g3dR6FHR/DjYJOy2QgtY0m1Krqo9Whb9A//TtnLTpsXj+DKnl4cBJ6Zb1WGdhrGA== -f/1/o=FSQAATABYQTtHu/BOXJsOO0YGylZeRQxKcgPi6bqr3WlrsRB0JIiKg/4CA8ADfOrNfJi6eahltWKMz1RvM5SG9pxi8D7bFqftpuGwM3zJ0gq/ZXqozNld3ZK32h4PWWNKTlq3zM9wUEY -f/1/r=FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEECT5tju37pQzMYxhc2pumcwtyKq7elKv8mcWFxDqluOWVK6RJYxiytMv4NQA+JFg/rN8AVPzfz2txBhBJKEF0UDcKNQEpARgkAmAwBBRsepGUk4BcN2EA4Ch2I3ovOdcW5DAFFGx6kZSTgFw3YQDgKHYjei851xbkGDALQBPAPvpTcPaJ51tb6/5sPfKuU6QWe2ClszX+T9fCPL4ZSeJZq0ukzeGMqOgnlAh3MVzkugI2IKdO9e/lcAib04QY -f/1/s/000000000001B669=FTADEO0xJXt8dKE+RAjHrjhJCREwBCAkLjwW/9P1MAh7PKST7kCABWTyP5W6JnAccoRVc8JXPDAFDAAAAAAAAAAAAAAAABg= -g/a/0/2b/0=BWVuLVVT -g/a/1/102/7=Gw== -g/a/1/300/4001=Ag== -g/a/1/300/7=AAA= -g/a/1/8/0=/g== -g/fidx=FSQAAjYBBAEYGA== -g/gcc=E0Y8Aw== -g/gdc=PtW/BQ== -g/gfl=FSQBASQCARg= -g/im/ec=AAABAAAAAAA= -g/lkgt=FSYAgwxNLBg= -g/s/7TEle3x0oT5ECMeuOEkJEQ\x3d\x3d=FSQBASYCabYBABg= -g/sri=FhUkAQEmAmm2AQAYGA== -g/sum=MAA= -g/ts/tz=FhUgAAAkAQAsAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg= -wifi-pass= -wifi-ssid= - diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn index 766b482e5a4600..457f911debc9b0 100644 --- a/examples/all-clusters-app/linux/BUILD.gn +++ b/examples/all-clusters-app/linux/BUILD.gn @@ -29,7 +29,6 @@ source_set("chip-all-clusters-common") { "${chip_root}/examples/all-clusters-app/all-clusters-common/src/laundry-washer-controls-delegate-impl.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/laundry-washer-mode.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp", - "${chip_root}/examples/all-clusters-app/all-clusters-common/src/operational-state-delegates.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/resource-monitoring-instances.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp", diff --git a/examples/all-clusters-app/linux/main-common.cpp b/examples/all-clusters-app/linux/main-common.cpp index 71e86397ce7120..3f0c5071b13de1 100644 --- a/examples/all-clusters-app/linux/main-common.cpp +++ b/examples/all-clusters-app/linux/main-common.cpp @@ -22,6 +22,7 @@ #include "include/tv-callbacks.h" #include "laundry-washer-controls-delegate-impl.h" #include "laundry-washer-mode.h" +#include "operational-state-delegate-impl.h" #include "rvc-modes.h" #include "tcc-mode.h" #include @@ -56,12 +57,9 @@ NamedPipeCommands sChipNamedPipeCommands; AllClustersCommandDelegate sAllClustersCommandDelegate; Clusters::WindowCovering::WindowCoveringManager sWindowCoveringManager; -app::Clusters::TemperatureControl::AppSupportedTemperatureLevelsDelegate sAppSupportedTemperatureLevelsDelegate; +Clusters::TemperatureControl::AppSupportedTemperatureLevelsDelegate sAppSupportedTemperatureLevelsDelegate; } // namespace -#ifdef EMBER_AF_PLUGIN_OPERATIONAL_STATE_SERVER -extern void MatterOperationalStateServerInit(); -#endif #ifdef EMBER_AF_PLUGIN_DISHWASHER_ALARM_SERVER extern void MatterDishwasherAlarmServerInit(); #endif @@ -182,14 +180,11 @@ void ApplicationInit() gExampleDeviceInstanceInfoProvider.Init(defaultProvider); SetDeviceInstanceInfoProvider(&gExampleDeviceInstanceInfoProvider); } -#ifdef EMBER_AF_PLUGIN_OPERATIONAL_STATE_SERVER - MatterOperationalStateServerInit(); -#endif #ifdef EMBER_AF_PLUGIN_DISHWASHER_ALARM_SERVER MatterDishwasherAlarmServerInit(); #endif - app::Clusters::TemperatureControl::SetInstance(&sAppSupportedTemperatureLevelsDelegate); + Clusters::TemperatureControl::SetInstance(&sAppSupportedTemperatureLevelsDelegate); } void ApplicationShutdown() @@ -201,6 +196,9 @@ void ApplicationShutdown() Clusters::RvcRunMode::Shutdown(); Clusters::RefrigeratorAndTemperatureControlledCabinetMode::Shutdown(); + Clusters::OperationalState::Shutdown(); + Clusters::RvcOperationalState::Shutdown(); + if (sChipNamedPipeCommands.Stop() != CHIP_NO_ERROR) { ChipLogError(NotSpecified, "Failed to stop CHIP NamedPipeCommands"); 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 f374904547521a..aab1d712857433 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 @@ -70,7 +70,13 @@ server cluster Identify = 3 { INT16U identifyTime = 0; } + request struct TriggerEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + EffectVariantEnum effectVariant = 1; + } + command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0; + command access(invoke: manage) TriggerEffect(TriggerEffectRequest): DefaultSuccess = 64; } /** Attributes and commands for group configuration and manipulation. */ @@ -146,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -295,6 +304,10 @@ server cluster OnOff = 6 { } readonly attribute boolean onOff = 0; + readonly attribute boolean globalSceneControl = 16384; + attribute int16u onTime = 16385; + attribute int16u offWaitTime = 16386; + attribute access(write: manage) nullable OnOffStartUpOnOff startUpOnOff = 16387; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -302,9 +315,23 @@ server cluster OnOff = 6 { readonly attribute bitmap32 featureMap = 65532; readonly attribute int16u clusterRevision = 65533; + request struct OffWithEffectRequest { + OnOffEffectIdentifier effectIdentifier = 0; + int8u effectVariant = 1; + } + + request struct OnWithTimedOffRequest { + OnOffControl onOffControl = 0; + int16u onTime = 1; + int16u offWaitTime = 2; + } + command Off(): DefaultSuccess = 0; command On(): DefaultSuccess = 1; command Toggle(): DefaultSuccess = 2; + command OffWithEffect(OffWithEffectRequest): DefaultSuccess = 64; + command OnWithRecallGlobalScene(): DefaultSuccess = 65; + command OnWithTimedOff(OnWithTimedOffRequest): DefaultSuccess = 66; } /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ @@ -331,8 +358,10 @@ server cluster LevelControl = 8 { } readonly attribute nullable int8u currentLevel = 0; + readonly attribute int16u remainingTime = 1; attribute LevelControlOptions options = 15; attribute nullable int8u onLevel = 17; + attribute access(write: manage) nullable int8u startUpCurrentLevel = 16384; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -406,6 +435,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -510,6 +543,7 @@ server cluster AccessControl = 31 { } attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0; + attribute access(read: administer, write: administer) AccessControlExtensionStruct extension[] = 1; readonly attribute int16u subjectsPerAccessControlEntry = 2; readonly attribute int16u targetsPerAccessControlEntry = 3; readonly attribute int16u accessControlEntriesPerFabric = 4; @@ -3961,6 +3995,7 @@ server cluster UnitTesting = 4294048773 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster OtaSoftwareUpdateProvider; @@ -3982,6 +4017,10 @@ endpoint 0 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -3995,9 +4034,14 @@ endpoint 0 { server cluster AccessControl { emits event AccessControlEntryChanged; callback attribute acl; + callback attribute extension; callback attribute subjectsPerAccessControlEntry default = 4; callback attribute targetsPerAccessControlEntry default = 3; callback attribute accessControlEntriesPerFabric default = 4; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -4016,6 +4060,10 @@ endpoint 0 { callback attribute softwareVersion default = 0; callback attribute softwareVersionString; callback attribute capabilityMinima; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4035,6 +4083,10 @@ endpoint 0 { server cluster LocalizationConfiguration { persist attribute activeLocale default = "en-US"; 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; } @@ -4043,12 +4095,17 @@ endpoint 0 { persist attribute hourFormat default = 0; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } server cluster UnitLocalization { + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4058,6 +4115,10 @@ endpoint 0 { ram attribute order default = 3; ram attribute description default = "B1"; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -4068,6 +4129,10 @@ endpoint 0 { callback attribute regulatoryConfig default = 0; callback attribute locationCapability default = 0; callback attribute supportsConcurrentConnection default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4081,6 +4146,10 @@ endpoint 0 { ram attribute lastNetworkingStatus; ram attribute lastNetworkID; ram attribute lastConnectErrorValue; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; } @@ -4096,6 +4165,7 @@ endpoint 0 { callback attribute testEventTriggersEnabled; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -4156,6 +4226,10 @@ endpoint 0 { callback attribute windowStatus default = 0; callback attribute adminFabricIndex default = 1; callback attribute adminVendorId default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4167,6 +4241,10 @@ endpoint 0 { callback attribute commissionedFabrics; callback attribute trustedRootCertificates; callback attribute currentFabricIndex; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4176,6 +4254,10 @@ endpoint 0 { callback attribute groupTable; callback attribute maxGroupsPerFabric; callback attribute maxGroupKeysPerFabric; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -4201,18 +4283,27 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_onofflight = 256, version 1; server cluster Identify { ram attribute identifyTime default = 0x0000; 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 = 4; } 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 = 4; } @@ -4226,20 +4317,34 @@ endpoint 1 { ram attribute lastConfiguredBy; ram attribute sceneTableSize; callback attribute remainingCapacity; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 5; } server cluster OnOff { persist attribute onOff default = 0x00; + ram attribute globalSceneControl default = 0x01; + ram attribute onTime default = 0x0000; + ram attribute offWaitTime default = 0x0000; + persist attribute startUpOnOff default = 0xFF; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 5; } server cluster LevelControl { persist attribute currentLevel default = 0xFE; + ram attribute remainingTime default = 0x0000; ram attribute options default = 0x00; ram attribute onLevel default = 0xFF; + persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 0; ram attribute clusterRevision default = 5; } @@ -4249,6 +4354,10 @@ endpoint 1 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -4271,6 +4380,10 @@ endpoint 1 { ram attribute order default = 2; ram attribute description default = "B2"; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -4618,17 +4731,57 @@ endpoint 1 { } } endpoint 2 { + device type ma_powersource = 17, version 1; device type ma_onofflight = 256, version 1; + server cluster Identify { + ram attribute identifyTime default = 0x0000; + ram attribute identifyType default = 0x00; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + } + 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 = 4; } + server cluster Scenes { + callback attribute sceneCount default = 0x00; + ram attribute currentScene default = 0x00; + ram attribute currentGroup default = 0x0000; + ram attribute sceneValid default = 0x00; + ram attribute nameSupport; + ram attribute sceneTableSize; + callback attribute remainingCapacity; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 5; + } + server cluster OnOff { ram attribute onOff default = 0x00; + ram attribute globalSceneControl default = 1; + ram attribute onTime default = 0; + ram attribute offWaitTime default = 0; + ram attribute startUpOnOff; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x0000; ram attribute clusterRevision default = 5; } @@ -4638,6 +4791,10 @@ endpoint 2 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -4647,6 +4804,10 @@ endpoint 2 { ram attribute order default = 1; ram attribute description default = "B3"; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap index 2c6f2767baab80..0fa29974d490dc 100644 --- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap +++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap @@ -33,9 +33,45 @@ ], "endpointTypes": [ { + "id": 12, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 3, + 2 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -800,6 +836,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -890,6 +942,86 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1014,7 +1146,41 @@ "mfgCode": null, "define": "ACCESS_CONTROL_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Access Control", @@ -1046,7 +1212,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -1104,6 +1270,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1155,6 +1385,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1502,53 +1748,133 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ProductAppearance", + "code": 20, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "ProductAppearanceStruct", + "included": 0, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ], - "events": [ + }, { - "name": "StartUp", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "included": 1 - } - ] - }, - { - "name": "OTA Software Update Provider", - "code": 41, - "mfgCode": null, - "define": "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "StartUp", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "OTA Software Update Provider", + "code": 41, + "mfgCode": null, + "define": "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER", "side": "client", "enabled": 1, "commands": [ @@ -1859,7 +2185,41 @@ "mfgCode": null, "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Localization Configuration", @@ -1901,6 +2261,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1941,7 +2365,41 @@ "mfgCode": null, "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Time Format Localization", @@ -2031,6 +2489,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2087,20 +2561,54 @@ "mfgCode": null, "define": "UNIT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 - }, - { - "name": "Unit Localization", - "code": 45, - "mfgCode": null, - "define": "UNIT_LOCALIZATION_CLUSTER", - "side": "server", - "enabled": 1, + "enabled": 0, "attributes": [ { - "name": "TemperatureUnit", - "code": 0, - "mfgCode": null, + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Unit Localization", + "code": 45, + "mfgCode": null, + "define": "UNIT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "TemperatureUnit", + "code": 0, + "mfgCode": null, "side": "server", "type": "TempUnitEnum", "included": 0, @@ -2113,6 +2621,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -2219,7 +2791,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -2747,7 +3353,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2763,7 +3369,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2773,13 +3379,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2857,6 +3479,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2989,6 +3627,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -3082,18 +3784,34 @@ ], "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "client", - "type": "int16u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 } @@ -3261,13 +3979,61 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -3370,7 +4136,33 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3583,6 +4375,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -5485,6 +6293,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5559,6 +6383,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5667,6 +6555,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5824,57 +6728,121 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Group Key Management", - "code": 63, - "mfgCode": null, - "define": "GROUP_KEY_MANAGEMENT_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ + }, { - "name": "KeySetWrite", - "code": 0, + "name": "EventList", + "code": 65530, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "KeySetRead", + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Group Key Management", + "code": 63, + "mfgCode": null, + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "KeySetWrite", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "KeySetRead", "code": 1, "mfgCode": null, "source": "client", @@ -5899,6 +6867,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6007,6 +6991,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -8506,7 +9554,43 @@ ] }, { + "id": 14, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 8, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 8, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 8, + 3 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -8532,11 +9616,27 @@ "code": 64, "mfgCode": null, "source": "client", - "incoming": 0, + "incoming": 1, "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -8595,6 +9695,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -8687,6 +9851,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -8764,16 +9944,80 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -8863,6 +10107,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -9067,6 +10327,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9138,7 +10462,7 @@ "code": 64, "mfgCode": null, "source": "client", - "incoming": 0, + "incoming": 1, "outgoing": 0 }, { @@ -9146,7 +10470,7 @@ "code": 65, "mfgCode": null, "source": "client", - "incoming": 0, + "incoming": 1, "outgoing": 0 }, { @@ -9154,11 +10478,27 @@ "code": 66, "mfgCode": null, "source": "client", - "incoming": 0, + "incoming": 1, "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -9207,7 +10547,7 @@ "mfgCode": null, "side": "server", "type": "boolean", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -9223,7 +10563,7 @@ "mfgCode": null, "side": "server", "type": "int16u", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -9239,7 +10579,7 @@ "mfgCode": null, "side": "server", "type": "int16u", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -9255,7 +10595,7 @@ "mfgCode": null, "side": "server", "type": "OnOffStartUpOnOff", - "included": 0, + "included": 1, "storageOption": "NVM", "singleton": 0, "bounded": 0, @@ -9271,7 +10611,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -9287,7 +10627,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -9297,13 +10637,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -9569,7 +10925,7 @@ "mfgCode": null, "side": "server", "type": "int16u", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -9761,7 +11117,7 @@ "mfgCode": null, "side": "server", "type": "int8u", - "included": 0, + "included": 1, "storageOption": "NVM", "singleton": 0, "bounded": 0, @@ -9977,6 +11333,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -10068,50 +11440,130 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "TagList", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "array", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Binding", - "code": 30, - "mfgCode": null, - "define": "BINDING_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "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": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Binding", + "code": 30, + "mfgCode": null, + "define": "BINDING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "client", "type": "int16u", @@ -10861,6 +12313,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -11405,7 +12873,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -11421,7 +12889,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -11431,13 +12899,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -21315,7 +22799,43 @@ ] }, { + "id": 13, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 8, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 8, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 8, + 3 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -21335,9 +22855,33 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "TriggerEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21362,7 +22906,7 @@ "mfgCode": null, "define": "IDENTIFY_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "attributes": [ { "name": "IdentifyTime", @@ -21380,6 +22924,102 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "IdentifyType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "IdentifyTypeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21457,8 +23097,24 @@ ], "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "client", "type": "int16u", @@ -21532,6 +23188,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -21632,6 +23352,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21656,7 +23392,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "commands": [ { "name": "AddSceneResponse", @@ -21788,6 +23524,134 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21837,9 +23701,49 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21887,63 +23791,127 @@ "code": 16384, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 0, + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OffWaitTime", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpOnOff", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "OnOffStartUpOnOff", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OnTime", - "code": 16385, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 0, + "type": "array", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OffWaitTime", - "code": 16386, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 0, + "type": "array", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "StartUpOnOff", - "code": 16387, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "OnOffStartUpOnOff", - "included": 0, + "type": "array", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -22096,6 +24064,54 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "RemainingTime", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "LevelControlOptions", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -22122,6 +24138,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -22212,6 +24244,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -22624,7 +24736,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -23152,7 +25298,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -23168,7 +25314,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -23178,13 +25324,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -24921,7 +27083,33 @@ ] }, { + "id": 15, "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "id": 53, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + }, + "deviceTypes": [ + { + "id": 53, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + } + ], + "deviceTypeRefs": [ + 53 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 61442 + ], "deviceTypeName": "MA-secondary-network-commissioning", "deviceTypeCode": 61442, "deviceTypeProfileId": 259, @@ -25403,36 +27591,28 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 2, "profileId": 259, "endpointId": 2, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 3, "profileId": 259, "endpointId": 65534, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 61442 + "networkId": 0 } ], "log": [] diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter index bc4fba293eaf2a..8cf1d134b7be21 100644 --- a/examples/bridge-app/bridge-common/bridge-app.matter +++ b/examples/bridge-app/bridge-common/bridge-app.matter @@ -234,6 +234,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter index dd753ef6604bc4..891f96176d527e 100644 --- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter +++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter @@ -294,6 +294,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 d80bf1b8090fee..ad28e8f41c59f0 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 @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter index a900377942ee7f..d50e27780e1de7 100644 --- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter +++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter @@ -80,6 +80,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter index ba3a30fa140bbd..090d743914a027 100644 --- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter +++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter @@ -312,6 +312,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter index f3effbc359d308..38a729369ab873 100644 --- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter +++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter @@ -144,6 +144,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter index 94dc30652fdf9b..31c8ed8fadb13b 100644 --- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter +++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter @@ -294,6 +294,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter index 3782ad74a986f0..ecb2f15691a1b2 100644 --- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter +++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter @@ -144,6 +144,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter index 787b30ac3cb1e8..3be0f99db70da3 100644 --- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter +++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter @@ -294,6 +294,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter index 1d3baf23f19183..0d3b63c8e90a22 100644 --- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter +++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter index 213acb75ed9eae..67cd7c819ab8a4 100644 --- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter +++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter index 16e9d0ef0411b6..ca297f3e948261 100644 --- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter +++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter @@ -288,6 +288,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter index 5c702d2cffa763..f3c032b7c90efd 100644 --- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter +++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter index c5f60575c8c1ce..513b1f85bfd062 100644 --- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter +++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter index 13dcbe89df64a9..418acf12b07120 100644 --- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter +++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter index d94e6fe626812f..140440c3a61cd9 100644 --- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter +++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter @@ -294,6 +294,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter index 3c0073cdabffc7..e5acc9d6dad51d 100644 --- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter +++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter @@ -258,6 +258,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter index b8b71c9270d45d..3819767f7a7042 100644 --- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter +++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter @@ -193,6 +193,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter index 2168705b33d12d..54961c08b6486d 100644 --- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter +++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_pump_a811bb33a0.matter b/examples/chef/devices/rootnode_pump_a811bb33a0.matter index ed7e8711b41d46..2271e3dbc6864f 100644 --- a/examples/chef/devices/rootnode_pump_a811bb33a0.matter +++ b/examples/chef/devices/rootnode_pump_a811bb33a0.matter @@ -126,6 +126,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter index d88a83846a46cb..be757b542b1c20 100644 --- a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter +++ b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -269,6 +272,10 @@ server cluster Scenes = 5 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter index f61a30fbe1f489..c93e4888147843 100644 --- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter +++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter @@ -195,6 +195,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter index 7a3e29e9178450..03460d57e573e6 100644 --- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter +++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter @@ -219,6 +219,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter index 91bc0f44a6922b..d2f5ead381e993 100644 --- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter +++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter @@ -150,6 +150,10 @@ client cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter index b0274c116fe950..be7bf99502b438 100644 --- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter +++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter @@ -144,6 +144,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter index c3f077d00068cc..9f4e498ddf302b 100644 --- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter +++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter @@ -144,6 +144,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 31e22b6cf28454..8f908c719181c5 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 @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/dishwasher-app/asr/BUILD.gn b/examples/dishwasher-app/asr/BUILD.gn index 2b0cc1ef7507df..5a288f7a46ebdb 100755 --- a/examples/dishwasher-app/asr/BUILD.gn +++ b/examples/dishwasher-app/asr/BUILD.gn @@ -72,7 +72,6 @@ asr_executable("dishwasher_app") { sources = [ "${chip_root}/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp", - "${chip_root}/examples/dishwasher-app/dishwasher-common/src/operational-state-delegates.cpp", "${examples_plat_dir}/CHIPDeviceManager.cpp", "${examples_plat_dir}/LEDWidget.cpp", "${examples_plat_dir}/init_Matter.cpp", diff --git a/examples/dishwasher-app/asr/src/AppTask.cpp b/examples/dishwasher-app/asr/src/AppTask.cpp index d2d8d0cb34fa64..55acdfb95d6aea 100644 --- a/examples/dishwasher-app/asr/src/AppTask.cpp +++ b/examples/dishwasher-app/asr/src/AppTask.cpp @@ -20,7 +20,6 @@ #include "AppConfig.h" #include "CHIPDeviceManager.h" #include "DeviceCallbacks.h" -#include "operational-state-delegates.h" #include "qrcodegen.h" #include #include @@ -105,8 +104,6 @@ void AppTask::AppTaskMain(void * pvParameter) PrintOnboardingCodes(RendezvousInformationFlag(RendezvousInformationFlag::kOnNetwork)); #endif /* CONFIG_NETWORK_LAYER_BLE */ - /*Operational State Server Init*/ - MatterOperationalStateServerInit(); /* Delete task */ lega_rtos_delete_thread(NULL); } diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter index 4cbf4631a76715..23c25471bd3ade 100644 --- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter +++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h b/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h index 939213d296ad53..5133fb75c93b00 100644 --- a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h +++ b/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h @@ -34,10 +34,10 @@ class OperationalStateDelegate : public Delegate public: /** - * Get the current operational state. - * @return The current operational state value + * Get the countdown time. This attribute is not used in this application. + * @return The current countdown time. */ - uint8_t GetCurrentOperationalState() override; + app::DataModel::Nullable GetCountdownTime() override { return {}; }; /** * Get the list of supported operational states. @@ -57,48 +57,6 @@ class OperationalStateDelegate : public Delegate */ CHIP_ERROR GetOperationalPhaseAtIndex(size_t index, GenericOperationalPhase & operationalPhase) override; - /** - * Get current operational error. - * @param error The GenericOperationalError to fill with the current operational error value - */ - void GetCurrentOperationalError(GenericOperationalError & error) override; - - /** - * Get current phase - * @param phase The app::DataModel::Nullable to fill with the current phase value - */ - void GetCurrentPhase(app::DataModel::Nullable & phase) override; - - /** - * Get countdown time - * @param time The app::DataModel::Nullable to fill with the coutdown time value - */ - void GetCountdownTime(app::DataModel::Nullable & time) override; - - /** - * Set operational error. - * @param opErrState The new operational error. - */ - CHIP_ERROR SetOperationalError(const GenericOperationalError & opErrState) override; - - /** - * Set current operational state. - * @param opState The operational state that should now be the current one. - */ - CHIP_ERROR SetOperationalState(uint8_t opState) override; - - /** - * Set operational phase. - * @param phase The operational phase that should now be the current one. - */ - CHIP_ERROR SetPhase(const app::DataModel::Nullable & phase) override; - - /** - * Set coutdown time. - * @param time The coutdown time that should now be the current one. - */ - CHIP_ERROR SetCountdownTime(const app::DataModel::Nullable & time) override; - // command callback /** * Handle Command Callback in application: Pause @@ -124,26 +82,26 @@ class OperationalStateDelegate : public Delegate */ void HandleStopStateCallback(GenericOperationalError & err) override; - OperationalStateDelegate(uint8_t aOperationalState, GenericOperationalError aOperationalError, - Span aOperationalStateList, - Span aOperationalPhaseList, - app::DataModel::Nullable aPhase = DataModel::Nullable(), - app::DataModel::Nullable aCountdownTime = DataModel::Nullable()) : - mOperationalState(aOperationalState), - mOperationalError(aOperationalError), mOperationalStateList(aOperationalStateList), - mOperationalPhaseList(aOperationalPhaseList), mOperationalPhase(aPhase), mCountdownTime(aCountdownTime) - {} - ~OperationalStateDelegate() = default; - private: - uint8_t mOperationalState; - GenericOperationalError mOperationalError; - app::DataModel::List mOperationalStateList; - Span mOperationalPhaseList; - app::DataModel::Nullable mOperationalPhase; - app::DataModel::Nullable mCountdownTime; + const GenericOperationalState rvcOpStateList[4] = { + GenericOperationalState(to_underlying(OperationalStateEnum::kStopped)), + GenericOperationalState(to_underlying(OperationalStateEnum::kRunning)), + GenericOperationalState(to_underlying(OperationalStateEnum::kPaused)), + GenericOperationalState(to_underlying(OperationalStateEnum::kError)), + }; + + app::DataModel::List mOperationalStateList = Span(rvcOpStateList); + + const GenericOperationalPhase opPhaseList[1] = { + // Phase List is null + GenericOperationalPhase(DataModel::Nullable()), + }; + + Span mOperationalPhaseList = Span(opPhaseList); }; +void Shutdown(); + } // namespace OperationalState } // namespace Clusters } // namespace app diff --git a/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp b/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp index 7501e386db00b7..0b57ecec6fb62a 100644 --- a/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp +++ b/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp @@ -17,56 +17,10 @@ */ #include -namespace chip { -namespace app { -namespace Clusters { -namespace OperationalState { - -using chip::Protocols::InteractionModel::Status; - -CHIP_ERROR OperationalStateDelegate::SetOperationalState(uint8_t opState) -{ - mOperationalState = opState; - return CHIP_NO_ERROR; -} - -CHIP_ERROR OperationalStateDelegate::SetPhase(const app::DataModel::Nullable & phase) -{ - mOperationalPhase = phase; - return CHIP_NO_ERROR; -} - -CHIP_ERROR OperationalStateDelegate::SetCountdownTime(const app::DataModel::Nullable & time) -{ - mCountdownTime = time; - return CHIP_NO_ERROR; -} - -uint8_t OperationalStateDelegate::GetCurrentOperationalState() -{ - return mOperationalState; -} - -CHIP_ERROR OperationalStateDelegate::SetOperationalError(const GenericOperationalError & opErrState) -{ - mOperationalError = opErrState; - return CHIP_NO_ERROR; -} - -void OperationalStateDelegate::GetCurrentOperationalError(GenericOperationalError & error) -{ - error = mOperationalError; -} - -void OperationalStateDelegate::GetCurrentPhase(app::DataModel::Nullable & phase) -{ - phase = mOperationalPhase; -} - -void OperationalStateDelegate::GetCountdownTime(app::DataModel::Nullable & time) -{ - time = mCountdownTime; -} +using namespace chip; +using namespace chip::app; +using namespace chip::app::Clusters; +using namespace chip::app::Clusters::OperationalState; CHIP_ERROR OperationalStateDelegate::GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) { @@ -91,32 +45,86 @@ CHIP_ERROR OperationalStateDelegate::GetOperationalPhaseAtIndex(size_t index, Ge void OperationalStateDelegate::HandlePauseStateCallback(GenericOperationalError & err) { // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kPaused); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kPaused)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } void OperationalStateDelegate::HandleResumeStateCallback(GenericOperationalError & err) { // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kRunning); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kRunning)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } void OperationalStateDelegate::HandleStartStateCallback(GenericOperationalError & err) { // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kRunning); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kRunning)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } } void OperationalStateDelegate::HandleStopStateCallback(GenericOperationalError & err) { // placeholder implementation - mOperationalState = to_underlying(OperationalStateEnum::kStopped); - err.Set(to_underlying(ErrorStateEnum::kNoError)); + auto error = GetInstance()->SetOperationalState(to_underlying(OperationalStateEnum::kStopped)); + if (error == CHIP_NO_ERROR) + { + err.Set(to_underlying(ErrorStateEnum::kNoError)); + } + else + { + err.Set(to_underlying(ErrorStateEnum::kUnableToCompleteOperation)); + } +} + +static OperationalState::Instance * gOperationalStateInstance = nullptr; +static OperationalStateDelegate * gOperationalStateDelegate = nullptr; + +void OperationalState::Shutdown() +{ + if (gOperationalStateInstance != nullptr) + { + delete gOperationalStateInstance; + gOperationalStateInstance = nullptr; + } + if (gOperationalStateDelegate != nullptr) + { + delete gOperationalStateDelegate; + gOperationalStateDelegate = nullptr; + } } -} // namespace OperationalState -} // namespace Clusters -} // namespace app -} // namespace chip +void emberAfOperationalStateClusterInitCallback(chip::EndpointId endpointId) +{ + VerifyOrDie(endpointId == 1); // this cluster is only enabled for endpoint 1. + VerifyOrDie(gOperationalStateInstance == nullptr && gOperationalStateDelegate == nullptr); + + gOperationalStateDelegate = new OperationalStateDelegate; + EndpointId operationalStateEndpoint = 0x01; + gOperationalStateInstance = new Instance(gOperationalStateDelegate, operationalStateEndpoint, Clusters::OperationalState::Id); + + gOperationalStateInstance->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped)); + + gOperationalStateInstance->Init(); +} diff --git a/examples/dishwasher-app/dishwasher-common/src/operational-state-delegates.cpp b/examples/dishwasher-app/dishwasher-common/src/operational-state-delegates.cpp deleted file mode 100644 index 9d4a5cec4b111e..00000000000000 --- a/examples/dishwasher-app/dishwasher-common/src/operational-state-delegates.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * - * Copyright (c) 2023 Project CHIP Authors - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include -#include -#include -#include - -namespace chip { -namespace app { -namespace Clusters { -namespace OperationalState { - -/** - * class to present Enquiry Table of Delegates - */ -struct DelegatesEnquiryTable -{ - /** - * Endpoint Id - */ - EndpointId mEndpointId; - /** - * Cluster Id - */ - ClusterId mClusterId; - /** - * The delegate for the cluster instance given by mEndpointId and mClusterId. - */ - Delegate * pItem; -}; - -/* - * An example to present device's endpointId - */ -constexpr EndpointId kDemoEndpointId = 1; - -/** - * Operational State List - * Note: User Define - */ -static const GenericOperationalState opStateList[] = { - GenericOperationalState(to_underlying(OperationalStateEnum::kStopped)), - GenericOperationalState(to_underlying(OperationalStateEnum::kRunning)), - GenericOperationalState(to_underlying(OperationalStateEnum::kPaused)), - GenericOperationalState(to_underlying(OperationalStateEnum::kError)), -}; - -/** - * Phase List - * Note: User Define - */ -static const GenericOperationalPhase opPhaseList[] = { - /** - * Phase List is null - */ - GenericOperationalPhase(DataModel::Nullable()), -}; - -/** - * Operational State Delegate - * Note: User Define - */ -static OperationalStateDelegate opStateDelegate(to_underlying(OperationalStateEnum::kStopped), - GenericOperationalError(to_underlying(ErrorStateEnum::kNoError)), - Span(opStateList), - Span(opPhaseList)); - -/** - * Enquiry Table of Operational State Cluster and alias Cluter Delegate corresponding to endpointId and clusterId - * Note: User Define - */ -constexpr DelegatesEnquiryTable kDelegatesEnquiryTable[] = { - // EndpointId, ClusterId, Delegate - { Clusters::OperationalState::kDemoEndpointId, Clusters::OperationalState::Id, &opStateDelegate }, -}; - -/** - * Get the pointer of target delegate for target endpoint and cluster - * @param[in] aEndpiontId The endpointId - * @param[in] aClusterID The clusterId - * @return the pointer of target delegate - */ -Delegate * getGenericDelegateTable(EndpointId aEndpointId, ClusterId aClusterId) -{ - for (size_t i = 0; i < ArraySize(kDelegatesEnquiryTable); ++i) - { - if (kDelegatesEnquiryTable[i].mEndpointId == aEndpointId && kDelegatesEnquiryTable[i].mClusterId == aClusterId) - { - return kDelegatesEnquiryTable[i].pItem; - } - } - return nullptr; -} - -// @brief Instance getter for the delegate for the given operational state alias cluster on the given endpoint. -// The delegate API assumes there will be separate delegate objects for each cluster instance. -// (i.e. each separate operational state cluster derivation, on each separate endpoint) -// @note This API should always be called prior to using the delegate and the return pointer should never be cached. -// @return Default global delegate instance. -Delegate * GetOperationalStateDelegate(EndpointId endpointId, ClusterId clusterId) -{ - return getGenericDelegateTable(endpointId, clusterId); -} - -} // namespace OperationalState -} // namespace Clusters -} // namespace app -} // namespace chip - -void MatterOperationalStateServerInit() -{ - using namespace chip::app; - static Clusters::OperationalState::OperationalStateServer operationalstateServer(Clusters::OperationalState::kDemoEndpointId, - Clusters::OperationalState::Id); - operationalstateServer.Init(); -} diff --git a/examples/dishwasher-app/linux/BUILD.gn b/examples/dishwasher-app/linux/BUILD.gn index e6a53dc373168f..658fd8093d4616 100644 --- a/examples/dishwasher-app/linux/BUILD.gn +++ b/examples/dishwasher-app/linux/BUILD.gn @@ -25,7 +25,6 @@ config("includes") { executable("chip-dishwasher-app") { sources = [ "${chip_root}/examples/dishwasher-app/dishwasher-common/src/operational-state-delegate-impl.cpp", - "${chip_root}/examples/dishwasher-app/dishwasher-common/src/operational-state-delegates.cpp", "include/CHIPProjectAppConfig.h", "main.cpp", ] diff --git a/examples/dishwasher-app/linux/main.cpp b/examples/dishwasher-app/linux/main.cpp index 54e320ffc9e14c..d7bddbb102805b 100644 --- a/examples/dishwasher-app/linux/main.cpp +++ b/examples/dishwasher-app/linux/main.cpp @@ -15,25 +15,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "operational-state-delegates.h" +#include "operational-state-delegate-impl.h" #include -#include -#include -#include -#include - using namespace chip; using namespace chip::app; using namespace chip::app::Clusters; -void ApplicationInit() +void ApplicationInit() {} + +void ApplicationShutdown() { - MatterOperationalStateServerInit(); + OperationalState::Shutdown(); } -void ApplicationShutdown() {} - int main(int argc, char * argv[]) { if (ChipLinuxAppInit(argc, argv) != 0) diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImInvokeCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImInvokeCommand.kt index 79592aeb602943..73eab9eb15537f 100644 --- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImInvokeCommand.kt +++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImInvokeCommand.kt @@ -50,16 +50,28 @@ class PairOnNetworkLongImInvokeCommand( private inner class InternalInvokeCallback : InvokeCallback { override fun onError(e: Exception) { logger.log(Level.INFO, "Invoke receive onError" + e.message) - setFailure("write failure") + setFailure("invoke failure") } override fun onResponse(element: InvokeElement?, successCode: Long) { logger.log(Level.INFO, "Invoke receive OnResponse on ") if (element != null) { - logger.log(Level.INFO, element.toString()) + logger.log(Level.INFO, element.toString() + element.getJsonString()) + val clusterId = element.getClusterId().getId() + if (clusterId == CLUSTER_ID_IDENTIFY) { + logger.log(Level.INFO, "success code is $successCode") + setSuccess() + return + } else if ( + clusterId == CLUSTER_ID_TEST && element.getJsonString().equals("""{"0:UINT":2}""") + ) { + logger.log(Level.INFO, "success code is $successCode") + setSuccess() + return + } } - logger.log(Level.INFO, "success code is$successCode") - setSuccess() + + setFailure("invoke failure") } } @@ -76,20 +88,44 @@ class PairOnNetworkLongImInvokeCommand( override fun runCommand() { val number: UShort = 1u - val tlvWriter = TlvWriter() - tlvWriter.startStructure(AnonymousTag) - tlvWriter.put(ContextSpecificTag(0), number) - tlvWriter.endStructure() + val tlvWriter1 = TlvWriter() + tlvWriter1.startStructure(AnonymousTag) + tlvWriter1.put(ContextSpecificTag(0), number) + tlvWriter1.endStructure() - val element: InvokeElement = + val element1: InvokeElement = InvokeElement.newInstance( /* endpointId= */ 0, CLUSTER_ID_IDENTIFY, IDENTIFY_COMMAND, - tlvWriter.getEncoded(), + tlvWriter1.getEncoded(), + null + ) + + val tlvWriter2 = TlvWriter() + tlvWriter2.startStructure(AnonymousTag) + tlvWriter2.put(ContextSpecificTag(0), number) + tlvWriter2.put(ContextSpecificTag(1), number) + tlvWriter2.endStructure() + + val element2: InvokeElement = + InvokeElement.newInstance( + /* endpointId= */ 1, + CLUSTER_ID_TEST, + TEST_ADD_ARGUMENT_COMMAND, + tlvWriter2.getEncoded(), null ) + val element3: InvokeElement = + InvokeElement.newInstance( + /* endpointId= */ 1, + CLUSTER_ID_IDENTIFY, + IDENTIFY_COMMAND, + null, + """{"0:UINT":1}""" + ) + currentCommissioner() .pairDeviceWithAddress( getNodeId(), @@ -104,7 +140,13 @@ class PairOnNetworkLongImInvokeCommand( currentCommissioner() .getConnectedDevicePointer(getNodeId(), InternalGetConnectedDeviceCallback()) clear() - currentCommissioner().invoke(InternalInvokeCallback(), devicePointer, element, 0, 0) + currentCommissioner().invoke(InternalInvokeCallback(), devicePointer, element1, 0, 0) + waitCompleteMs(getTimeoutMillis()) + clear() + currentCommissioner().invoke(InternalInvokeCallback(), devicePointer, element2, 0, 0) + waitCompleteMs(getTimeoutMillis()) + clear() + currentCommissioner().invoke(InternalInvokeCallback(), devicePointer, element3, 0, 0) waitCompleteMs(getTimeoutMillis()) } @@ -114,5 +156,7 @@ class PairOnNetworkLongImInvokeCommand( private const val MATTER_PORT = 5540 private const val CLUSTER_ID_IDENTIFY = 0x0003L private const val IDENTIFY_COMMAND = 0L + private const val CLUSTER_ID_TEST = 0xFFF1FC05L + private const val TEST_ADD_ARGUMENT_COMMAND = 0X04L } } diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImWriteCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImWriteCommand.kt index 1492950ed9fa1a..10945a4e67af9f 100644 --- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImWriteCommand.kt +++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImWriteCommand.kt @@ -52,7 +52,7 @@ class PairOnNetworkLongImWriteCommand( } override fun onResponse(attributePath: ChipAttributePath?) { - logger.log(Level.INFO, "Write receve OnResponse on ") + logger.log(Level.INFO, "Write receive OnResponse on ") if (attributePath != null) { logger.log(Level.INFO, attributePath.toString()) } @@ -72,15 +72,25 @@ class PairOnNetworkLongImWriteCommand( } override fun runCommand() { - val tlvWriter = TlvWriter() - tlvWriter.put(AnonymousTag, true) - val attributeList = + val tlvWriter1 = TlvWriter() + tlvWriter1.put(AnonymousTag, true) + val attributeList1 = listOf( AttributeWriteRequest.newInstance( /* endpointId= */ 0, CLUSTER_ID_BASIC, ATTR_ID_LOCAL_CONFIG_DISABLED, - tlvWriter.getEncoded(), + tlvWriter1.getEncoded() + ) + ) + + val attributeList2 = + listOf( + AttributeWriteRequest.newInstance( + /* endpointId= */ 0, + CLUSTER_ID_BASIC, + ATTR_ID_LOCAL_CONFIG_DISABLED, + """{"40:BOOL":false}""" ) ) @@ -99,7 +109,11 @@ class PairOnNetworkLongImWriteCommand( .getConnectedDevicePointer(getNodeId(), InternalGetConnectedDeviceCallback()) clear() currentCommissioner() - .write(InternalWriteAttributesCallback(), devicePointer, attributeList, 0, 0) + .write(InternalWriteAttributesCallback(), devicePointer, attributeList1, 0, 0) + waitCompleteMs(getTimeoutMillis()) + clear() + currentCommissioner() + .write(InternalWriteAttributesCallback(), devicePointer, attributeList2, 0, 0) waitCompleteMs(getTimeoutMillis()) } 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 5984488b8c4032..9fb88932872ca7 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 @@ -200,6 +200,9 @@ server cluster Groups = 4 { client cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -442,6 +445,10 @@ client cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 ad1494ae56c863..ec1312d88f8fa3 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter @@ -321,6 +321,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 733e2fb6e74322..a50b84604e9318 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter @@ -321,6 +321,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/lighting-app/cc13x2x7_26x2x7/.gn b/examples/lighting-app/cc13x2x7_26x2x7/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/lighting-app/cc13x2x7_26x2x7/.gn +++ b/examples/lighting-app/cc13x2x7_26x2x7/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/lighting-app/cc13x2x7_26x2x7/args.gni b/examples/lighting-app/cc13x2x7_26x2x7/args.gni index a6a8662c4d14cb..9e64039395375a 100644 --- a/examples/lighting-app/cc13x2x7_26x2x7/args.gni +++ b/examples/lighting-app/cc13x2x7_26x2x7/args.gni @@ -33,7 +33,8 @@ chip_openthread_ftd = false openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc13x2_26x2:libopenthread-cc13x2_cc26x2" # Disable CHIP Logging -#chip_progress_logging = false +chip_progress_logging = false + #chip_detail_logging = false #chip_automation_logging = false diff --git a/examples/lighting-app/cc13x4_26x4/.gn b/examples/lighting-app/cc13x4_26x4/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/lighting-app/cc13x4_26x4/.gn +++ b/examples/lighting-app/cc13x4_26x4/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter index 2fd62d83a02e66..4040f58eeebb28 100644 --- a/examples/lighting-app/lighting-common/lighting-app.matter +++ b/examples/lighting-app/lighting-common/lighting-app.matter @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -465,6 +468,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter index ddccf7bbfa4b53..dbbfeb0fe01026 100644 --- a/examples/lighting-app/nxp/zap/lighting-on-off.matter +++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter @@ -314,6 +314,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter index 2e80c048f973f3..b68a8362a48349 100644 --- a/examples/lighting-app/qpg/zap/light.matter +++ b/examples/lighting-app/qpg/zap/light.matter @@ -317,6 +317,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 80580508259579..7c7495d3fc2187 100644 --- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter +++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -486,6 +489,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -1099,7 +1106,6 @@ server cluster PowerSource = 47 { readonly attribute int32u wiredNominalVoltage = 7; readonly attribute int32u wiredMaximumCurrent = 8; readonly attribute boolean wiredPresent = 9; - readonly attribute WiredFaultEnum activeWiredFaults[] = 10; readonly attribute endpoint_no endpointList[] = 31; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; @@ -2419,18 +2425,27 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_dimmablelight = 257, version 1; server cluster Identify { ram attribute identifyTime default = 0x0000; 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 = 4; } 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 = 4; } @@ -2446,6 +2461,7 @@ endpoint 1 { callback attribute remainingCapacity default = 8; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 5; @@ -2457,6 +2473,10 @@ endpoint 1 { ram attribute onTime default = 0x0000; ram attribute offWaitTime default = 0x0000; persist attribute startUpOnOff default = 0xFF; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 1; ram attribute clusterRevision default = 5; } @@ -2476,6 +2496,10 @@ endpoint 1 { ram attribute offTransitionTime; ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel default = 255; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 3; ram attribute clusterRevision default = 5; } @@ -2485,6 +2509,10 @@ endpoint 1 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -2500,12 +2528,12 @@ endpoint 1 { ram attribute wiredNominalVoltage default = 5000; ram attribute wiredMaximumCurrent default = 1000; ram attribute wiredPresent default = 1; - callback attribute activeWiredFaults; callback attribute endpointList; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; - ram attribute featureMap default = 0; + ram attribute featureMap default = 1; ram attribute clusterRevision default = 2; } diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap index 77ce7f1f3b2077..e0fc6f3b12e56d 100644 --- a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap @@ -33,7 +33,7 @@ ], "endpointTypes": [ { - "id": 1, + "id": 5, "name": "MA-rootdevice", "deviceTypeRef": { "id": 2, @@ -5790,7 +5790,7 @@ ] }, { - "id": 2, + "id": 6, "name": "MA-dimmablelight", "deviceTypeRef": { "id": 9, @@ -5806,16 +5806,26 @@ "profileId": 259, "label": "MA-dimmablelight", "name": "MA-dimmablelight" + }, + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" } ], "deviceTypeRefs": [ - 9 + 9, + 3 ], "deviceVersions": [ + 1, 1 ], "deviceIdentifiers": [ - 257 + 257, + 17 ], "deviceTypeName": "MA-dimmablelight", "deviceTypeCode": 257, @@ -5847,6 +5857,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5905,6 +5931,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5997,6 +6087,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6073,6 +6179,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -6197,6 +6367,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6463,7 +6649,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6581,6 +6767,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6687,6 +6889,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -6795,6 +7061,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -7051,7 +7333,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7067,7 +7349,23 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7083,7 +7381,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7135,6 +7433,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -7225,6 +7539,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -7475,7 +7869,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 1, + "included": 0, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7859,7 +8253,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7895,7 +8289,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, 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 57d28ea2dc19c4..7cc48b89a35a25 100644 --- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter +++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -465,6 +468,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -2258,18 +2265,27 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_dimmablelight = 257, version 1; server cluster Identify { ram attribute identifyTime default = 0x0000; 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 = 4; } 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 = 4; } @@ -2285,6 +2301,7 @@ endpoint 1 { callback attribute remainingCapacity; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 1; ram attribute clusterRevision default = 5; @@ -2296,6 +2313,10 @@ endpoint 1 { ram attribute onTime default = 0x0000; ram attribute offWaitTime default = 0x0000; persist attribute startUpOnOff default = 0xFF; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 1; ram attribute clusterRevision default = 5; } @@ -2315,6 +2336,10 @@ endpoint 1 { ram attribute offTransitionTime; ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel default = 255; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 3; ram attribute clusterRevision default = 5; } @@ -2324,6 +2349,10 @@ endpoint 1 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -2342,8 +2371,9 @@ endpoint 1 { callback attribute endpointList; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; - ram attribute featureMap default = 0; + ram attribute featureMap default = 1; ram attribute clusterRevision default = 2; } diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap index 048d6ef499fe67..1fde73b21e69f4 100644 --- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap @@ -33,7 +33,33 @@ ], "endpointTypes": [ { + "id": 9, "name": "MA-rootdevice", + "deviceTypeRef": { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + }, + "deviceTypes": [ + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 2 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], "deviceTypeName": "MA-rootdevice", "deviceTypeCode": 22, "deviceTypeProfileId": 259, @@ -5510,7 +5536,43 @@ ] }, { + "id": 10, "name": "MA-dimmablelight", + "deviceTypeRef": { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + }, + "deviceTypes": [ + { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + }, + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 9, + 3 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 257, + 17 + ], "deviceTypeName": "MA-dimmablelight", "deviceTypeCode": 257, "deviceTypeProfileId": 259, @@ -5541,6 +5603,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5599,6 +5677,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5691,6 +5833,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5767,6 +5925,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5891,6 +6113,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6133,7 +6371,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6251,6 +6489,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6357,6 +6611,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -6465,6 +6783,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6721,7 +7055,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6737,7 +7071,23 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6753,7 +7103,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6805,6 +7155,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6895,6 +7261,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -7901,7 +8347,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7937,7 +8383,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -9188,18 +9634,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-dimmablelight", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 257 + "networkId": 0 } ], "log": [] diff --git a/examples/lighting-app/silabs/src/ZclCallbacks.cpp b/examples/lighting-app/silabs/src/ZclCallbacks.cpp index cfbcbc8a191411..1a27a20da15a63 100644 --- a/examples/lighting-app/silabs/src/ZclCallbacks.cpp +++ b/examples/lighting-app/silabs/src/ZclCallbacks.cpp @@ -28,6 +28,10 @@ #include #include +#ifdef DIC_ENABLE +#include "dic.h" +#endif // DIC_ENABLE + using namespace ::chip; using namespace ::chip::app::Clusters; @@ -40,6 +44,9 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & if (clusterId == OnOff::Id && attributeId == OnOff::Attributes::OnOff::Id) { +#ifdef DIC_ENABLE + dic_sendmsg("light/state", (const char *) (value ? (*value ? "on" : "off") : "invalid")); +#endif // DIC_ENABLE LightMgr().InitiateAction(AppEvent::kEventType_Light, *value ? LightingManager::ON_ACTION : LightingManager::OFF_ACTION); } else if (clusterId == LevelControl::Id) diff --git a/examples/lock-app/cc13x2x7_26x2x7/.gn b/examples/lock-app/cc13x2x7_26x2x7/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/lock-app/cc13x2x7_26x2x7/.gn +++ b/examples/lock-app/cc13x2x7_26x2x7/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/lock-app/cc13x2x7_26x2x7/args.gni b/examples/lock-app/cc13x2x7_26x2x7/args.gni index bd3e05a0055114..52ad321e6bdfeb 100644 --- a/examples/lock-app/cc13x2x7_26x2x7/args.gni +++ b/examples/lock-app/cc13x2x7_26x2x7/args.gni @@ -34,7 +34,8 @@ openthread_external_platform = "${chip_root}/third_party/openthread/platforms/cc # Disable CHIP Logging chip_progress_logging = false -chip_detail_logging = false + +#chip_detail_logging = false chip_automation_logging = false # BLE options diff --git a/examples/lock-app/cc13x4_26x4/.gn b/examples/lock-app/cc13x4_26x4/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/lock-app/cc13x4_26x4/.gn +++ b/examples/lock-app/cc13x4_26x4/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/lock-app/cc13x4_26x4/args.gni b/examples/lock-app/cc13x4_26x4/args.gni index bea77489ce4158..c34d0cfcd5b08b 100644 --- a/examples/lock-app/cc13x4_26x4/args.gni +++ b/examples/lock-app/cc13x4_26x4/args.gni @@ -13,6 +13,7 @@ # limitations under the License. import("//build_overrides/chip.gni") +import("${chip_root}/config/standalone/args.gni") import("${chip_root}/examples/platform/cc13x4_26x4/args.gni") ti_simplelink_sdk_target = get_label_info(":sdk", "label_no_toolchain") diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter index 5480cb9c3d9283..c0b98e65560a01 100644 --- a/examples/lock-app/lock-common/lock-app.matter +++ b/examples/lock-app/lock-common/lock-app.matter @@ -70,7 +70,13 @@ server cluster Identify = 3 { INT16U identifyTime = 0; } + request struct TriggerEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + EffectVariantEnum effectVariant = 1; + } + command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0; + command access(invoke: manage) TriggerEffect(TriggerEffectRequest): DefaultSuccess = 64; } /** Attributes and commands for switching devices between 'On' and 'Off' states. */ @@ -124,6 +130,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -510,6 +520,29 @@ server cluster TimeFormatLocalization = 44 { readonly attribute int16u clusterRevision = 65533; } +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing preferences for the units in which values are conveyed in communication to a + user. As such, Nodes that visually or audibly convey measurable values to the user need a + mechanism by which they can be configured to use a user’s preferred unit. */ +server cluster UnitLocalization = 45 { + enum TempUnitEnum : ENUM8 { + kFahrenheit = 0; + kCelsius = 1; + kKelvin = 2; + } + + bitmap Feature : BITMAP32 { + kTemperatureUnit = 0x1; + } + + 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. */ server cluster PowerSource = 47 { enum BatApprovedChemistryEnum : ENUM16 { @@ -2279,6 +2312,7 @@ server cluster DoorLock = 257 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster OtaSoftwareUpdateProvider; @@ -2287,6 +2321,10 @@ endpoint 0 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -2299,6 +2337,9 @@ endpoint 0 { callback attribute subjectsPerAccessControlEntry default = 4; callback attribute targetsPerAccessControlEntry default = 3; callback attribute accessControlEntriesPerFabric default = 4; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2327,6 +2368,10 @@ endpoint 0 { persist attribute localConfigDisabled default = 0; callback attribute uniqueID; callback attribute capabilityMinima; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2346,6 +2391,10 @@ endpoint 0 { server cluster LocalizationConfiguration { persist attribute activeLocale default = "en-US"; 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; } @@ -2354,6 +2403,19 @@ endpoint 0 { persist attribute hourFormat default = 0; persist attribute activeCalendarType default = 0; callback attribute supportedCalendarTypes; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster UnitLocalization { + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2365,6 +2427,10 @@ endpoint 0 { ram attribute description default = "USB"; ram attribute wiredAssessedCurrent; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 1; ram attribute clusterRevision default = 2; } @@ -2375,6 +2441,10 @@ endpoint 0 { callback attribute regulatoryConfig default = 0; callback attribute locationCapability default = 0; callback attribute supportsConcurrentConnection default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2388,6 +2458,10 @@ endpoint 0 { ram attribute lastNetworkingStatus; ram attribute lastNetworkID; ram attribute lastConnectErrorValue; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; } @@ -2411,6 +2485,10 @@ endpoint 0 { callback attribute activeRadioFaults; callback attribute activeNetworkFaults; callback attribute testEventTriggersEnabled default = false; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2531,6 +2609,10 @@ endpoint 0 { callback attribute windowStatus default = 0; callback attribute adminFabricIndex default = 1; callback attribute adminVendorId default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2542,6 +2624,10 @@ endpoint 0 { callback attribute commissionedFabrics; callback attribute trustedRootCertificates; callback attribute currentFabricIndex; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2551,6 +2637,10 @@ endpoint 0 { callback attribute groupTable; callback attribute maxGroupsPerFabric; callback attribute maxGroupKeysPerFabric default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -2576,12 +2666,17 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_doorlock = 10, version 1; server cluster Identify { ram attribute identifyTime default = 0x0000; 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 = 4; } @@ -2601,6 +2696,10 @@ endpoint 1 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -2614,6 +2713,10 @@ endpoint 1 { ram attribute batReplaceability; ram attribute batReplacementDescription; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x0A; ram attribute clusterRevision default = 2; } @@ -2650,6 +2753,10 @@ endpoint 1 { ram attribute wrongCodeEntryLimit default = 3; ram attribute userCodeTemporaryDisableTime default = 10; ram attribute requirePINforRemoteOperation default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0x1DB3; ram attribute clusterRevision default = 7; } diff --git a/examples/lock-app/lock-common/lock-app.zap b/examples/lock-app/lock-common/lock-app.zap index c097b1b20df20b..e23670a09ebf80 100644 --- a/examples/lock-app/lock-common/lock-app.zap +++ b/examples/lock-app/lock-common/lock-app.zap @@ -33,9 +33,45 @@ ], "endpointTypes": [ { + "id": 26, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 3, + 2 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -610,6 +646,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -700,6 +752,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -740,7 +872,41 @@ "mfgCode": null, "define": "ACCESS_CONTROL_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Access Control", @@ -830,6 +996,54 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -904,6 +1118,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1251,55 +1481,135 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ProductAppearance", + "code": 20, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "ProductAppearanceStruct", + "included": 0, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ], - "events": [ + }, { - "name": "StartUp", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "included": 1 + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "ShutDown", - "code": 1, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "included": 1 + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "Leave", + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "1", + "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", @@ -1622,53 +1932,13 @@ "mfgCode": null, "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "client", - "enabled": 0 - }, - { - "name": "Localization Configuration", - "code": 43, - "mfgCode": null, - "define": "LOCALIZATION_CONFIGURATION_CLUSTER", - "side": "server", - "enabled": 1, + "enabled": 0, "attributes": [ - { - "name": "ActiveLocale", - "code": 0, - "mfgCode": null, - "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "NVM", - "singleton": 0, - "bounded": 0, - "defaultValue": "en-US", - "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": "", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, { "name": "FeatureMap", "code": 65532, "mfgCode": null, - "side": "server", + "side": "client", "type": "bitmap32", "included": 1, "storageOption": "RAM", @@ -1684,7 +1954,7 @@ "name": "ClusterRevision", "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", "type": "int16u", "included": 1, "storageOption": "RAM", @@ -1699,61 +1969,53 @@ ] }, { - "name": "Time Format Localization", - "code": 44, - "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Time Format Localization", - "code": 44, + "name": "Localization Configuration", + "code": 43, "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "HourFormat", + "name": "ActiveLocale", "code": 0, "mfgCode": null, "side": "server", - "type": "HourFormatEnum", + "type": "char_string", "included": 1, "storageOption": "NVM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "en-US", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveCalendarType", + "name": "SupportedLocales", "code": 1, "mfgCode": null, "side": "server", - "type": "CalendarTypeEnum", + "type": "array", "included": 1, - "storageOption": "NVM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SupportedCalendarTypes", - "code": 2, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1763,63 +2025,45 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Unit Localization", - "code": 45, - "mfgCode": null, - "define": "UNIT_LOCALIZATION_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Unit Localization", - "code": 45, - "mfgCode": null, - "define": "UNIT_LOCALIZATION_CLUSTER", - "side": "server", - "enabled": 0, - "attributes": [ + }, { - "name": "TemperatureUnit", - "code": 0, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "TempUnitEnum", - "included": 0, - "storageOption": "NVM", + "type": "array", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1863,42 +2107,18 @@ ] }, { - "name": "Power Source Configuration", - "code": 46, + "name": "Time Format Localization", + "code": 44, "mfgCode": null, - "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 - }, - { - "name": "Power Source Configuration", - "code": 46, - "mfgCode": null, - "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", - "side": "server", "enabled": 0, "attributes": [ - { - "name": "Sources", - "code": 0, - "mfgCode": null, - "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, { "name": "FeatureMap", "code": 65532, "mfgCode": null, - "side": "server", + "side": "client", "type": "bitmap32", "included": 1, "storageOption": "RAM", @@ -1914,7 +2134,7 @@ "name": "ClusterRevision", "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", "type": "int16u", "included": 1, "storageOption": "RAM", @@ -1929,45 +2149,37 @@ ] }, { - "name": "Power Source", - "code": 47, - "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Power Source", - "code": 47, + "name": "Time Format Localization", + "code": 44, "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "Status", + "name": "HourFormat", "code": 0, "mfgCode": null, "side": "server", - "type": "PowerSourceStatusEnum", + "type": "HourFormatEnum", "included": 1, - "storageOption": "RAM", + "storageOption": "NVM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Order", + "name": "ActiveCalendarType", "code": 1, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "CalendarTypeEnum", "included": 1, - "storageOption": "RAM", + "storageOption": "NVM", "singleton": 0, "bounded": 0, "defaultValue": "0", @@ -1977,27 +2189,43 @@ "reportableChange": 0 }, { - "name": "Description", + "name": "SupportedCalendarTypes", "code": 2, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "USB", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredAssessedCurrent", - "code": 6, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -2009,13 +2237,29 @@ "reportableChange": 0 }, { - "name": "EndpointList", - "code": 31, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2034,7 +2278,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -2050,57 +2294,38 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 } - ], - "events": [ - { - "name": "WiredFaultChange", - "code": 0, - "mfgCode": null, - "side": "server", - "included": 1 - } ] }, { - "name": "General Commissioning", - "code": 48, + "name": "Unit Localization", + "code": 45, "mfgCode": null, - "define": "GENERAL_COMMISSIONING_CLUSTER", + "define": "UNIT_LOCALIZATION_CLUSTER", "side": "client", "enabled": 0, - "commands": [ - { - "name": "ArmFailSafe", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, + "attributes": [ { - "name": "SetRegulatoryConfig", - "code": 2, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, - { - "name": "CommissioningComplete", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ { "name": "ClusterRevision", "code": 65533, @@ -2113,86 +2338,108 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "General Commissioning", - "code": 48, + "name": "Unit Localization", + "code": 45, "mfgCode": null, - "define": "GENERAL_COMMISSIONING_CLUSTER", + "define": "UNIT_LOCALIZATION_CLUSTER", "side": "server", "enabled": 1, - "commands": [ + "attributes": [ { - "name": "ArmFailSafeResponse", - "code": 1, + "name": "TemperatureUnit", + "code": 0, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "TempUnitEnum", + "included": 0, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "SetRegulatoryConfigResponse", - "code": 3, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "CommissioningCompleteResponse", - "code": 5, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { - "name": "Breadcrumb", - "code": 0, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BasicCommissioningInfo", - "code": 1, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "BasicCommissioningInfo", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RegulatoryConfig", - "code": 2, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "RegulatoryLocationTypeEnum", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "0", @@ -2202,32 +2449,50 @@ "reportableChange": 0 }, { - "name": "LocationCapability", - "code": 3, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "RegulatoryLocationTypeEnum", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Power Source Configuration", + "code": 46, + "mfgCode": null, + "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", + "side": "client", + "enabled": 0 + }, + { + "name": "Power Source Configuration", + "code": 46, + "mfgCode": null, + "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 0, + "attributes": [ { - "name": "SupportsConcurrentConnection", - "code": 4, + "name": "Sources", + "code": 0, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -2261,70 +2526,36 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Network Commissioning", - "code": 49, + "name": "Power Source", + "code": 47, "mfgCode": null, - "define": "NETWORK_COMMISSIONING_CLUSTER", + "define": "POWER_SOURCE_CLUSTER", "side": "client", "enabled": 0, - "commands": [ + "attributes": [ { - "name": "ScanNetworks", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "AddOrUpdateWiFiNetwork", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "AddOrUpdateThreadNetwork", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "RemoveNetwork", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "ConnectNetwork", - "code": 6, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, - { - "name": "ReorderNetwork", - "code": 8, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ { "name": "ClusterRevision", "code": 65533, @@ -2337,101 +2568,75 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Network Commissioning", - "code": 49, + "name": "Power Source", + "code": 47, "mfgCode": null, - "define": "NETWORK_COMMISSIONING_CLUSTER", + "define": "POWER_SOURCE_CLUSTER", "side": "server", "enabled": 1, - "commands": [ - { - "name": "ScanNetworksResponse", - "code": 1, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "NetworkConfigResponse", - "code": 5, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "ConnectNetworkResponse", - "code": 7, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - } - ], "attributes": [ { - "name": "MaxNetworks", + "name": "Status", "code": 0, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "PowerSourceStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Networks", + "name": "Order", "code": 1, "mfgCode": null, "side": "server", - "type": "array", + "type": "int8u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ScanMaxTimeSeconds", + "name": "Description", "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "char_string", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "USB", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ConnectMaxTimeSeconds", + "name": "WiredAssessedInputVoltage", "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2442,12 +2647,12 @@ "reportableChange": 0 }, { - "name": "InterfaceEnabled", + "name": "WiredAssessedInputFrequency", "code": 4, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 1, + "type": "int16u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2458,12 +2663,12 @@ "reportableChange": 0 }, { - "name": "LastNetworkingStatus", + "name": "WiredCurrentType", "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatusEnum", - "included": 1, + "type": "WiredCurrentTypeEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2474,11 +2679,11 @@ "reportableChange": 0 }, { - "name": "LastNetworkID", + "name": "WiredAssessedCurrent", "code": 6, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "int32u", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -2490,12 +2695,12 @@ "reportableChange": 0 }, { - "name": "LastConnectErrorValue", + "name": "WiredNominalVoltage", "code": 7, "mfgCode": null, "side": "server", - "type": "int32s", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2506,207 +2711,173 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "WiredMaximumCurrent", + "code": 8, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "WiredPresent", + "code": 9, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "boolean", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Diagnostic Logs", - "code": 50, - "mfgCode": null, - "define": "DIAGNOSTIC_LOGS_CLUSTER", - "side": "server", - "enabled": 1, - "commands": [ + }, { - "name": "RetrieveLogsRequest", - "code": 0, + "name": "ActiveWiredFaults", + "code": 10, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { - "name": "FeatureMap", - "code": 65532, + "name": "BatVoltage", + "code": 11, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatPercentRemaining", + "code": 12, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "int8u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "General Diagnostics", - "code": 51, - "mfgCode": null, - "define": "GENERAL_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatTimeRemaining", + "code": 13, "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, + "side": "server", + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "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", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ - { - "name": "NetworkInterfaces", - "code": 0, + "name": "BatChargeLevel", + "code": 14, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "BatChargeLevelEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RebootCount", - "code": 1, + "name": "BatReplacementNeeded", + "code": 15, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, - "storageOption": "External", + "type": "boolean", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "UpTime", - "code": 2, + "name": "BatReplaceability", + "code": 16, "mfgCode": null, "side": "server", - "type": "int64u", - "included": 1, - "storageOption": "External", + "type": "BatReplaceabilityEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TotalOperationalHours", - "code": 3, + "name": "BatPresent", + "code": 17, "mfgCode": null, "side": "server", - "type": "int32u", - "included": 1, - "storageOption": "External", + "type": "boolean", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BootReason", - "code": 4, + "name": "ActiveBatFaults", + "code": 18, "mfgCode": null, "side": "server", - "type": "BootReasonEnum", - "included": 1, - "storageOption": "External", + "type": "array", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2716,13 +2887,13 @@ "reportableChange": 0 }, { - "name": "ActiveHardwareFaults", - "code": 5, + "name": "BatReplacementDescription", + "code": 19, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "char_string", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2732,13 +2903,13 @@ "reportableChange": 0 }, { - "name": "ActiveRadioFaults", - "code": 6, + "name": "BatCommonDesignation", + "code": 20, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "BatCommonDesignationEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2748,13 +2919,13 @@ "reportableChange": 0 }, { - "name": "ActiveNetworkFaults", - "code": 7, + "name": "BatANSIDesignation", + "code": 21, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "char_string", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2764,137 +2935,77 @@ "reportableChange": 0 }, { - "name": "TestEventTriggersEnabled", - "code": 8, + "name": "BatIECDesignation", + "code": 22, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 1, - "storageOption": "External", + "type": "char_string", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "false", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "BatApprovedChemistry", + "code": 23, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "BatApprovedChemistryEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatCapacity", + "code": 24, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ], - "events": [ - { - "name": "HardwareFaultChange", - "code": 0, - "mfgCode": null, - "side": "server", - "included": 1 - }, - { - "name": "RadioFaultChange", - "code": 1, - "mfgCode": null, - "side": "server", - "included": 1 - }, - { - "name": "NetworkFaultChange", - "code": 2, - "mfgCode": null, - "side": "server", - "included": 1 }, { - "name": "BootReason", - "code": 3, + "name": "BatQuantity", + "code": 25, "mfgCode": null, "side": "server", - "included": 1 - } - ] - }, - { - "name": "Software Diagnostics", - "code": 52, - "mfgCode": null, - "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "ResetWatermarks", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, + "type": "int8u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Software Diagnostics", - "code": 52, - "mfgCode": null, - "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "ThreadMetrics", - "code": 0, + "name": "BatChargeState", + "code": 26, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "BatChargeStateEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2904,71 +3015,167 @@ "reportableChange": 0 }, { - "name": "CurrentHeapFree", - "code": 1, + "name": "BatTimeToFullCharge", + "code": 27, "mfgCode": null, "side": "server", - "type": "int64u", - "included": 1, - "storageOption": "External", + "type": "int32u", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CurrentHeapUsed", - "code": 2, + "name": "BatFunctionalWhileCharging", + "code": 28, "mfgCode": null, "side": "server", - "type": "int64u", - "included": 1, - "storageOption": "External", + "type": "boolean", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CurrentHeapHighWatermark", - "code": 3, + "name": "BatChargingCurrent", + "code": 29, "mfgCode": null, "side": "server", - "type": "int64u", - "included": 1, - "storageOption": "External", + "type": "int32u", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ActiveBatChargeFaults", + "code": 30, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "array", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", + "name": "EndpointList", + "code": 31, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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", @@ -2977,32 +3184,73 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } + ], + "events": [ + { + "name": "WiredFaultChange", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + } ] }, { - "name": "Thread Network Diagnostics", - "code": 53, + "name": "General Commissioning", + "code": 48, "mfgCode": null, - "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER", + "define": "GENERAL_COMMISSIONING_CLUSTER", "side": "client", "enabled": 0, "commands": [ { - "name": "ResetCounts", + "name": "ArmFailSafe", "code": 0, "mfgCode": null, "source": "client", "incoming": 1, + "outgoing": 1 + }, + { + "name": "SetRegulatoryConfig", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, "outgoing": 0 + }, + { + "name": "CommissioningComplete", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3022,35 +3270,61 @@ ] }, { - "name": "Thread Network Diagnostics", - "code": 53, + "name": "General Commissioning", + "code": 48, "mfgCode": null, - "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER", + "define": "GENERAL_COMMISSIONING_CLUSTER", "side": "server", "enabled": 1, + "commands": [ + { + "name": "ArmFailSafeResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "SetRegulatoryConfigResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "CommissioningCompleteResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + } + ], "attributes": [ { - "name": "Channel", + "name": "Breadcrumb", "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int64u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RoutingRole", + "name": "BasicCommissioningInfo", "code": 1, "mfgCode": null, "side": "server", - "type": "RoutingRoleEnum", + "type": "BasicCommissioningInfo", "included": 1, "storageOption": "External", "singleton": 0, @@ -3062,491 +3336,647 @@ "reportableChange": 0 }, { - "name": "NetworkName", + "name": "RegulatoryConfig", "code": 2, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "RegulatoryLocationTypeEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PanId", + "name": "LocationCapability", "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "RegulatoryLocationTypeEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ExtendedPanId", + "name": "SupportsConcurrentConnection", "code": 4, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "boolean", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MeshLocalPrefix", - "code": 5, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OverrunCount", - "code": 6, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NeighborTable", - "code": 7, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RouteTable", - "code": 8, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PartitionId", - "code": 9, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Weighting", - "code": 10, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 + } + ] + }, + { + "name": "Network Commissioning", + "code": 49, + "mfgCode": null, + "define": "NETWORK_COMMISSIONING_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "ScanNetworks", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 }, { - "name": "DataVersion", - "code": 11, + "name": "AddOrUpdateWiFiNetwork", + "code": 2, "mfgCode": null, - "side": "server", - "type": "int8u", + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "AddOrUpdateThreadNetwork", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "RemoveNetwork", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ConnectNetwork", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ReorderNetwork", + "code": 8, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "StableDataVersion", - "code": 12, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int8u", + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "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": "ScanNetworksResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 }, { - "name": "LeaderRouterId", - "code": 13, + "name": "NetworkConfigResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "ConnectNetworkResponse", + "code": 7, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "MaxNetworks", + "code": 0, "mfgCode": null, "side": "server", "type": "int8u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "DetachedRoleCount", - "code": 14, + "name": "Networks", + "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ChildRoleCount", - "code": 15, + "name": "ScanMaxTimeSeconds", + "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int8u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RouterRoleCount", - "code": 16, + "name": "ConnectMaxTimeSeconds", + "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int8u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LeaderRoleCount", - "code": 17, + "name": "InterfaceEnabled", + "code": 4, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "boolean", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AttachAttemptCount", - "code": 18, + "name": "LastNetworkingStatus", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "NetworkCommissioningStatusEnum", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PartitionIdChangeCount", - "code": 19, + "name": "LastNetworkID", + "code": 6, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "octet_string", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BetterPartitionAttachAttemptCount", - "code": 20, + "name": "LastConnectErrorValue", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32s", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ParentChangeCount", - "code": 21, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxTotalCount", - "code": 22, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxUnicastCount", - "code": 23, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxBroadcastCount", - "code": 24, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxAckRequestedCount", - "code": 25, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxAckedCount", - "code": 26, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "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": "TxNoAckRequestedCount", - "code": 27, + "name": "RetrieveLogsRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxDataCount", - "code": 28, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "General Diagnostics", + "code": 51, + "mfgCode": null, + "define": "GENERAL_DIAGNOSTICS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ { - "name": "TxDataPollCount", - "code": 29, + "name": "TestEventTrigger", + "code": 0, "mfgCode": null, - "side": "server", - "type": "int32u", + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxBeaconCount", - "code": 30, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int32u", + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "General Diagnostics", + "code": 51, + "mfgCode": null, + "define": "GENERAL_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ { - "name": "TxBeaconRequestCount", - "code": 31, + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "NetworkInterfaces", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TxOtherCount", - "code": 32, + "name": "RebootCount", + "code": 1, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, @@ -3558,24 +3988,24 @@ "reportableChange": 0 }, { - "name": "TxRetryCount", - "code": 33, + "name": "UpTime", + "code": 2, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxDirectMaxRetryExpiryCount", - "code": 34, + "name": "TotalOperationalHours", + "code": 3, "mfgCode": null, "side": "server", "type": "int32u", @@ -3583,402 +4013,492 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x00000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxIndirectMaxRetryExpiryCount", - "code": 35, + "name": "BootReason", + "code": 4, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "BootReasonEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxErrCcaCount", - "code": 36, + "name": "ActiveHardwareFaults", + "code": 5, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxErrAbortCount", - "code": 37, + "name": "ActiveRadioFaults", + "code": 6, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TxErrBusyChannelCount", - "code": 38, + "name": "ActiveNetworkFaults", + "code": 7, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxTotalCount", - "code": 39, + "name": "TestEventTriggersEnabled", + "code": 8, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "boolean", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "false", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxUnicastCount", - "code": 40, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxBroadcastCount", - "code": 41, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxDataCount", - "code": 42, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxDataPollCount", - "code": 43, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxBeaconCount", - "code": 44, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxBeaconRequestCount", - "code": 45, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 + } + ], + "events": [ + { + "name": "HardwareFaultChange", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 }, { - "name": "RxOtherCount", - "code": 46, + "name": "RadioFaultChange", + "code": 1, "mfgCode": null, "side": "server", - "type": "int32u", + "included": 1 + }, + { + "name": "NetworkFaultChange", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "BootReason", + "code": 3, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Software Diagnostics", + "code": 52, + "mfgCode": null, + "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "ResetWatermarks", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Software Diagnostics", + "code": 52, + "mfgCode": null, + "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "RxAddressFilteredCount", - "code": 47, + "name": "ThreadMetrics", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxDestAddrFilteredCount", - "code": 48, + "name": "CurrentHeapFree", + "code": 1, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxDuplicatedCount", - "code": 49, + "name": "CurrentHeapUsed", + "code": 2, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxErrNoFrameCount", - "code": 50, + "name": "CurrentHeapHighWatermark", + "code": 3, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrUnknownNeighborCount", - "code": 51, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RxErrInvalidSrcAddrCount", - "code": 52, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Thread Network Diagnostics", + "code": 53, + "mfgCode": null, + "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ { - "name": "RxErrSecCount", - "code": 53, + "name": "ResetCounts", + "code": 0, "mfgCode": null, - "side": "server", - "type": "int32u", + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Thread Network Diagnostics", + "code": 53, + "mfgCode": null, + "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "RxErrFcsCount", - "code": 54, + "name": "Channel", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrOtherCount", - "code": 55, + "name": "RoutingRole", + "code": 1, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "RoutingRoleEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ActiveTimestamp", - "code": 56, + "name": "NetworkName", + "code": 2, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PendingTimestamp", - "code": 57, + "name": "PanId", + "code": 3, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "Delay", - "code": 58, + "name": "ExtendedPanId", + "code": 4, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "SecurityPolicy", - "code": 59, + "name": "MeshLocalPrefix", + "code": 5, "mfgCode": null, "side": "server", - "type": "SecurityPolicy", + "type": "octet_string", "included": 1, "storageOption": "External", "singleton": 0, @@ -3990,27 +4510,27 @@ "reportableChange": 0 }, { - "name": "ChannelPage0Mask", - "code": 60, + "name": "OverrunCount", + "code": 6, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OperationalDatasetComponents", - "code": 61, + "name": "NeighborTable", + "code": 7, "mfgCode": null, "side": "server", - "type": "OperationalDatasetComponents", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, @@ -4022,8 +4542,8 @@ "reportableChange": 0 }, { - "name": "ActiveNetworkFaultsList", - "code": 62, + "name": "RouteTable", + "code": 8, "mfgCode": null, "side": "server", "type": "array", @@ -4038,89 +4558,59 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PartitionId", + "code": 9, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x000F", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "Weighting", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "WiFi Network Diagnostics", - "code": 54, - "mfgCode": null, - "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "ResetCounts", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "DataVersion", + "code": 11, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "WiFi Network Diagnostics", - "code": 54, - "mfgCode": null, - "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "BSSID", - "code": 0, + "name": "StableDataVersion", + "code": 12, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "int8u", "included": 1, "storageOption": "External", "singleton": 0, @@ -4132,11 +4622,11 @@ "reportableChange": 0 }, { - "name": "SecurityType", - "code": 1, + "name": "LeaderRouterId", + "code": 13, "mfgCode": null, "side": "server", - "type": "SecurityTypeEnum", + "type": "int8u", "included": 1, "storageOption": "External", "singleton": 0, @@ -4148,24 +4638,24 @@ "reportableChange": 0 }, { - "name": "WiFiVersion", - "code": 2, + "name": "DetachedRoleCount", + "code": 14, "mfgCode": null, "side": "server", - "type": "WiFiVersionEnum", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ChannelNumber", - "code": 3, + "name": "ChildRoleCount", + "code": 15, "mfgCode": null, "side": "server", "type": "int16u", @@ -4180,104 +4670,104 @@ "reportableChange": 0 }, { - "name": "RSSI", - "code": 4, + "name": "RouterRoleCount", + "code": 16, "mfgCode": null, "side": "server", - "type": "int8s", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "BeaconLostCount", - "code": 5, + "name": "LeaderRoleCount", + "code": 17, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "BeaconRxCount", - "code": 6, + "name": "AttachAttemptCount", + "code": 18, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketMulticastRxCount", - "code": 7, + "name": "PartitionIdChangeCount", + "code": 19, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketMulticastTxCount", - "code": 8, + "name": "BetterPartitionAttachAttemptCount", + "code": 20, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketUnicastRxCount", - "code": 9, + "name": "ParentChangeCount", + "code": 21, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketUnicastTxCount", - "code": 10, + "name": "TxTotalCount", + "code": 22, "mfgCode": null, "side": "server", "type": "int32u", @@ -4285,637 +4775,594 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentMaxRate", - "code": 11, + "name": "TxUnicastCount", + "code": 23, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OverrunCount", - "code": 12, + "name": "TxBroadcastCount", + "code": 24, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "TxAckRequestedCount", + "code": 25, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "TxAckedCount", + "code": 26, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ], - "events": [ - { - "name": "Disconnection", - "code": 0, - "mfgCode": null, - "side": "server", - "included": 1 - }, - { - "name": "AssociationFailure", - "code": 1, - "mfgCode": null, - "side": "server", - "included": 1 }, { - "name": "ConnectionStatus", - "code": 2, + "name": "TxNoAckRequestedCount", + "code": 27, "mfgCode": null, "side": "server", - "included": 1 - } - ] - }, - { - "name": "Ethernet Network Diagnostics", - "code": 55, - "mfgCode": null, - "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "ResetCounts", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "Ethernet Network Diagnostics", - "code": 55, - "mfgCode": null, - "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "PHYRate", - "code": 0, + "name": "TxDataCount", + "code": 28, "mfgCode": null, "side": "server", - "type": "PHYRateEnum", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FullDuplex", - "code": 1, + "name": "TxDataPollCount", + "code": 29, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketRxCount", - "code": 2, + "name": "TxBeaconCount", + "code": 30, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketTxCount", - "code": 3, + "name": "TxBeaconRequestCount", + "code": 31, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TxErrCount", - "code": 4, + "name": "TxOtherCount", + "code": 32, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CollisionCount", - "code": 5, + "name": "TxRetryCount", + "code": 33, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OverrunCount", - "code": 6, + "name": "TxDirectMaxRetryExpiryCount", + "code": 34, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CarrierDetect", - "code": 7, + "name": "TxIndirectMaxRetryExpiryCount", + "code": 35, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TimeSinceReset", - "code": 8, + "name": "TxErrCcaCount", + "code": 36, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "TxErrAbortCount", + "code": 37, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "TxErrBusyChannelCount", + "code": 38, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "Administrator Commissioning", - "code": 60, - "mfgCode": null, - "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "OpenCommissioningWindow", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 }, { - "name": "OpenBasicCommissioningWindow", - "code": 1, + "name": "RxTotalCount", + "code": 39, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "RevokeCommissioning", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, + "name": "RxUnicastCount", + "code": 40, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "Administrator Commissioning", - "code": 60, - "mfgCode": null, - "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "WindowStatus", - "code": 0, + "name": "RxBroadcastCount", + "code": 41, "mfgCode": null, "side": "server", - "type": "CommissioningWindowStatusEnum", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "AdminFabricIndex", - "code": 1, + "name": "RxDataCount", + "code": 42, "mfgCode": null, "side": "server", - "type": "fabric_idx", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "AdminVendorId", - "code": 2, + "name": "RxDataPollCount", + "code": 43, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "RxBeaconCount", + "code": 44, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "RxBeaconRequestCount", + "code": 45, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "Operational Credentials", - "code": 62, - "mfgCode": null, - "define": "OPERATIONAL_CREDENTIALS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "AttestationRequest", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 }, { - "name": "CertificateChainRequest", - "code": 2, + "name": "RxOtherCount", + "code": 46, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "CSRRequest", - "code": 4, + "name": "RxAddressFilteredCount", + "code": 47, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "AddNOC", - "code": 6, + "name": "RxDestAddrFilteredCount", + "code": 48, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "UpdateNOC", - "code": 7, + "name": "RxDuplicatedCount", + "code": 49, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "UpdateFabricLabel", - "code": 9, + "name": "RxErrNoFrameCount", + "code": 50, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveFabric", - "code": 10, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "AddTrustedRootCertificate", - "code": 11, + "name": "RxErrUnknownNeighborCount", + "code": 51, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "RxErrInvalidSrcAddrCount", + "code": 52, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000", "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": "AttestationResponse", - "code": 1, + "name": "RxErrSecCount", + "code": 53, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "CertificateChainResponse", - "code": 3, + "name": "RxErrFcsCount", + "code": 54, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "CSRResponse", - "code": 5, + "name": "RxErrOtherCount", + "code": 55, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "NOCResponse", - "code": 8, + "name": "ActiveTimestamp", + "code": 56, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { - "name": "NOCs", - "code": 0, + "name": "PendingTimestamp", + "code": 57, "mfgCode": null, "side": "server", - "type": "array", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Fabrics", - "code": 1, + "name": "Delay", + "code": 58, "mfgCode": null, "side": "server", - "type": "array", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SupportedFabrics", - "code": 2, + "name": "SecurityPolicy", + "code": 59, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "SecurityPolicy", "included": 1, "storageOption": "External", "singleton": 0, @@ -4927,27 +5374,27 @@ "reportableChange": 0 }, { - "name": "CommissionedFabrics", - "code": 3, + "name": "ChannelPage0Mask", + "code": 60, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "octet_string", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TrustedRootCertificates", - "code": 4, + "name": "OperationalDatasetComponents", + "code": 61, "mfgCode": null, "side": "server", - "type": "array", + "type": "OperationalDatasetComponents", "included": 1, "storageOption": "External", "singleton": 0, @@ -4959,19 +5406,19 @@ "reportableChange": 0 }, { - "name": "CurrentFabricIndex", - "code": 5, + "name": "ActiveNetworkFaultsList", + "code": 62, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { @@ -4984,7 +5431,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x000F", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5009,214 +5456,252 @@ ] }, { - "name": "Group Key Management", - "code": 63, + "name": "WiFi Network Diagnostics", + "code": 54, "mfgCode": null, - "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, "commands": [ { - "name": "KeySetWrite", + "name": "ResetCounts", "code": 0, "mfgCode": null, "source": "client", "incoming": 1, "outgoing": 0 - }, - { - "name": "KeySetRead", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "KeySetRemove", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, + } + ], + "attributes": [ { - "name": "KeySetReadAllIndices", - "code": 4, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 } ] }, { - "name": "Group Key Management", - "code": 63, + "name": "WiFi Network Diagnostics", + "code": 54, "mfgCode": null, - "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", "side": "server", "enabled": 1, - "commands": [ + "attributes": [ { - "name": "KeySetReadResponse", - "code": 2, + "name": "BSSID", + "code": 0, "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "KeySetReadAllIndicesResponse", - "code": 5, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SecurityType", + "code": 1, "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "SecurityTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, { - "name": "GroupKeyMap", - "code": 0, + "name": "WiFiVersion", + "code": 2, "mfgCode": null, "side": "server", - "type": "array", + "type": "WiFiVersionEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ChannelNumber", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RSSI", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int8s", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BeaconLostCount", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00000000", + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "GroupTable", - "code": 1, + "name": "BeaconRxCount", + "code": 6, "mfgCode": null, "side": "server", - "type": "array", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxGroupsPerFabric", - "code": 2, + "name": "PacketMulticastRxCount", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxGroupKeysPerFabric", - "code": 3, + "name": "PacketMulticastTxCount", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "PacketUnicastRxCount", + "code": 9, "mfgCode": null, "side": "server", - "type": "array", - "included": 0, + "type": "int32u", + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PacketUnicastTxCount", + "code": 10, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "CurrentMaxRate", + "code": 11, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int64u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Fixed Label", - "code": 64, - "mfgCode": null, - "define": "FIXED_LABEL_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Fixed Label", - "code": 64, - "mfgCode": null, - "define": "FIXED_LABEL_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "LabelList", - "code": 0, + "name": "OverrunCount", + "code": 12, "mfgCode": null, "side": "server", - "type": "array", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5232,7 +5717,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5250,58 +5735,2203 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 } + ], + "events": [ + { + "name": "Disconnection", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "AssociationFailure", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "ConnectionStatus", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } ] }, { - "name": "User Label", - "code": 65, + "name": "Ethernet Network Diagnostics", + "code": 55, "mfgCode": null, - "define": "USER_LABEL_CLUSTER", + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "commands": [ + { + "name": "ResetCounts", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] }, { - "name": "User Label", - "code": 65, + "name": "Ethernet Network Diagnostics", + "code": 55, "mfgCode": null, - "define": "USER_LABEL_CLUSTER", + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "LabelList", + "name": "PHYRate", "code": 0, "mfgCode": null, "side": "server", - "type": "array", + "type": "PHYRateEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FullDuplex", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PacketRxCount", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "PacketTxCount", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxErrCount", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CollisionCount", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OverrunCount", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CarrierDetect", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TimeSinceReset", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "OpenCommissioningWindow", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "OpenBasicCommissioningWindow", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RevokeCommissioning", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "WindowStatus", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "CommissioningWindowStatusEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "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": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminVendorId", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "AttestationRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CertificateChainRequest", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CSRRequest", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddNOC", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UpdateNOC", + "code": 7, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "UpdateFabricLabel", + "code": 9, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveFabric", + "code": 10, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddTrustedRootCertificate", + "code": 11, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AttestationResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CertificateChainResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CSRResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "NOCResponse", + "code": 8, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "NOCs", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Fabrics", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "", + "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": "", + "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": "", + "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": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Group Key Management", + "code": 63, + "mfgCode": null, + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "KeySetWrite", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "KeySetRead", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "KeySetRemove", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "KeySetReadAllIndices", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Group Key Management", + "code": 63, + "mfgCode": null, + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "KeySetReadResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "KeySetReadAllIndicesResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "GroupKeyMap", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GroupTable", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupsPerFabric", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupKeysPerFabric", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "client", + "enabled": 0 + }, + { + "name": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "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": "User Label", + "code": 65, + "mfgCode": null, + "define": "USER_LABEL_CLUSTER", + "side": "client", + "enabled": 0 + }, + { + "name": "User Label", + "code": 65, + "mfgCode": null, + "define": "USER_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "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": "ICD Management", + "code": 70, + "mfgCode": null, + "define": "ICD_MANAGEMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "ICD Management", + "code": 70, + "mfgCode": null, + "define": "ICD_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "RegisterClientResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "IdleModeInterval", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "500", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveModeInterval", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "300", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveModeThreshold", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "300", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RegisteredClients", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ICDCounter", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientsSupportedPerFabric", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "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": "Occupancy Sensing", + "code": 1030, + "mfgCode": null, + "define": "OCCUPANCY_SENSING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Occupancy Sensing", + "code": 1030, + "mfgCode": null, + "define": "OCCUPANCY_SENSING_CLUSTER", + "side": "server", + "enabled": 0, + "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": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + } + ] + }, + { + "id": 27, + "name": "MA-doorlock", + "deviceTypeRef": { + "id": 29, + "code": 10, + "profileId": 259, + "label": "MA-doorlock", + "name": "MA-doorlock" + }, + "deviceTypes": [ + { + "id": 29, + "code": 10, + "profileId": 259, + "label": "MA-doorlock", + "name": "MA-doorlock" + }, + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 29, + 3 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 10, + 17 + ], + "deviceTypeName": "MA-doorlock", + "deviceTypeCode": 10, + "deviceTypeProfileId": 259, + "clusters": [ + { + "name": "Identify", + "code": 3, + "mfgCode": null, + "define": "IDENTIFY_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "Identify", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "TriggerEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Identify", + "code": 3, + "mfgCode": null, + "define": "IDENTIFY_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "IdentifyTime", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "AddGroup", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "ViewGroup", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "GetGroupMembership", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveGroup", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveAllGroups", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddGroupIfIdentifying", + "code": 5, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "server", + "enabled": 0, + "commands": [ + { + "name": "AddGroupResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "ViewGroupResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "GetGroupMembershipResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveGroupResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "NameSupport", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "NameSupportBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Scenes", + "code": 5, + "mfgCode": null, + "define": "SCENES_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "AddScene", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "ViewScene", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveScene", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveAllScenes", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StoreScene", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RecallScene", + "code": 5, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "GetSceneMembership", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Scenes", + "code": 5, + "mfgCode": null, + "define": "SCENES_CLUSTER", + "side": "server", + "enabled": 0, + "commands": [ + { + "name": "AddSceneResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "ViewSceneResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveSceneResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveAllScenesResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StoreSceneResponse", + "code": 4, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "GetSceneMembershipResponse", + "code": 6, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "SceneCount", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentScene", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentGroup", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "group_id", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SceneValid", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "NameSupport", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "bitmap8", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { @@ -5314,38 +7944,48 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "5", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 } ] }, { - "name": "ICD Management", - "code": 70, + "name": "On/Off", + "code": 6, "mfgCode": null, - "define": "ICD_MANAGEMENT_CLUSTER", + "define": "ON_OFF_CLUSTER", "side": "client", "enabled": 0, - "attributes": [ + "commands": [ { - "name": "FeatureMap", - "code": 65532, + "name": "Off", + "code": 0, "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 + "source": "client", + "incoming": 1, + "outgoing": 1 }, + { + "name": "On", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "Toggle", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ { "name": "ClusterRevision", "code": 65533, @@ -5356,104 +7996,62 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "5", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 } ] }, { - "name": "ICD Management", - "code": 70, + "name": "On/Off", + "code": 6, "mfgCode": null, - "define": "ICD_MANAGEMENT_CLUSTER", + "define": "ON_OFF_CLUSTER", "side": "server", "enabled": 1, - "commands": [ - { - "name": "RegisterClientResponse", - "code": 1, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 0 - } - ], "attributes": [ { - "name": "IdleModeInterval", + "name": "OnOff", "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "boolean", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "500", + "defaultValue": "0x00", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ActiveModeInterval", - "code": 1, + "name": "GlobalSceneControl", + "code": 16384, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "boolean", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "300", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveModeThreshold", - "code": 2, + "name": "OnTime", + "code": 16385, "mfgCode": null, "side": "server", "type": "int16u", "included": 1, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "300", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "RegisteredClients", - "code": 3, - "mfgCode": null, - "side": "server", - "type": "array", - "included": 0, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ICDCounter", - "code": 4, - "mfgCode": null, - "side": "server", - "type": "int32u", - "included": 0, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "0", @@ -5463,77 +8061,29 @@ "reportableChange": 0 }, { - "name": "ClientsSupportedPerFabric", - "code": 5, + "name": "OffWaitTime", + "code": 16386, "mfgCode": null, "side": "server", "type": "int16u", - "included": 0, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "1", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "GeneratedCommandList", - "code": 65528, - "mfgCode": null, - "side": "server", - "type": "array", - "included": 0, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "AcceptedCommandList", - "code": 65529, - "mfgCode": null, - "side": "server", - "type": "array", - "included": 0, - "storageOption": "External", - "singleton": 0, - "bounded": 0, - "defaultValue": "", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "EventList", - "code": 65530, - "mfgCode": null, - "side": "server", - "type": "array", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "StartUpOnOff", + "code": 16387, "mfgCode": null, "side": "server", - "type": "array", - "included": 0, - "storageOption": "External", + "type": "OnOffStartUpOnOff", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5552,7 +8102,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5568,19 +8118,19 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "5", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 } ] }, { - "name": "Occupancy Sensing", - "code": 1030, + "name": "On/off Switch Configuration", + "code": 7, "mfgCode": null, - "define": "OCCUPANCY_SENSING_CLUSTER", + "define": "ON_OFF_SWITCH_CONFIGURATION_CLUSTER", "side": "client", "enabled": 0, "attributes": [ @@ -5594,44 +8144,28 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 } - ] - }, - { - "name": "Occupancy Sensing", - "code": 1030, - "mfgCode": null, - "define": "OCCUPANCY_SENSING_CLUSTER", - "side": "server", - "enabled": 0, - "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": "On/off Switch Configuration", + "code": 7, + "mfgCode": null, + "define": "ON_OFF_SWITCH_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 0, + "attributes": [ { - "name": "OccupancySensorType", - "code": 1, + "name": "switch type", + "code": 0, "mfgCode": null, "side": "server", - "type": "OccupancySensorTypeEnum", + "type": "enum8", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -5643,16 +8177,16 @@ "reportableChange": 0 }, { - "name": "OccupancySensorTypeBitmap", - "code": 2, + "name": "switch actions", + "code": 16, "mfgCode": null, "side": "server", - "type": "OccupancySensorTypeBitmap", + "type": "enum8", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5668,40 +8202,38 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 } ] - } - ] - }, - { - "name": "MA-doorlock", - "deviceTypeName": "MA-doorlock", - "deviceTypeCode": 10, - "deviceTypeProfileId": 259, - "clusters": [ + }, { - "name": "Identify", - "code": 3, + "name": "Descriptor", + "code": 29, "mfgCode": null, - "define": "IDENTIFY_CLUSTER", + "define": "DESCRIPTOR_CLUSTER", "side": "client", "enabled": 0, - "commands": [ + "attributes": [ { - "name": "Identify", - "code": 0, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5712,220 +8244,164 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Identify", - "code": 3, + "name": "Descriptor", + "code": 29, "mfgCode": null, - "define": "IDENTIFY_CLUSTER", + "define": "DESCRIPTOR_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "IdentifyTime", + "name": "DeviceTypeList", "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "IdentifyType", + "name": "ServerList", "code": 1, "mfgCode": null, "side": "server", - "type": "IdentifyTypeEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ClientList", + "code": 2, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "PartsList", + "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Groups", - "code": 4, - "mfgCode": null, - "define": "GROUPS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "AddGroup", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "ViewGroup", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "GetGroupMembership", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveGroup", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 }, { - "name": "RemoveAllGroups", + "name": "TagList", "code": 4, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "AddGroupIfIdentifying", - "code": 5, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Groups", - "code": 4, - "mfgCode": null, - "define": "GROUPS_CLUSTER", - "side": "server", - "enabled": 0, - "commands": [ - { - "name": "AddGroupResponse", - "code": 0, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 }, { - "name": "ViewGroupResponse", - "code": 1, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "GetGroupMembershipResponse", - "code": 2, + "name": "EventList", + "code": 65530, "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "RemoveGroupResponse", - "code": 3, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "NameSupport", - "code": 0, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "NameSupportBitmap", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -5951,82 +8427,24 @@ "side": "server", "type": "int16u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Scenes", - "code": 5, + "name": "Basic Information", + "code": 40, "mfgCode": null, - "define": "SCENES_CLUSTER", + "define": "BASIC_INFORMATION_CLUSTER", "side": "client", "enabled": 0, - "commands": [ - { - "name": "AddScene", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "ViewScene", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveScene", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveAllScenes", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "StoreScene", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RecallScene", - "code": 5, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "GetSceneMembership", - "code": 6, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], "attributes": [ { "name": "ClusterRevision", @@ -6036,9 +8454,9 @@ "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "5", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -6047,136 +8465,86 @@ ] }, { - "name": "Scenes", - "code": 5, + "name": "Basic Information", + "code": 40, "mfgCode": null, - "define": "SCENES_CLUSTER", + "define": "BASIC_INFORMATION_CLUSTER", "side": "server", "enabled": 0, - "commands": [ - { - "name": "AddSceneResponse", - "code": 0, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "ViewSceneResponse", - "code": 1, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveSceneResponse", - "code": 2, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "RemoveAllScenesResponse", - "code": 3, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "StoreSceneResponse", - "code": 4, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "GetSceneMembershipResponse", - "code": 6, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 1 - } - ], "attributes": [ { - "name": "SceneCount", + "name": "DataModelRevision", "code": 0, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, "storageOption": "External", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "10", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentScene", + "name": "VendorName", "code": 1, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentGroup", + "name": "VendorID", "code": 2, "mfgCode": null, "side": "server", - "type": "group_id", + "type": "vendor_id", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "SceneValid", + "name": "ProductName", "code": 3, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "NameSupport", + "name": "ProductID", "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "int16u", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, "defaultValue": "", "reportable": 1, @@ -6185,240 +8553,222 @@ "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "NodeLabel", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "NVM", + "singleton": 1, "bounded": 0, - "defaultValue": "5", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "On/Off", - "code": 6, - "mfgCode": null, - "define": "ON_OFF_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ + }, { - "name": "Off", - "code": 0, + "name": "Location", + "code": 6, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": "XX", + "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": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "On", - "code": 1, + "name": "HardwareVersionString", + "code": 8, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "Toggle", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, + "name": "SoftwareVersion", + "code": 9, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "int32u", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "5", + "defaultValue": "0", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "On/Off", - "code": 6, - "mfgCode": null, - "define": "ON_OFF_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "OnOff", - "code": 0, + "name": "SoftwareVersionString", + "code": 10, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "GlobalSceneControl", - "code": 16384, + "name": "ManufacturingDate", + "code": 11, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "20210614123456ZZ", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OnTime", - "code": 16385, + "name": "PartNumber", + "code": 12, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OffWaitTime", - "code": 16386, + "name": "ProductURL", + "code": 13, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "long_char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "StartUpOnOff", - "code": 16387, + "name": "ProductLabel", + "code": 14, "mfgCode": null, "side": "server", - "type": "OnOffStartUpOnOff", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "SerialNumber", + "code": 15, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "LocalConfigDisabled", + "code": 16, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "boolean", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "NVM", + "singleton": 1, "bounded": 0, - "defaultValue": "5", + "defaultValue": "0", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "On/off Switch Configuration", - "code": 7, - "mfgCode": null, - "define": "ON_OFF_SWITCH_CONFIGURATION_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "Reachable", + "code": 17, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "boolean", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "On/off Switch Configuration", - "code": 7, - "mfgCode": null, - "define": "ON_OFF_SWITCH_CONFIGURATION_CLUSTER", - "side": "server", - "enabled": 0, - "attributes": [ + }, { - "name": "switch type", - "code": 0, + "name": "UniqueID", + "code": 18, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "char_string", "included": 1, - "storageOption": "RAM", - "singleton": 0, + "storageOption": "External", + "singleton": 1, "bounded": 0, "defaultValue": "", "reportable": 1, @@ -6427,19 +8777,19 @@ "reportableChange": 0 }, { - "name": "switch actions", - "code": 16, + "name": "CapabilityMinima", + "code": 19, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "CapabilityMinimaStruct", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -6450,7 +8800,7 @@ "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, "defaultValue": "1", "reportable": 1, @@ -6461,13 +8811,29 @@ ] }, { - "name": "Descriptor", - "code": 29, + "name": "Power Source", + "code": 47, "mfgCode": null, - "define": "DESCRIPTOR_CLUSTER", + "define": "POWER_SOURCE_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -6487,69 +8853,69 @@ ] }, { - "name": "Descriptor", - "code": 29, + "name": "Power Source", + "code": 47, "mfgCode": null, - "define": "DESCRIPTOR_CLUSTER", + "define": "POWER_SOURCE_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "DeviceTypeList", + "name": "Status", "code": 0, "mfgCode": null, "side": "server", - "type": "array", + "type": "PowerSourceStatusEnum", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ServerList", + "name": "Order", "code": 1, "mfgCode": null, "side": "server", - "type": "array", + "type": "int8u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClientList", + "name": "Description", "code": 2, "mfgCode": null, "side": "server", - "type": "array", + "type": "char_string", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "Battery", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PartsList", + "name": "WiredAssessedInputVoltage", "code": 3, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "int32u", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -6559,385 +8925,349 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "WiredAssessedInputFrequency", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "int16u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "WiredCurrentType", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, - "storageOption": "External", + "type": "WiredCurrentTypeEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Basic Information", - "code": 40, - "mfgCode": null, - "define": "BASIC_INFORMATION_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 1, - "bounded": 0, - "defaultValue": "1", - "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 - } - ] - }, - { - "name": "Basic Information", - "code": 40, - "mfgCode": null, - "define": "BASIC_INFORMATION_CLUSTER", - "side": "server", - "enabled": 0, - "attributes": [ + }, { - "name": "DataModelRevision", - "code": 0, + "name": "WiredAssessedCurrent", + "code": 6, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "VendorName", - "code": 1, + "name": "WiredNominalVoltage", + "code": 7, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "VendorID", - "code": 2, + "name": "WiredMaximumCurrent", + "code": 8, "mfgCode": null, "side": "server", - "type": "vendor_id", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductName", - "code": 3, + "name": "WiredPresent", + "code": 9, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductID", - "code": 4, + "name": "ActiveWiredFaults", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NodeLabel", - "code": 5, + "name": "BatVoltage", + "code": 11, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "NVM", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Location", - "code": 6, + "name": "BatPercentRemaining", + "code": 12, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "XX", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "HardwareVersion", - "code": 7, + "name": "BatTimeRemaining", + "code": 13, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "HardwareVersionString", - "code": 8, + "name": "BatChargeLevel", + "code": 14, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "BatChargeLevelEnum", "included": 1, - "storageOption": "External", - "singleton": 1, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SoftwareVersion", - "code": 9, + "name": "BatReplacementNeeded", + "code": 15, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "boolean", "included": 1, - "storageOption": "External", - "singleton": 1, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SoftwareVersionString", - "code": 10, + "name": "BatReplaceability", + "code": 16, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "BatReplaceabilityEnum", "included": 1, - "storageOption": "External", - "singleton": 1, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ManufacturingDate", - "code": 11, + "name": "BatPresent", + "code": 17, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "20210614123456ZZ", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PartNumber", - "code": 12, + "name": "ActiveBatFaults", + "code": 18, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductURL", - "code": 13, + "name": "BatReplacementDescription", + "code": 19, "mfgCode": null, "side": "server", - "type": "long_char_string", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 1, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductLabel", - "code": 14, + "name": "BatCommonDesignation", + "code": 20, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "BatCommonDesignationEnum", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SerialNumber", - "code": 15, + "name": "BatANSIDesignation", + "code": 21, "mfgCode": null, "side": "server", "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LocalConfigDisabled", - "code": 16, + "name": "BatIECDesignation", + "code": 22, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 1, - "storageOption": "NVM", - "singleton": 1, + "type": "char_string", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Reachable", - "code": 17, + "name": "BatApprovedChemistry", + "code": 23, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 1, + "type": "BatApprovedChemistryEnum", + "included": 0, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "UniqueID", - "code": 18, + "name": "BatCapacity", + "code": 24, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, - "storageOption": "External", - "singleton": 1, + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CapabilityMinima", - "code": 19, + "name": "BatQuantity", + "code": 25, "mfgCode": null, "side": "server", - "type": "CapabilityMinimaStruct", - "included": 1, - "storageOption": "External", + "type": "int8u", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -6947,93 +9277,75 @@ "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatChargeState", + "code": 26, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "BatChargeStateEnum", + "included": 0, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Power Source", - "code": 47, - "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Power Source", - "code": 47, - "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "Status", - "code": 0, + "name": "BatTimeToFullCharge", + "code": 27, "mfgCode": null, "side": "server", - "type": "PowerSourceStatusEnum", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Order", - "code": 1, + "name": "BatFunctionalWhileCharging", + "code": 28, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "boolean", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Description", - "code": 2, + "name": "BatChargingCurrent", + "code": 29, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "Battery", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredAssessedCurrent", - "code": 6, + "name": "ActiveBatChargeFaults", + "code": 30, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 0, "storageOption": "RAM", "singleton": 0, @@ -7045,13 +9357,13 @@ "reportableChange": 0 }, { - "name": "BatChargeLevel", - "code": 14, + "name": "EndpointList", + "code": 31, "mfgCode": null, "side": "server", - "type": "BatChargeLevelEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -7061,11 +9373,11 @@ "reportableChange": 0 }, { - "name": "BatReplacementNeeded", - "code": 15, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -7077,11 +9389,11 @@ "reportableChange": 0 }, { - "name": "BatReplaceability", - "code": 16, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "BatReplaceabilityEnum", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -7093,11 +9405,11 @@ "reportableChange": 0 }, { - "name": "BatReplacementDescription", - "code": 19, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -7109,13 +9421,13 @@ "reportableChange": 0 }, { - "name": "EndpointList", - "code": 31, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -7320,6 +9632,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -7978,7 +10306,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7994,7 +10322,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -8004,13 +10332,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -8200,18 +10544,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-doorlock", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 10 + "networkId": 0 } ], "log": [] diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter index 79c2b7e6929920..ab94389c823e9a 100644 --- a/examples/lock-app/nxp/zap/lock-app.matter +++ b/examples/lock-app/nxp/zap/lock-app.matter @@ -81,6 +81,10 @@ server cluster Identify = 3 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter index 451f4ff3b11be0..66432c88ff824a 100644 --- a/examples/lock-app/qpg/zap/lock.matter +++ b/examples/lock-app/qpg/zap/lock.matter @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/lock-app/silabs/include/LockManager.h b/examples/lock-app/silabs/include/LockManager.h index 901dfdbd06cb04..9adcc863f0aec7 100644 --- a/examples/lock-app/silabs/include/LockManager.h +++ b/examples/lock-app/silabs/include/LockManager.h @@ -143,9 +143,12 @@ class LockManager typedef void (*Callback_fn_completed)(Action_t); void SetCallbacks(Callback_fn_initiated aActionInitiated_CB, Callback_fn_completed aActionCompleted_CB); - bool Lock(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err); - bool Unlock(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err); - bool Unbolt(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err); + bool Lock(chip::EndpointId endpointId, const Nullable & fabricIdx, const Nullable & nodeId, + const Optional & pin, OperationErrorEnum & err); + bool Unlock(chip::EndpointId endpointId, const Nullable & fabricIdx, const Nullable & nodeId, + const Optional & pin, OperationErrorEnum & err); + bool Unbolt(chip::EndpointId endpointId, const Nullable & fabricIdx, const Nullable & nodeId, + const Optional & pin, OperationErrorEnum & err); bool GetUser(chip::EndpointId endpointId, uint16_t userIndex, EmberAfPluginDoorLockUserInfo & user); bool SetUser(chip::EndpointId endpointId, uint16_t userIndex, chip::FabricIndex creator, chip::FabricIndex modifier, @@ -183,7 +186,8 @@ class LockManager bool IsValidYeardayScheduleIndex(uint8_t scheduleIndex); bool IsValidHolidayScheduleIndex(uint8_t scheduleIndex); - bool setLockState(chip::EndpointId endpointId, DlLockState lockState, const Optional & pin, + bool setLockState(chip::EndpointId endpointId, const Nullable & fabricIdx, + const Nullable & nodeId, DlLockState lockState, const Optional & pin, OperationErrorEnum & err); const char * lockStateToString(DlLockState lockState) const; diff --git a/examples/lock-app/silabs/src/AppTask.cpp b/examples/lock-app/silabs/src/AppTask.cpp index 8afe7d6cc8d9e5..7d86fec80a07d9 100644 --- a/examples/lock-app/silabs/src/AppTask.cpp +++ b/examples/lock-app/silabs/src/AppTask.cpp @@ -352,11 +352,9 @@ void AppTask::UpdateClusterState(intptr_t context) bool unlocked = LockMgr().NextState(); DlLockState newState = unlocked ? DlLockState::kUnlocked : DlLockState::kLocked; - OperationSourceEnum source = OperationSourceEnum::kUnspecified; - // write the new lock value EmberAfStatus status = - DoorLockServer::Instance().SetLockState(1, newState, source) ? EMBER_ZCL_STATUS_SUCCESS : EMBER_ZCL_STATUS_FAILURE; + DoorLockServer::Instance().SetLockState(1, newState) ? EMBER_ZCL_STATUS_SUCCESS : EMBER_ZCL_STATUS_FAILURE; if (status != EMBER_ZCL_STATUS_SUCCESS) { diff --git a/examples/lock-app/silabs/src/LockManager.cpp b/examples/lock-app/silabs/src/LockManager.cpp index f3c6dfe748ca35..8190dbddd6141e 100644 --- a/examples/lock-app/silabs/src/LockManager.cpp +++ b/examples/lock-app/silabs/src/LockManager.cpp @@ -288,19 +288,22 @@ void LockManager::ActuatorMovementTimerEventHandler(AppEvent * aEvent) } } -bool LockManager::Lock(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err) +bool LockManager::Lock(chip::EndpointId endpointId, const Nullable & fabricIdx, + const Nullable & nodeId, const Optional & pin, OperationErrorEnum & err) { - return setLockState(endpointId, DlLockState::kLocked, pin, err); + return setLockState(endpointId, fabricIdx, nodeId, DlLockState::kLocked, pin, err); } -bool LockManager::Unlock(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err) +bool LockManager::Unlock(chip::EndpointId endpointId, const Nullable & fabricIdx, + const Nullable & nodeId, const Optional & pin, OperationErrorEnum & err) { - return setLockState(endpointId, DlLockState::kUnlocked, pin, err); + return setLockState(endpointId, fabricIdx, nodeId, DlLockState::kUnlocked, pin, err); } -bool LockManager::Unbolt(chip::EndpointId endpointId, const Optional & pin, OperationErrorEnum & err) +bool LockManager::Unbolt(chip::EndpointId endpointId, const Nullable & fabricIdx, + const Nullable & nodeId, const Optional & pin, OperationErrorEnum & err) { - return setLockState(endpointId, DlLockState::kUnlocked, pin, err); + return setLockState(endpointId, fabricIdx, nodeId, DlLockState::kUnlocked, pin, err); } bool LockManager::GetUser(chip::EndpointId endpointId, uint16_t userIndex, EmberAfPluginDoorLockUserInfo & user) @@ -664,7 +667,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const return "Unknown"; } -bool LockManager::setLockState(chip::EndpointId endpointId, DlLockState lockState, const Optional & pin, +bool LockManager::setLockState(chip::EndpointId endpointId, const Nullable & fabricIdx, + const Nullable & nodeId, DlLockState lockState, const Optional & pin, OperationErrorEnum & err) { @@ -683,7 +687,8 @@ bool LockManager::setLockState(chip::EndpointId endpointId, DlLockState lockStat ChipLogDetail(Zcl, "Door Lock App: setting door lock state to \"%s\" [endpointId=%d]", lockStateToString(lockState), endpointId); - DoorLockServer::Instance().SetLockState(endpointId, lockState); + DoorLockServer::Instance().SetLockState(endpointId, lockState, OperationSourceEnum::kRemote, NullNullable, NullNullable, + fabricIdx, nodeId); return true; } @@ -708,7 +713,8 @@ bool LockManager::setLockState(chip::EndpointId endpointId, DlLockState lockStat "Lock App: specified PIN code was found in the database, setting lock state to \"%s\" [endpointId=%d]", lockStateToString(lockState), endpointId); - DoorLockServer::Instance().SetLockState(endpointId, lockState); + DoorLockServer::Instance().SetLockState(endpointId, lockState, OperationSourceEnum::kRemote, NullNullable, NullNullable, + fabricIdx, nodeId); return true; } diff --git a/examples/lock-app/silabs/src/ZclCallbacks.cpp b/examples/lock-app/silabs/src/ZclCallbacks.cpp index dc5d60915218ae..1c0c1efab19dde 100644 --- a/examples/lock-app/silabs/src/ZclCallbacks.cpp +++ b/examples/lock-app/silabs/src/ZclCallbacks.cpp @@ -31,6 +31,10 @@ #include #include +#ifdef DIC_ENABLE +#include "dic.h" +#endif // DIC_ENABLE + using namespace ::chip::app::Clusters; using namespace ::chip::DeviceLayer::Internal; using ::chip::app::DataModel::Nullable; @@ -47,6 +51,9 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & DoorLock::DlLockState lockState = *(reinterpret_cast(value)); ChipLogProgress(Zcl, "Door lock cluster: " ChipLogFormatMEI " state %d", ChipLogValueMEI(clusterId), to_underlying(lockState)); +#ifdef DIC_ENABLE + dic_sendmsg("lock/state", (const char *) (lockState == DoorLock::DlLockState::kLocked ? "lock" : "unlock")); +#endif // DIC_ENABLE } } @@ -66,7 +73,7 @@ bool emberAfPluginDoorLockOnDoorLockCommand(chip::EndpointId endpointId, const N OperationErrorEnum & err) { ChipLogProgress(Zcl, "Door Lock App: Lock Command endpoint=%d", endpointId); - bool status = LockMgr().Lock(endpointId, pinCode, err); + bool status = LockMgr().Lock(endpointId, fabricIdx, nodeId, pinCode, err); if (status == true) { LockMgr().InitiateAction(AppEvent::kEventType_Lock, LockManager::LOCK_ACTION); @@ -79,7 +86,7 @@ bool emberAfPluginDoorLockOnDoorUnlockCommand(chip::EndpointId endpointId, const OperationErrorEnum & err) { ChipLogProgress(Zcl, "Door Lock App: Unlock Command endpoint=%d", endpointId); - bool status = LockMgr().Unlock(endpointId, pinCode, err); + bool status = LockMgr().Unlock(endpointId, fabricIdx, nodeId, pinCode, err); if (status == true) { LockMgr().InitiateAction(AppEvent::kEventType_Lock, LockManager::UNLOCK_ACTION); @@ -93,7 +100,7 @@ bool emberAfPluginDoorLockOnDoorUnboltCommand(chip::EndpointId endpointId, const OperationErrorEnum & err) { ChipLogProgress(Zcl, "Door Lock App: Unbolt Command endpoint=%d", endpointId); - bool status = LockMgr().Unlock(endpointId, pinCode, err); + bool status = LockMgr().Unlock(endpointId, fabricIdx, nodeId, pinCode, err); if (status == true) { LockMgr().InitiateAction(AppEvent::kEventType_Lock, LockManager::UNLOCK_ACTION); 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 57350d99fe60e5..737506fc7254cf 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 @@ -35,6 +35,10 @@ struct OperationalStateStruct { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 d5a48bc61e79dd..50618909a052bb 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 @@ -213,6 +213,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter index 4e52f3dc9ccb1b..669139b21d6f08 100644 --- a/examples/placeholder/linux/apps/app1/config.matter +++ b/examples/placeholder/linux/apps/app1/config.matter @@ -200,6 +200,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -678,6 +681,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -763,6 +770,7 @@ server cluster AccessControl = 31 { } attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0; + attribute access(read: administer, write: administer) AccessControlExtensionStruct extension[] = 1; readonly attribute int16u subjectsPerAccessControlEntry = 2; readonly attribute int16u targetsPerAccessControlEntry = 3; readonly attribute int16u accessControlEntriesPerFabric = 4; @@ -2557,6 +2565,7 @@ server cluster OperationalCredentials = 62 { 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; @@ -2637,6 +2646,78 @@ server cluster OperationalCredentials = 62 { command access(invoke: administer) AddTrustedRootCertificate(AddTrustedRootCertificateRequest): DefaultSuccess = 11; } +/** The Group Key Management Cluster is the mechanism by which group keys are managed. */ +server cluster GroupKeyManagement = 63 { + 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; + } + + request struct KeySetRemoveRequest { + INT16U groupKeySetID = 0; + } + + response struct KeySetReadResponse = 2 { + GroupKeySetStruct groupKeySet = 0; + } + + response struct KeySetReadAllIndicesResponse = 5 { + INT16U groupKeySetIDs[] = 0; + } + + fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0; + fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1; + fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3; + fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4; +} + /** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only labels. */ client cluster FixedLabel = 64 { @@ -6439,6 +6520,7 @@ server cluster AccountLogin = 1294 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster GeneralCommissioning; binding cluster ThreadNetworkDiagnostics; @@ -6467,6 +6549,10 @@ endpoint 0 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -6474,11 +6560,13 @@ endpoint 0 { server cluster AccessControl { emits event AccessControlEntryChanged; callback attribute acl; + callback attribute extension; callback attribute subjectsPerAccessControlEntry; callback attribute targetsPerAccessControlEntry; callback attribute accessControlEntriesPerFabric; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6515,6 +6603,21 @@ endpoint 0 { persist attribute localConfigDisabled default = 0; callback attribute uniqueID; callback attribute capabilityMinima; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + 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; } @@ -6523,6 +6626,19 @@ endpoint 0 { callback attribute hourFormat; callback attribute activeCalendarType; callback attribute supportedCalendarTypes; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster UnitLocalization { + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6560,6 +6676,10 @@ endpoint 0 { ram attribute batChargingCurrent; callback attribute activeBatChargeFaults; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -6572,6 +6692,7 @@ endpoint 0 { callback attribute supportsConcurrentConnection default = 1; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6586,6 +6707,10 @@ endpoint 0 { ram attribute lastNetworkingStatus; ram attribute lastNetworkID; ram attribute lastConnectErrorValue; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; } @@ -6601,6 +6726,10 @@ endpoint 0 { callback attribute activeRadioFaults; callback attribute activeNetworkFaults; callback attribute testEventTriggersEnabled default = false; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6755,16 +6884,38 @@ endpoint 0 { callback attribute windowStatus default = 0; callback attribute adminFabricIndex default = 1; callback attribute adminVendorId default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } server cluster OperationalCredentials { + callback attribute NOCs; callback attribute fabrics; callback attribute supportedFabrics; callback attribute commissionedFabrics; callback attribute trustedRootCertificates; callback attribute currentFabricIndex; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster GroupKeyManagement { + callback attribute groupKeyMap; + callback attribute groupTable; + callback attribute maxGroupsPerFabric; + callback attribute maxGroupKeysPerFabric; + 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/placeholder/linux/apps/app1/config.zap b/examples/placeholder/linux/apps/app1/config.zap index a13f3c1ac90309..a32f70889c4c58 100644 --- a/examples/placeholder/linux/apps/app1/config.zap +++ b/examples/placeholder/linux/apps/app1/config.zap @@ -33,9 +33,45 @@ ], "endpointTypes": [ { + "id": 28, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 3, + 2 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -46,6 +82,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -136,6 +188,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -242,7 +374,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -338,7 +470,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -586,6 +718,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -932,6 +1080,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "ProductAppearance", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "ProductAppearanceStruct", + "included": 0, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -990,13 +1218,29 @@ ] }, { - "name": "Time Format Localization", - "code": 44, + "name": "Localization Configuration", + "code": 43, "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1009,126 +1253,108 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Time Format Localization", - "code": 44, + "name": "Localization Configuration", + "code": 43, "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "HourFormat", + "name": "ActiveLocale", "code": 0, "mfgCode": null, "side": "server", - "type": "HourFormatEnum", + "type": "char_string", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveCalendarType", + "name": "SupportedLocales", "code": 1, "mfgCode": null, "side": "server", - "type": "CalendarTypeEnum", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SupportedCalendarTypes", - "code": 2, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Power Source Configuration", - "code": 46, - "mfgCode": null, - "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", - "side": "client", - "enabled": 0 - }, - { - "name": "Power Source Configuration", - "code": 46, - "mfgCode": null, - "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", - "side": "server", - "enabled": 0, - "attributes": [ + }, { - "name": "Sources", - "code": 0, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1172,13 +1398,29 @@ ] }, { - "name": "Power Source", - "code": 47, + "name": "Time Format Localization", + "code": 44, "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1198,21 +1440,21 @@ ] }, { - "name": "Power Source", - "code": 47, + "name": "Time Format Localization", + "code": 44, "mfgCode": null, - "define": "POWER_SOURCE_CLUSTER", + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "Status", + "name": "HourFormat", "code": 0, "mfgCode": null, "side": "server", - "type": "PowerSourceStatusEnum", + "type": "HourFormatEnum", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1222,13 +1464,13 @@ "reportableChange": 0 }, { - "name": "Order", + "name": "ActiveCalendarType", "code": 1, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "CalendarTypeEnum", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1238,13 +1480,13 @@ "reportableChange": 0 }, { - "name": "Description", + "name": "SupportedCalendarTypes", "code": 2, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1254,248 +1496,286 @@ "reportableChange": 0 }, { - "name": "WiredAssessedInputVoltage", - "code": 3, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredAssessedInputFrequency", - "code": 4, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredCurrentType", - "code": 5, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "WiredCurrentTypeEnum", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredAssessedCurrent", - "code": 6, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredNominalVoltage", - "code": 7, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiredMaximumCurrent", - "code": 8, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Unit Localization", + "code": 45, + "mfgCode": null, + "define": "UNIT_LOCALIZATION_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "WiredPresent", - "code": 9, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "boolean", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveWiredFaults", - "code": 10, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "array", + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Unit Localization", + "code": 45, + "mfgCode": null, + "define": "UNIT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "BatVoltage", - "code": 11, + "name": "TemperatureUnit", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", - "included": 1, + "type": "TempUnitEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatPercentRemaining", - "code": 12, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatTimeRemaining", - "code": 13, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatChargeLevel", - "code": 14, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "BatChargeLevelEnum", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatReplacementNeeded", - "code": 15, - "mfgCode": null, + "name": "AttributeList", + "code": 65531, + "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatReplaceability", - "code": 16, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "BatReplaceabilityEnum", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatPresent", - "code": 17, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Power Source Configuration", + "code": 46, + "mfgCode": null, + "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", + "side": "client", + "enabled": 0 + }, + { + "name": "Power Source Configuration", + "code": 46, + "mfgCode": null, + "define": "POWER_SOURCE_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 0, + "attributes": [ { - "name": "ActiveBatFaults", - "code": 18, + "name": "Sources", + "code": 0, "mfgCode": null, "side": "server", "type": "array", @@ -1505,48 +1785,100 @@ "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatReplacementDescription", - "code": 19, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatCommonDesignation", - "code": 20, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "BatCommonDesignationEnum", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Power Source", + "code": 47, + "mfgCode": null, + "define": "POWER_SOURCE_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Power Source", + "code": 47, + "mfgCode": null, + "define": "POWER_SOURCE_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "BatANSIDesignation", - "code": 21, + "name": "Status", + "code": 0, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "PowerSourceStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1558,11 +1890,11 @@ "reportableChange": 0 }, { - "name": "BatIECDesignation", - "code": 22, + "name": "Order", + "code": 1, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int8u", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1574,11 +1906,11 @@ "reportableChange": 0 }, { - "name": "BatApprovedChemistry", - "code": 23, + "name": "Description", + "code": 2, "mfgCode": null, "side": "server", - "type": "BatApprovedChemistryEnum", + "type": "char_string", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1590,8 +1922,8 @@ "reportableChange": 0 }, { - "name": "BatCapacity", - "code": 24, + "name": "WiredAssessedInputVoltage", + "code": 3, "mfgCode": null, "side": "server", "type": "int32u", @@ -1606,11 +1938,11 @@ "reportableChange": 0 }, { - "name": "BatQuantity", - "code": 25, + "name": "WiredAssessedInputFrequency", + "code": 4, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1622,11 +1954,11 @@ "reportableChange": 0 }, { - "name": "BatChargeState", - "code": 26, + "name": "WiredCurrentType", + "code": 5, "mfgCode": null, "side": "server", - "type": "BatChargeStateEnum", + "type": "WiredCurrentTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1638,8 +1970,8 @@ "reportableChange": 0 }, { - "name": "BatTimeToFullCharge", - "code": 27, + "name": "WiredAssessedCurrent", + "code": 6, "mfgCode": null, "side": "server", "type": "int32u", @@ -1654,11 +1986,11 @@ "reportableChange": 0 }, { - "name": "BatFunctionalWhileCharging", - "code": 28, + "name": "WiredNominalVoltage", + "code": 7, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "int32u", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -1670,8 +2002,8 @@ "reportableChange": 0 }, { - "name": "BatChargingCurrent", - "code": 29, + "name": "WiredMaximumCurrent", + "code": 8, "mfgCode": null, "side": "server", "type": "int32u", @@ -1686,13 +2018,13 @@ "reportableChange": 0 }, { - "name": "ActiveBatChargeFaults", - "code": 30, + "name": "WiredPresent", + "code": 9, "mfgCode": null, "side": "server", - "type": "array", + "type": "boolean", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -1702,8 +2034,8 @@ "reportableChange": 0 }, { - "name": "EndpointList", - "code": 31, + "name": "ActiveWiredFaults", + "code": 10, "mfgCode": null, "side": "server", "type": "array", @@ -1713,70 +2045,470 @@ "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "BatVoltage", + "code": 11, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int32u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatPercentRemaining", + "code": 12, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int8u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "General Commissioning", - "code": 48, - "mfgCode": null, - "define": "GENERAL_COMMISSIONING_CLUSTER", - "side": "client", - "enabled": 1, - "commands": [ - { - "name": "ArmFailSafe", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 }, { - "name": "SetRegulatoryConfig", - "code": 2, + "name": "BatTimeRemaining", + "code": 13, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 }, { - "name": "CommissioningComplete", + "name": "BatChargeLevel", + "code": 14, + "mfgCode": null, + "side": "server", + "type": "BatChargeLevelEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatReplacementNeeded", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatReplaceability", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "BatReplaceabilityEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatPresent", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ActiveBatFaults", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatReplacementDescription", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatCommonDesignation", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "BatCommonDesignationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatANSIDesignation", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatIECDesignation", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatApprovedChemistry", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "BatApprovedChemistryEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatCapacity", + "code": 24, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatQuantity", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatChargeState", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "BatChargeStateEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatTimeToFullCharge", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatFunctionalWhileCharging", + "code": 28, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatChargingCurrent", + "code": 29, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ActiveBatChargeFaults", + "code": 30, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "EndpointList", + "code": 31, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "General Commissioning", + "code": 48, + "mfgCode": null, + "define": "GENERAL_COMMISSIONING_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ + { + "name": "ArmFailSafe", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "SetRegulatoryConfig", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CommissioningComplete", "code": 4, "mfgCode": null, "source": "client", @@ -1785,6 +2517,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1949,6 +2697,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2057,6 +2821,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2237,13 +3017,61 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2294,7 +3122,33 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2434,7 +3288,71 @@ "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "", + "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": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2444,13 +3362,13 @@ "reportableChange": 0 }, { - "name": "ActiveNetworkFaults", - "code": 7, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2460,16 +3378,16 @@ "reportableChange": 0 }, { - "name": "TestEventTriggersEnabled", - "code": 8, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "false", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3185,8 +4103,248 @@ "reportableChange": 0 }, { - "name": "TxBeaconCount", - "code": 30, + "name": "TxBeaconCount", + "code": 30, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxBeaconRequestCount", + "code": 31, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxOtherCount", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxRetryCount", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxDirectMaxRetryExpiryCount", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxIndirectMaxRetryExpiryCount", + "code": 35, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxErrCcaCount", + "code": 36, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxErrAbortCount", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TxErrBusyChannelCount", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxTotalCount", + "code": 39, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxUnicastCount", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxBroadcastCount", + "code": 41, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxDataCount", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxDataPollCount", + "code": 43, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxBeaconCount", + "code": 44, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RxBeaconRequestCount", + "code": 45, "mfgCode": null, "side": "server", "type": "int32u", @@ -3201,8 +4359,8 @@ "reportableChange": 0 }, { - "name": "TxBeaconRequestCount", - "code": 31, + "name": "RxOtherCount", + "code": 46, "mfgCode": null, "side": "server", "type": "int32u", @@ -3217,8 +4375,8 @@ "reportableChange": 0 }, { - "name": "TxOtherCount", - "code": 32, + "name": "RxAddressFilteredCount", + "code": 47, "mfgCode": null, "side": "server", "type": "int32u", @@ -3233,8 +4391,8 @@ "reportableChange": 0 }, { - "name": "TxRetryCount", - "code": 33, + "name": "RxDestAddrFilteredCount", + "code": 48, "mfgCode": null, "side": "server", "type": "int32u", @@ -3249,8 +4407,8 @@ "reportableChange": 0 }, { - "name": "TxDirectMaxRetryExpiryCount", - "code": 34, + "name": "RxDuplicatedCount", + "code": 49, "mfgCode": null, "side": "server", "type": "int32u", @@ -3265,8 +4423,8 @@ "reportableChange": 0 }, { - "name": "TxIndirectMaxRetryExpiryCount", - "code": 35, + "name": "RxErrNoFrameCount", + "code": 50, "mfgCode": null, "side": "server", "type": "int32u", @@ -3281,8 +4439,8 @@ "reportableChange": 0 }, { - "name": "TxErrCcaCount", - "code": 36, + "name": "RxErrUnknownNeighborCount", + "code": 51, "mfgCode": null, "side": "server", "type": "int32u", @@ -3297,8 +4455,8 @@ "reportableChange": 0 }, { - "name": "TxErrAbortCount", - "code": 37, + "name": "RxErrInvalidSrcAddrCount", + "code": 52, "mfgCode": null, "side": "server", "type": "int32u", @@ -3313,8 +4471,8 @@ "reportableChange": 0 }, { - "name": "TxErrBusyChannelCount", - "code": 38, + "name": "RxErrSecCount", + "code": 53, "mfgCode": null, "side": "server", "type": "int32u", @@ -3329,8 +4487,8 @@ "reportableChange": 0 }, { - "name": "RxTotalCount", - "code": 39, + "name": "RxErrFcsCount", + "code": 54, "mfgCode": null, "side": "server", "type": "int32u", @@ -3345,8 +4503,8 @@ "reportableChange": 0 }, { - "name": "RxUnicastCount", - "code": 40, + "name": "RxErrOtherCount", + "code": 55, "mfgCode": null, "side": "server", "type": "int32u", @@ -3361,11 +4519,11 @@ "reportableChange": 0 }, { - "name": "RxBroadcastCount", - "code": 41, + "name": "ActiveTimestamp", + "code": 56, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, @@ -3377,11 +4535,11 @@ "reportableChange": 0 }, { - "name": "RxDataCount", - "code": 42, + "name": "PendingTimestamp", + "code": 57, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, @@ -3393,8 +4551,8 @@ "reportableChange": 0 }, { - "name": "RxDataPollCount", - "code": 43, + "name": "Delay", + "code": 58, "mfgCode": null, "side": "server", "type": "int32u", @@ -3409,168 +4567,214 @@ "reportableChange": 0 }, { - "name": "RxBeaconCount", - "code": 44, + "name": "SecurityPolicy", + "code": 59, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "SecurityPolicy", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxBeaconRequestCount", - "code": 45, + "name": "ChannelPage0Mask", + "code": 60, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "octet_string", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxOtherCount", - "code": 46, + "name": "OperationalDatasetComponents", + "code": 61, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "OperationalDatasetComponents", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxAddressFilteredCount", - "code": 47, + "name": "ActiveNetworkFaultsList", + "code": 62, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxDestAddrFilteredCount", - "code": 48, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "WiFi Network Diagnostics", + "code": 54, + "mfgCode": null, + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "ResetCounts", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "WiFi Network Diagnostics", + "code": 54, + "mfgCode": null, + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "RxDuplicatedCount", - "code": 49, + "name": "BSSID", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "octet_string", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrNoFrameCount", - "code": 50, + "name": "SecurityType", + "code": 1, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "SecurityTypeEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrUnknownNeighborCount", - "code": 51, + "name": "WiFiVersion", + "code": 2, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "WiFiVersionEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrInvalidSrcAddrCount", - "code": 52, + "name": "ChannelNumber", + "code": 3, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int16u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrSecCount", - "code": 53, + "name": "RSSI", + "code": 4, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int8s", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrFcsCount", - "code": 54, + "name": "BeaconLostCount", + "code": 5, "mfgCode": null, "side": "server", "type": "int32u", @@ -3578,15 +4782,15 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RxErrOtherCount", - "code": 55, + "name": "BeaconRxCount", + "code": 6, "mfgCode": null, "side": "server", "type": "int32u", @@ -3594,47 +4798,47 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ActiveTimestamp", - "code": 56, + "name": "PacketMulticastRxCount", + "code": 7, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PendingTimestamp", - "code": 57, + "name": "PacketMulticastTxCount", + "code": 8, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "Delay", - "code": 58, + "name": "PacketUnicastRxCount", + "code": 9, "mfgCode": null, "side": "server", "type": "int32u", @@ -3642,74 +4846,74 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "SecurityPolicy", - "code": 59, + "name": "PacketUnicastTxCount", + "code": 10, "mfgCode": null, "side": "server", - "type": "SecurityPolicy", + "type": "int32u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ChannelPage0Mask", - "code": 60, + "name": "CurrentMaxRate", + "code": 11, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OperationalDatasetComponents", - "code": 61, + "name": "OverrunCount", + "code": 12, "mfgCode": null, "side": "server", - "type": "OperationalDatasetComponents", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveNetworkFaultsList", - "code": 62, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "array", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -3724,17 +4928,40 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 } + ], + "events": [ + { + "name": "Disconnection", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "AssociationFailure", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "ConnectionStatus", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } ] }, { - "name": "WiFi Network Diagnostics", - "code": 54, + "name": "Ethernet Network Diagnostics", + "code": 55, "mfgCode": null, - "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, "commands": [ @@ -3744,7 +4971,7 @@ "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 0 + "outgoing": 1 } ], "attributes": [ @@ -3767,464 +4994,479 @@ ] }, { - "name": "WiFi Network Diagnostics", - "code": 54, + "name": "Ethernet Network Diagnostics", + "code": 55, "mfgCode": null, - "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "BSSID", + "name": "PHYRate", "code": 0, "mfgCode": null, "side": "server", - "type": "octet_string", + "type": "PHYRateEnum", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SecurityType", + "name": "FullDuplex", "code": 1, "mfgCode": null, "side": "server", - "type": "SecurityTypeEnum", + "type": "boolean", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x00", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WiFiVersion", + "name": "PacketRxCount", "code": 2, "mfgCode": null, "side": "server", - "type": "WiFiVersionEnum", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ChannelNumber", + "name": "PacketTxCount", "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "RSSI", + "name": "TxErrCount", "code": 4, "mfgCode": null, "side": "server", - "type": "int8s", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "BeaconLostCount", + "name": "CollisionCount", "code": 5, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "BeaconRxCount", + "name": "OverrunCount", "code": 6, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000000000000000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketMulticastRxCount", + "name": "CarrierDetect", "code": 7, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "boolean", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x00", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PacketMulticastTxCount", + "name": "TimeSinceReset", "code": 8, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "int64u", "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "0x0000000000000000", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PacketUnicastRxCount", - "code": 9, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Bridged Device Basic Information", + "code": 57, + "mfgCode": null, + "define": "BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Bridged Device Basic Information", + "code": 57, + "mfgCode": null, + "define": "BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "VendorName", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketUnicastTxCount", - "code": 10, + "name": "VendorID", + "code": 2, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "vendor_id", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentMaxRate", - "code": 11, + "name": "ProductName", + "code": 3, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OverrunCount", - "code": 12, + "name": "NodeLabel", + "code": 5, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "NVM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "HardwareVersion", + "code": 7, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "3", + "defaultValue": "0", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, - { - "name": "ClusterRevision", - "code": 65533, + { + "name": "HardwareVersionString", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "char_string", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ], - "events": [ - { - "name": "Disconnection", - "code": 0, - "mfgCode": null, - "side": "server", - "included": 1 - }, - { - "name": "AssociationFailure", - "code": 1, - "mfgCode": null, - "side": "server", - "included": 1 }, { - "name": "ConnectionStatus", - "code": 2, + "name": "SoftwareVersion", + "code": 9, "mfgCode": null, "side": "server", - "included": 1 - } - ] - }, - { - "name": "Ethernet Network Diagnostics", - "code": 55, - "mfgCode": null, - "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "ResetCounts", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", + "type": "int32u", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - } - ] - }, - { - "name": "Ethernet Network Diagnostics", - "code": 55, - "mfgCode": null, - "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "PHYRate", - "code": 0, + "name": "SoftwareVersionString", + "code": 10, "mfgCode": null, "side": "server", - "type": "PHYRateEnum", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "FullDuplex", - "code": 1, + "name": "ManufacturingDate", + "code": 11, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "20210614123456ZZ", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketRxCount", - "code": 2, + "name": "PartNumber", + "code": 12, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PacketTxCount", - "code": 3, + "name": "ProductURL", + "code": 13, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "long_char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TxErrCount", - "code": 4, + "name": "ProductLabel", + "code": 14, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CollisionCount", - "code": 5, + "name": "SerialNumber", + "code": 15, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OverrunCount", - "code": 6, + "name": "Reachable", + "code": 17, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "boolean", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CarrierDetect", - "code": 7, + "name": "UniqueID", + "code": 18, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "char_string", "included": 1, - "storageOption": "External", - "singleton": 0, + "storageOption": "RAM", + "singleton": 1, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TimeSinceReset", - "code": 8, + "name": "ProductAppearance", + "code": 20, "mfgCode": null, "side": "server", - "type": "int64u", + "type": "ProductAppearanceStruct", "included": 1, "storageOption": "External", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "0x0000000000000000", + "defaultValue": "", "reportable": 1, "minInterval": 1, - "maxInterval": 65534, + "maxInterval": 65344, "reportableChange": 0 }, { @@ -4237,7 +5479,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4251,24 +5493,63 @@ "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "1", + "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": "Bridged Device Basic Information", - "code": 57, + "name": "Switch", + "code": 59, "mfgCode": null, - "define": "BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER", + "define": "SWITCH_CLUSTER", "side": "client", - "enabled": 0, + "enabled": 1, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -4277,278 +5558,340 @@ "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Bridged Device Basic Information", - "code": 57, + "name": "Switch", + "code": 59, "mfgCode": null, - "define": "BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER", + "define": "SWITCH_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "VendorName", - "code": 1, + "name": "NumberOfPositions", + "code": 0, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int8u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "VendorID", - "code": 2, + "name": "CurrentPosition", + "code": 1, "mfgCode": null, "side": "server", - "type": "vendor_id", + "type": "int8u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductName", - "code": 3, + "name": "MultiPressMax", + "code": 2, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int8u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NodeLabel", - "code": 5, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, - "storageOption": "NVM", - "singleton": 1, + "storageOption": "External", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "HardwareVersion", - "code": 7, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", - "singleton": 1, + "storageOption": "External", + "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "HardwareVersionString", - "code": 8, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, - "storageOption": "RAM", - "singleton": 1, + "storageOption": "External", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SoftwareVersion", - "code": 9, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SoftwareVersionString", - "code": 10, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "OpenCommissioningWindow", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 }, { - "name": "ManufacturingDate", - "code": 11, + "name": "OpenBasicCommissioningWindow", + "code": 1, "mfgCode": null, - "side": "server", - "type": "char_string", + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RevokeCommissioning", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "20210614123456ZZ", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PartNumber", - "code": 12, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "char_string", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "WindowStatus", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "CommissioningWindowStatusEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "ProductURL", - "code": 13, + "name": "AdminFabricIndex", + "code": 1, "mfgCode": null, "side": "server", - "type": "long_char_string", + "type": "fabric_idx", "included": 1, - "storageOption": "RAM", - "singleton": 1, + "storageOption": "External", + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductLabel", - "code": 14, + "name": "AdminVendorId", + "code": 2, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int16u", "included": 1, - "storageOption": "RAM", - "singleton": 1, + "storageOption": "External", + "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SerialNumber", - "code": 15, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Reachable", - "code": 17, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "UniqueID", - "code": 18, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "array", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ProductAppearance", - "code": 20, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "ProductAppearanceStruct", + "type": "array", "included": 1, - "storageOption": "External", - "singleton": 1, + "storageOption": "RAM", + "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, "minInterval": 1, - "maxInterval": 65344, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -4575,46 +5918,89 @@ "type": "int16u", "included": 1, "storageOption": "RAM", - "singleton": 1, + "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 } - ], - "events": [ + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ { - "name": "StartUp", + "name": "AttestationRequest", "code": 0, "mfgCode": null, - "side": "server", - "included": 1 + "source": "client", + "incoming": 1, + "outgoing": 1 }, { - "name": "ShutDown", - "code": 1, + "name": "CertificateChainRequest", + "code": 2, "mfgCode": null, - "side": "server", - "included": 1 + "source": "client", + "incoming": 1, + "outgoing": 1 }, { - "name": "Leave", - "code": 2, + "name": "CSRRequest", + "code": 4, "mfgCode": null, - "side": "server", - "included": 1 + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddNOC", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UpdateNOC", + "code": 7, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UpdateFabricLabel", + "code": 9, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveFabric", + "code": 10, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddTrustedRootCertificate", + "code": 11, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 } - ] - }, - { - "name": "Switch", - "code": 59, - "mfgCode": null, - "define": "SWITCH_CLUSTER", - "side": "client", - "enabled": 1, + ], "attributes": [ { "name": "FeatureMap", @@ -4651,69 +6037,55 @@ ] }, { - "name": "Switch", - "code": 59, + "name": "Operational Credentials", + "code": 62, "mfgCode": null, - "define": "SWITCH_CLUSTER", + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", "side": "server", "enabled": 1, - "attributes": [ + "commands": [ { - "name": "NumberOfPositions", - "code": 0, + "name": "AttestationResponse", + "code": 1, "mfgCode": null, - "side": "server", - "type": "int8u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "2", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 + "source": "server", + "incoming": 0, + "outgoing": 1 }, { - "name": "CurrentPosition", - "code": 1, + "name": "CertificateChainResponse", + "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 + "source": "server", + "incoming": 0, + "outgoing": 1 }, { - "name": "MultiPressMax", - "code": 2, + "name": "CSRResponse", + "code": 5, "mfgCode": null, - "side": "server", - "type": "int8u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "2", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 + "source": "server", + "incoming": 0, + "outgoing": 1 }, { - "name": "GeneratedCommandList", - "code": 65528, + "name": "NOCResponse", + "code": 8, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "NOCs", + "code": 0, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -4723,8 +6095,8 @@ "reportableChange": 0 }, { - "name": "AcceptedCommandList", - "code": 65529, + "name": "Fabrics", + "code": 1, "mfgCode": null, "side": "server", "type": "array", @@ -4739,11 +6111,11 @@ "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "SupportedFabrics", + "code": 2, "mfgCode": null, "side": "server", - "type": "array", + "type": "int8u", "included": 1, "storageOption": "External", "singleton": 0, @@ -4755,142 +6127,112 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "CommissionedFabrics", + "code": 3, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "TrustedRootCertificates", + "code": 4, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } - ] - }, - { - "name": "Administrator Commissioning", - "code": 60, - "mfgCode": null, - "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "OpenCommissioningWindow", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "OpenBasicCommissioningWindow", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "RevokeCommissioning", - "code": 2, + "name": "CurrentFabricIndex", + "code": 5, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Administrator Commissioning", - "code": 60, - "mfgCode": null, - "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "WindowStatus", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "CommissioningWindowStatusEnum", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AdminFabricIndex", - "code": 1, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "fabric_idx", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AdminVendorId", - "code": 2, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4924,86 +6266,70 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Operational Credentials", - "code": 62, + "name": "Group Key Management", + "code": 63, "mfgCode": null, - "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", "side": "client", - "enabled": 1, + "enabled": 0, "commands": [ { - "name": "AttestationRequest", + "name": "KeySetWrite", "code": 0, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 - }, - { - "name": "CertificateChainRequest", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "CSRRequest", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "AddNOC", - "code": 6, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "UpdateNOC", - "code": 7, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "UpdateFabricLabel", - "code": 9, + "name": "KeySetRead", + "code": 1, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "RemoveFabric", - "code": 10, + "name": "KeySetRemove", + "code": 3, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "AddTrustedRootCertificate", - "code": 11, + "name": "KeySetReadAllIndices", + "code": 4, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5023,55 +6349,55 @@ ] }, { - "name": "Operational Credentials", - "code": 62, + "name": "Group Key Management", + "code": 63, "mfgCode": null, - "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", "side": "server", "enabled": 1, "commands": [ { - "name": "AttestationResponse", - "code": 1, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "CertificateChainResponse", - "code": 3, + "name": "KeySetReadResponse", + "code": 2, "mfgCode": null, "source": "server", "incoming": 0, "outgoing": 1 }, { - "name": "CSRResponse", + "name": "KeySetReadAllIndicesResponse", "code": 5, "mfgCode": null, "source": "server", "incoming": 0, "outgoing": 1 - }, - { - "name": "NOCResponse", - "code": 8, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 } ], "attributes": [ { - "name": "Fabrics", + "name": "GroupKeyMap", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GroupTable", "code": 1, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5081,13 +6407,13 @@ "reportableChange": 0 }, { - "name": "SupportedFabrics", + "name": "MaxGroupsPerFabric", "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5097,13 +6423,13 @@ "reportableChange": 0 }, { - "name": "CommissionedFabrics", + "name": "MaxGroupKeysPerFabric", "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5113,13 +6439,13 @@ "reportableChange": 0 }, { - "name": "TrustedRootCertificates", - "code": 4, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5129,13 +6455,45 @@ "reportableChange": 0 }, { - "name": "CurrentFabricIndex", - "code": 5, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -10741,7 +12099,33 @@ ] }, { + "id": 29, "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + }, + "deviceTypes": [ + { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + } + ], + "deviceTypeRefs": [ + 9 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 257 + ], "deviceTypeName": "MA-dimmablelight", "deviceTypeCode": 257, "deviceTypeProfileId": 259, @@ -14557,18 +15941,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 257 + "networkId": 0 } ], "log": [] diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter index 9630cd749e11e7..6a953a3570edf7 100644 --- a/examples/placeholder/linux/apps/app2/config.matter +++ b/examples/placeholder/linux/apps/app2/config.matter @@ -200,6 +200,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -676,6 +679,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -761,6 +768,7 @@ server cluster AccessControl = 31 { } attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0; + attribute access(read: administer, write: administer) AccessControlExtensionStruct extension[] = 1; readonly attribute int16u subjectsPerAccessControlEntry = 2; readonly attribute int16u targetsPerAccessControlEntry = 3; readonly attribute int16u accessControlEntriesPerFabric = 4; @@ -2516,6 +2524,7 @@ server cluster OperationalCredentials = 62 { 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; @@ -2596,6 +2605,78 @@ server cluster OperationalCredentials = 62 { command access(invoke: administer) AddTrustedRootCertificate(AddTrustedRootCertificateRequest): DefaultSuccess = 11; } +/** The Group Key Management Cluster is the mechanism by which group keys are managed. */ +server cluster GroupKeyManagement = 63 { + 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; + } + + request struct KeySetRemoveRequest { + INT16U groupKeySetID = 0; + } + + response struct KeySetReadResponse = 2 { + GroupKeySetStruct groupKeySet = 0; + } + + response struct KeySetReadAllIndicesResponse = 5 { + INT16U groupKeySetIDs[] = 0; + } + + fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0; + fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1; + fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3; + fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4; +} + /** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only labels. */ client cluster FixedLabel = 64 { @@ -6398,6 +6479,7 @@ server cluster AccountLogin = 1294 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster GeneralCommissioning; binding cluster ThreadNetworkDiagnostics; @@ -6426,6 +6508,10 @@ endpoint 0 { callback attribute serverList; callback attribute clientList; callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } @@ -6433,11 +6519,13 @@ endpoint 0 { server cluster AccessControl { emits event AccessControlEntryChanged; callback attribute acl; + callback attribute extension; callback attribute subjectsPerAccessControlEntry; callback attribute targetsPerAccessControlEntry; callback attribute accessControlEntriesPerFabric; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6474,6 +6562,10 @@ endpoint 0 { persist attribute localConfigDisabled default = 0; callback attribute uniqueID; callback attribute capabilityMinima; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6481,6 +6573,10 @@ endpoint 0 { 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; } @@ -6489,12 +6585,20 @@ endpoint 0 { callback attribute hourFormat; callback attribute activeCalendarType; callback attribute supportedCalendarTypes; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } server cluster UnitLocalization { ram attribute temperatureUnit; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6532,6 +6636,10 @@ endpoint 0 { ram attribute batChargingCurrent; callback attribute activeBatChargeFaults; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -6544,6 +6652,7 @@ endpoint 0 { callback attribute supportsConcurrentConnection default = 1; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -6558,6 +6667,10 @@ endpoint 0 { ram attribute lastNetworkingStatus; ram attribute lastNetworkID; ram attribute lastConnectErrorValue; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; } @@ -6573,6 +6686,10 @@ endpoint 0 { callback attribute activeRadioFaults; callback attribute activeNetworkFaults; callback attribute testEventTriggersEnabled default = false; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } @@ -6727,16 +6844,38 @@ endpoint 0 { callback attribute windowStatus default = 0; callback attribute adminFabricIndex default = 1; callback attribute adminVendorId default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; } server cluster OperationalCredentials { + callback attribute NOCs; callback attribute fabrics; callback attribute supportedFabrics; callback attribute commissionedFabrics; callback attribute trustedRootCertificates; callback attribute currentFabricIndex; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster GroupKeyManagement { + callback attribute groupKeyMap; + callback attribute groupTable; + callback attribute maxGroupsPerFabric; + callback attribute maxGroupKeysPerFabric; + 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/placeholder/linux/apps/app2/config.zap b/examples/placeholder/linux/apps/app2/config.zap index 28aee033676628..bfeaee11de0175 100644 --- a/examples/placeholder/linux/apps/app2/config.zap +++ b/examples/placeholder/linux/apps/app2/config.zap @@ -33,9 +33,45 @@ ], "endpointTypes": [ { + "id": 30, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 3, + 2 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -46,6 +82,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -136,6 +188,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -242,7 +374,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -338,7 +470,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -586,6 +718,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -932,6 +1080,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "ProductAppearance", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "ProductAppearanceStruct", + "included": 0, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1072,73 +1300,153 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Time Format Localization", - "code": 44, - "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "EventList", + "code": 65530, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Time Format Localization", - "code": 44, - "mfgCode": null, - "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { "name": "HourFormat", "code": 0, @@ -1187,6 +1495,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1229,6 +1601,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1271,6 +1659,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1380,20 +1832,36 @@ "enabled": 0, "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "client", - "type": "int16u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 } ] }, @@ -1917,6 +2385,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1985,6 +2517,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2149,6 +2697,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2257,6 +2821,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2437,13 +3017,61 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2494,7 +3122,33 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -2676,65 +3330,129 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ], - "events": [ + }, { - "name": "BootReason", - "code": 3, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "included": 1 - } - ] - }, - { - "name": "Software Diagnostics", - "code": 52, - "mfgCode": null, - "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "ResetWatermarks", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "BootReason", + "code": 3, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Software Diagnostics", + "code": 52, + "mfgCode": null, + "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "ResetWatermarks", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], "attributes": [ { "name": "ClusterRevision", @@ -5013,84 +5731,508 @@ "outgoing": 1 }, { - "name": "RevokeCommissioning", - "code": 2, + "name": "RevokeCommissioning", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "WindowStatus", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "CommissioningWindowStatusEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "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": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminVendorId", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ + { + "name": "AttestationRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CertificateChainRequest", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "CSRRequest", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddNOC", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UpdateNOC", + "code": 7, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UpdateFabricLabel", + "code": 9, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "RemoveFabric", + "code": 10, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "AddTrustedRootCertificate", + "code": 11, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AttestationResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "CertificateChainResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "CSRResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "NOCResponse", + "code": 8, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "NOCs", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedFabrics", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CommissionedFabrics", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TrustedRootCertificates", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentFabricIndex", + "code": 5, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Administrator Commissioning", - "code": 60, - "mfgCode": null, - "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "WindowStatus", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "CommissioningWindowStatusEnum", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AdminFabricIndex", - "code": 1, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "fabric_idx", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AdminVendorId", - "code": 2, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5124,86 +6266,70 @@ "bounded": 0, "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Operational Credentials", - "code": 62, + "name": "Group Key Management", + "code": 63, "mfgCode": null, - "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", "side": "client", - "enabled": 1, + "enabled": 0, "commands": [ { - "name": "AttestationRequest", + "name": "KeySetWrite", "code": 0, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 - }, - { - "name": "CertificateChainRequest", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "CSRRequest", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "AddNOC", - "code": 6, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "UpdateNOC", - "code": 7, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "UpdateFabricLabel", - "code": 9, + "name": "KeySetRead", + "code": 1, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "RemoveFabric", - "code": 10, + "name": "KeySetRemove", + "code": 3, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 }, { - "name": "AddTrustedRootCertificate", - "code": 11, + "name": "KeySetReadAllIndices", + "code": 4, "mfgCode": null, "source": "client", "incoming": 1, - "outgoing": 1 + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5223,55 +6349,55 @@ ] }, { - "name": "Operational Credentials", - "code": 62, + "name": "Group Key Management", + "code": 63, "mfgCode": null, - "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", "side": "server", "enabled": 1, "commands": [ { - "name": "AttestationResponse", - "code": 1, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "CertificateChainResponse", - "code": 3, + "name": "KeySetReadResponse", + "code": 2, "mfgCode": null, "source": "server", "incoming": 0, "outgoing": 1 }, { - "name": "CSRResponse", + "name": "KeySetReadAllIndicesResponse", "code": 5, "mfgCode": null, "source": "server", "incoming": 0, "outgoing": 1 - }, - { - "name": "NOCResponse", - "code": 8, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 } ], "attributes": [ { - "name": "Fabrics", + "name": "GroupKeyMap", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GroupTable", "code": 1, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5281,13 +6407,13 @@ "reportableChange": 0 }, { - "name": "SupportedFabrics", + "name": "MaxGroupsPerFabric", "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5297,13 +6423,13 @@ "reportableChange": 0 }, { - "name": "CommissionedFabrics", + "name": "MaxGroupKeysPerFabric", "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5313,13 +6439,13 @@ "reportableChange": 0 }, { - "name": "TrustedRootCertificates", - "code": 4, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -5329,13 +6455,45 @@ "reportableChange": 0 }, { - "name": "CurrentFabricIndex", - "code": 5, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "External", + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -11025,7 +12183,33 @@ ] }, { + "id": 31, "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + }, + "deviceTypes": [ + { + "id": 9, + "code": 257, + "profileId": 259, + "label": "MA-dimmablelight", + "name": "MA-dimmablelight" + } + ], + "deviceTypeRefs": [ + 9 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 257 + ], "deviceTypeName": "MA-dimmablelight", "deviceTypeCode": 257, "deviceTypeProfileId": 259, @@ -14583,18 +15767,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 257 + "networkId": 0 } ], "log": [] diff --git a/examples/platform/cc13x2_26x2/project_include/OpenThreadConfig.h b/examples/platform/cc13x2_26x2/project_include/OpenThreadConfig.h index 02f900809aae9b..218b8aefe9f3d3 100644 --- a/examples/platform/cc13x2_26x2/project_include/OpenThreadConfig.h +++ b/examples/platform/cc13x2_26x2/project_include/OpenThreadConfig.h @@ -96,4 +96,4 @@ #define OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE 1 // Use the TI-supplied default platform configuration for remainder -#include "openthread-core-cc13xx_cc26xx-config.h" +#include "openthread-core-cc13xx_cc26xx-config-matter.h" diff --git a/examples/platform/cc13x4_26x4/project_include/OpenThreadConfig.h b/examples/platform/cc13x4_26x4/project_include/OpenThreadConfig.h index e61b5a3a5ac7a9..ca8f9a8a3347fe 100644 --- a/examples/platform/cc13x4_26x4/project_include/OpenThreadConfig.h +++ b/examples/platform/cc13x4_26x4/project_include/OpenThreadConfig.h @@ -96,4 +96,4 @@ #define OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE 1 // Use the TI-supplied default platform configuration for remainder -#include "openthread-core-cc13xx_cc26xx-config.h" +#include "openthread-core-cc13xx_cc26xx-config-matter.h" diff --git a/examples/platform/esp32/common/CommonDeviceCallbacks.cpp b/examples/platform/esp32/common/CommonDeviceCallbacks.cpp index c4409a59cc20f2..eddb61524c0a74 100644 --- a/examples/platform/esp32/common/CommonDeviceCallbacks.cpp +++ b/examples/platform/esp32/common/CommonDeviceCallbacks.cpp @@ -62,43 +62,48 @@ void CommonDeviceCallbacks::DeviceEventCallback(const ChipDeviceEvent * event, i case DeviceEventType::kCHIPoBLEConnectionClosed: ESP_LOGI(TAG, "CHIPoBLE disconnected"); -#if CONFIG_BT_ENABLED -#if CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING +#if CONFIG_BT_ENABLED && CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING if (chip::Server::GetInstance().GetFabricTable().FabricCount() > 0) { esp_err_t err = ESP_OK; + #if CONFIG_BT_NIMBLE_ENABLED - if (ble_hs_is_enabled()) + if (!ble_hs_is_enabled()) + { + ESP_LOGI(TAG, "BLE already deinited"); + break; + } + if (nimble_port_stop() != 0) { - int ret = nimble_port_stop(); - if (ret == 0) - { - nimble_port_deinit(); + ESP_LOGE(TAG, "nimble_port_stop() failed"); + break; + } + vTaskDelay(100); + nimble_port_deinit(); + #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) - err = esp_nimble_hci_and_controller_deinit(); -#endif // ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) -#endif // CONFIG_BT_NIMBLE_ENABLED + err = esp_nimble_hci_and_controller_deinit(); +#endif +#endif /* CONFIG_BT_NIMBLE_ENABLED */ #if CONFIG_IDF_TARGET_ESP32 - err += esp_bt_mem_release(ESP_BT_MODE_BTDM); + err |= esp_bt_mem_release(ESP_BT_MODE_BTDM); #elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 - err += esp_bt_mem_release(ESP_BT_MODE_BLE); + err |= esp_bt_mem_release(ESP_BT_MODE_BLE); #endif - if (err == ESP_OK) - { - ESP_LOGI(TAG, "BLE deinit successful and memory reclaimed"); - } - } - else - { - ESP_LOGW(TAG, "nimble_port_stop() failed"); - } + + if (err != ESP_OK) + { + ESP_LOGE(TAG, "BLE deinit failed"); + } + else + { + ESP_LOGI(TAG, "BLE deinit successful and memory reclaimed"); } - else { ESP_LOGI(TAG, "BLE already deinited"); } } -#endif // CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING -#endif // CONFIG_BT_ENABLED +#endif /* CONFIG_BT_ENABLED && CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING */ + break; case DeviceEventType::kDnssdInitialized: diff --git a/examples/platform/linux/CommissionerMain.cpp b/examples/platform/linux/CommissionerMain.cpp index 73d9a146879b42..64a7a47d2dffcb 100644 --- a/examples/platform/linux/CommissionerMain.cpp +++ b/examples/platform/linux/CommissionerMain.cpp @@ -248,7 +248,7 @@ class PairingCommand : public Controller::DevicePairingDelegate void OnCommissioningStatusUpdate(PeerId peerId, CommissioningStage stageCompleted, CHIP_ERROR error) override; void OnReadCommissioningInfo(const ReadCommissioningInfo & info) override; - void OnFabricCheck(const MatchingFabricInfo & info) override; + void OnFabricCheck(NodeId matchingNodeId) override; private: #if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED @@ -347,11 +347,11 @@ void PairingCommand::OnReadCommissioningInfo(const ReadCommissioningInfo & info) info.basic.productId); } -void PairingCommand::OnFabricCheck(const MatchingFabricInfo & info) +void PairingCommand::OnFabricCheck(NodeId matchingNodeId) { - if (info.nodeId != kUndefinedNodeId) + if (matchingNodeId != kUndefinedNodeId) { - ChipLogProgress(AppServer, "ALREADY ON FABRIC WITH nodeId=0x" ChipLogFormatX64, ChipLogValueX64(info.nodeId)); + ChipLogProgress(AppServer, "ALREADY ON FABRIC WITH nodeId=0x" ChipLogFormatX64, ChipLogValueX64(matchingNodeId)); // wait until attestation verification before cancelling so we can validate vid/pid } } diff --git a/examples/platform/silabs/BaseApplication.cpp b/examples/platform/silabs/BaseApplication.cpp index b0d1dd0ea8a414..78d31c8acd4b61 100644 --- a/examples/platform/silabs/BaseApplication.cpp +++ b/examples/platform/silabs/BaseApplication.cpp @@ -61,6 +61,11 @@ #include #endif // SL_WIFI +#ifdef DIC_ENABLE +#include "dic.h" +#include "dic_control.h" +#endif // DIC_ENABLE + /********************************************************** * Defines and Constants *********************************************************/ @@ -140,6 +145,22 @@ Identify gIdentify = { #endif // EMBER_AF_PLUGIN_IDENTIFY_SERVER } // namespace +#ifdef DIC_ENABLE +namespace { +void AppSpecificConnectivityEventCallback(const ChipDeviceEvent * event, intptr_t arg) +{ + SILABS_LOG("AppSpecificConnectivityEventCallback: call back for IPV4"); + if ((event->Type == DeviceEventType::kInternetConnectivityChange) && + (event->InternetConnectivityChange.IPv4 == kConnectivity_Established)) + { + SILABS_LOG("Got IPv4 Address! Starting DIC module\n"); + if (DIC_OK != dic_init(dic::control::subscribeCB)) + SILABS_LOG("Failed to initialize DIC module\n"); + } +} +} // namespace +#endif // DIC_ENABLE + /********************************************************** * AppTask Definitions *********************************************************/ @@ -220,26 +241,13 @@ CHIP_ERROR BaseApplication::Init() sStatusLED.Init(SYSTEM_STATE_LED); #endif // ENABLE_WSTK_LEDS +#ifdef DIC_ENABLE + chip::DeviceLayer::PlatformMgr().AddEventHandler(AppSpecificConnectivityEventCallback, reinterpret_cast(nullptr)); +#endif // DIC_ENABLE + ConfigurationMgr().LogDeviceConfig(); - // Create buffer for QR code that can fit max size and null terminator. - char qrCodeBuffer[chip::QRCodeBasicSetupPayloadGenerator::kMaxQRCodeBase38RepresentationLength + 1]; - chip::MutableCharSpan QRCode(qrCodeBuffer); - - if (Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider().GetSetupPayload(QRCode) == CHIP_NO_ERROR) - { - // Print setup info on LCD if available -#ifdef QR_CODE_ENABLED - slLCD.SetQRCode((uint8_t *) QRCode.data(), QRCode.size()); - slLCD.ShowQRCode(true, true); -#else - PrintQrCodeURL(QRCode); -#endif // QR_CODE_ENABLED - } - else - { - SILABS_LOG("Getting QR code failed!"); - } + OutputQrCode(true /*refreshLCD at init*/); PlatformMgr().AddEventHandler(OnPlatformEvent, 0); #ifdef SL_WIFI @@ -457,6 +465,7 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent) CancelFunctionTimer(); mFunction = kFunction_NoneSelected; + OutputQrCode(false); #ifdef QR_CODE_ENABLED // TOGGLE QRCode/LCD demo UI slLCD.ToggleQRCode(); @@ -700,3 +709,30 @@ void BaseApplication::OnPlatformEvent(const ChipDeviceEvent * event, intptr_t) sIsProvisioned = event->ServiceProvisioningChange.IsServiceProvisioned; } } + +void BaseApplication::OutputQrCode(bool refreshLCD) +{ + (void) refreshLCD; // could be unused + + // Create buffer for the Qr code setup payload that can fit max size and null terminator. + char setupPayloadBuffer[chip::QRCodeBasicSetupPayloadGenerator::kMaxQRCodeBase38RepresentationLength + 1]; + chip::MutableCharSpan setupPayload(setupPayloadBuffer); + + if (Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider().GetSetupPayload(setupPayload) == CHIP_NO_ERROR) + { + // Print setup info on LCD if available +#ifdef QR_CODE_ENABLED + if (refreshLCD) + { + slLCD.SetQRCode((uint8_t *) setupPayload.data(), setupPayload.size()); + slLCD.ShowQRCode(true, true); + } +#endif // QR_CODE_ENABLED + + PrintQrCodeURL(setupPayload); + } + else + { + SILABS_LOG("Getting QR code failed!"); + } +} diff --git a/examples/platform/silabs/BaseApplication.h b/examples/platform/silabs/BaseApplication.h index 9e99580811293c..b3a9db893183e5 100644 --- a/examples/platform/silabs/BaseApplication.h +++ b/examples/platform/silabs/BaseApplication.h @@ -202,6 +202,15 @@ class BaseApplication static void ScheduleFactoryReset(); static void OnPlatformEvent(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t); + + /** + * @brief Outputs the QRcode payload and URL to the QR code in the logs + * and conditionally on the device LCD. + * + * @param refreshLCD When true, The LCD of the device will be refreshed to show the QR code + */ + static void OutputQrCode(bool refreshLCD); + /********************************************************** * Protected Attributes declaration *********************************************************/ diff --git a/examples/platform/silabs/FreeRTOSConfig.h b/examples/platform/silabs/FreeRTOSConfig.h index 4cad6b1e9803dc..4c1d29f015eb9c 100644 --- a/examples/platform/silabs/FreeRTOSConfig.h +++ b/examples/platform/silabs/FreeRTOSConfig.h @@ -107,11 +107,15 @@ extern "C" { #include +#ifdef SIWX_917 +extern uint32_t SystemCoreClock; +#else // For EFR32 #include "RTE_Components.h" #include CMSIS_device_header #include "em_assert.h" #include "em_device.h" +#endif #if defined(SL_COMPONENT_CATALOG_PRESENT) #include "sl_component_catalog.h" @@ -209,7 +213,7 @@ See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ #ifndef configTOTAL_HEAP_SIZE #ifdef SL_WIFI #ifdef DIC_ENABLE -#define configTOTAL_HEAP_SIZE ((size_t)(56 * 1024)) +#define configTOTAL_HEAP_SIZE ((size_t)(68 * 1024)) #else #define configTOTAL_HEAP_SIZE ((size_t)(34 * 1024)) #endif // DIC diff --git a/examples/platform/silabs/MatterConfig.cpp b/examples/platform/silabs/MatterConfig.cpp index 1392dd9dc2b382..36f78aa84839c2 100644 --- a/examples/platform/silabs/MatterConfig.cpp +++ b/examples/platform/silabs/MatterConfig.cpp @@ -48,7 +48,7 @@ using namespace ::chip::DeviceLayer; #include // If building with the EFR32-provided crypto backend, we can use the // opaque keystore -#if CHIP_CRYPTO_PLATFORM +#if CHIP_CRYPTO_PLATFORM && !(defined(SIWX_917)) #include static chip::DeviceLayer::Internal::Efr32PsaOperationalKeystore gOperationalKeystore; #endif @@ -215,7 +215,7 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName) initParams.testEventTriggerDelegate = &testEventTriggerDelegate; #endif // SILABS_TEST_EVENT_TRIGGER_ENABLED -#if CHIP_CRYPTO_PLATFORM +#if CHIP_CRYPTO_PLATFORM && !(defined(SIWX_917)) // When building with EFR32 crypto, use the opaque key store // instead of the default (insecure) one. gOperationalKeystore.Init(); @@ -255,7 +255,7 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName) } #ifdef SL_WIFI -void SilabsMatterConfig::InitWiFi(void) +CHIP_ERROR SilabsMatterConfig::InitWiFi(void) { #ifdef WF200_WIFI // Start wfx bus communication task. @@ -271,6 +271,7 @@ void SilabsMatterConfig::InitWiFi(void) return CHIP_ERROR_INTERNAL; } #endif /* WF200_WIFI */ + return CHIP_NO_ERROR; } #endif // SL_WIFI diff --git a/examples/platform/silabs/MatterConfig.h b/examples/platform/silabs/MatterConfig.h index 2c565f7caa7321..86c8b7e0a66ba4 100644 --- a/examples/platform/silabs/MatterConfig.h +++ b/examples/platform/silabs/MatterConfig.h @@ -29,7 +29,7 @@ class SilabsMatterConfig private: static CHIP_ERROR InitOpenThread(void); - static void InitWiFi(void); + static CHIP_ERROR InitWiFi(void); static void ConnectivityEventCallback(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg); static void InitOTARequestorHandler(chip::System::Layer * systemLayer, void * appState); }; diff --git a/examples/platform/silabs/SiWx917/BUILD.gn b/examples/platform/silabs/SiWx917/BUILD.gn index 3fd6164b576ea1..f18e89d1beb21e 100644 --- a/examples/platform/silabs/SiWx917/BUILD.gn +++ b/examples/platform/silabs/SiWx917/BUILD.gn @@ -83,33 +83,6 @@ config("chip_examples_project_config") { ] } -if (enable_dic) { - config("efr32_dic_config") { - include_dirs = [ - "${chip_root}/third_party/silabs/mqtt/stack", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/include", - "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/include", - ] - } - - source_set("efr32-dic") { - sources = [ - "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/src/dic.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/MQTT_transport.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_alloc.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tcp.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls_mem.c", - ] - public_deps = [ - "${chip_root}/src/inet", - "${chip_root}/src/lwip", - ] - public_configs = [ ":efr32_dic_config" ] - } -} - source_set("siwx917-matter-shell") { if (chip_build_libshell) { defines = [ "ENABLE_CHIP_SHELL" ] @@ -183,9 +156,10 @@ config("siwx917-common-config") { defines += [ "QR_CODE_ENABLED" ] } - if (chip_enable_ota_requestor) { - defines += [ "SILABS_OTA_ENABLED" ] - } + # TODO: Renable once ota is supported + # if (chip_enable_ota_requestor) { + # defines += [ "SILABS_OTA_ENABLED" ] + # } if (enable_heap_monitoring) { defines += [ "HEAP_MONITORING" ] @@ -292,6 +266,19 @@ source_set("siwx917-common") { deps += [ ":siwx917-matter-shell" ] } + # DIC + if (enable_dic) { + public_deps += + [ "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-dic" ] + } + + # AWS SDK OTA + if (aws_sdk_ota) { + public_deps += [ + "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-aws-sdk-ota", + ] + } + # Attestation Credentials if (chip_build_platform_attestation_credentials_provider) { deps += [ ":siwx917-attestation-credentials" ] diff --git a/examples/platform/silabs/SiWx917/uart.cpp b/examples/platform/silabs/SiWx917/uart.cpp index 966fe44d7efd25..ac7bb8af3e774a 100644 --- a/examples/platform/silabs/SiWx917/uart.cpp +++ b/examples/platform/silabs/SiWx917/uart.cpp @@ -53,7 +53,7 @@ void ARM_USART_SignalEvent(uint32_t event) case ARM_USART_EVENT_RECEIVE_COMPLETE: #ifdef ENABLE_CHIP_SHELL chip::NotifyShellProcessFromISR(); -#endif; +#endif case ARM_USART_EVENT_TRANSFER_COMPLETE: case ARM_USART_EVENT_TX_COMPLETE: case ARM_USART_EVENT_TX_UNDERFLOW: diff --git a/examples/platform/silabs/SilabsDeviceAttestationCreds.h b/examples/platform/silabs/SilabsDeviceAttestationCreds.h index c4f437c20f4b44..79f8f8df042aa8 100644 --- a/examples/platform/silabs/SilabsDeviceAttestationCreds.h +++ b/examples/platform/silabs/SilabsDeviceAttestationCreds.h @@ -16,9 +16,6 @@ */ #pragma once -// The "sl_token_manager.h" include belongs to the .cpp file, but the formatter change the order -// of the headers, causing a compilation error, so the include had to be added here instead -#include "sl_token_manager.h" #include namespace chip { diff --git a/examples/platform/silabs/efr32/BUILD.gn b/examples/platform/silabs/efr32/BUILD.gn index 5bb628ad4f99e6..4ae40522fe4ccc 100644 --- a/examples/platform/silabs/efr32/BUILD.gn +++ b/examples/platform/silabs/efr32/BUILD.gn @@ -97,33 +97,6 @@ config("chip_examples_project_config") { ] } -if (enable_dic) { - config("efr32_dic_config") { - include_dirs = [ - "${chip_root}/third_party/silabs/mqtt/stack", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/include", - "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/include", - ] - } - - source_set("efr32-dic") { - sources = [ - "${chip_root}/examples/platform/silabs/DIC/matter_abs_interface/src/dic.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/MQTT_transport.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_alloc.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tcp.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls.c", - "${chip_root}/third_party/silabs/mqtt/mqtt_transport_interface/src/altcp_tls_mbedtls_mem.c", - ] - public_deps = [ - "${chip_root}/src/inet", - "${chip_root}/src/lwip", - ] - public_configs = [ ":efr32_dic_config" ] - } -} - source_set("openthread_core_config_efr32_chip_examples") { if (chip_enable_openthread) { sources = [ "project_include/OpenThreadConfig.h" ] @@ -259,9 +232,17 @@ source_set("efr32-common") { "${efr32_sdk_build_root}:silabs_config", ] - # MQTT + # DIC if (enable_dic) { - deps += [ "${examples_plat_dir}:efr32-dic" ] + public_deps += + [ "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-dic" ] + } + + # AWS SDK OTA + if (aws_sdk_ota) { + public_deps += [ + "${silabs_common_plat_dir}/DIC/matter_abs_interface:silabs-aws-sdk-ota", + ] } include_dirs = [ "." ] diff --git a/examples/platform/silabs/efr32/project_include/OpenThreadConfig.h b/examples/platform/silabs/efr32/project_include/OpenThreadConfig.h index 339142894f5e61..e563f31d638b40 100644 --- a/examples/platform/silabs/efr32/project_include/OpenThreadConfig.h +++ b/examples/platform/silabs/efr32/project_include/OpenThreadConfig.h @@ -98,6 +98,10 @@ // and to stay awake after receiving a packet with frame pending set to true. #define OPENTHREAD_CONFIG_MAC_STAY_AWAKE_BETWEEN_FRAGMENTS 1 +#define OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS 0 + +#define OPENTHREAD_CONFIG_DETERMINISTIC_ECDSA_ENABLE 0 + // Use the SiLabs-supplied default platform configuration for remainder // of OpenThread config options. // diff --git a/examples/platform/silabs/efr32/rs911x/rsi_if.c b/examples/platform/silabs/efr32/rs911x/rsi_if.c index 900e07a42ce235..a2e0f563727fbe 100644 --- a/examples/platform/silabs/efr32/rs911x/rsi_if.c +++ b/examples/platform/silabs/efr32/rs911x/rsi_if.c @@ -184,7 +184,7 @@ int32_t wfx_rsi_disconnect() return status; } -#if CHIP_CONFIG_ENABLE_ICD_SERVER +#if SL_ICD_ENABLED /****************************************************************** * @fn wfx_rsi_power_save() * @brief @@ -215,7 +215,7 @@ int32_t wfx_rsi_power_save() SILABS_LOG("Powersave Config Success"); return status; } -#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER */ +#endif /* SL_ICD_ENABLED */ /****************************************************************** * @fn wfx_rsi_join_cb(uint16_t status, const uint8_t *buf, const uint16_t len) diff --git a/examples/platform/silabs/efr32/rs911x/wfx_rsi.h b/examples/platform/silabs/efr32/rs911x/wfx_rsi.h index d793244aa23cca..2275549ef7af41 100644 --- a/examples/platform/silabs/efr32/rs911x/wfx_rsi.h +++ b/examples/platform/silabs/efr32/rs911x/wfx_rsi.h @@ -90,9 +90,9 @@ int32_t wfx_rsi_get_ap_info(wfx_wifi_scan_result_t * ap); int32_t wfx_rsi_get_ap_ext(wfx_wifi_scan_ext_t * extra_info); int32_t wfx_rsi_reset_count(); int32_t wfx_rsi_disconnect(); -#if CHIP_CONFIG_ENABLE_ICD_SERVER +#if SL_ICD_ENABLED int32_t wfx_rsi_power_save(); -#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER */ +#endif /* SL_ICD_ENABLED */ #ifdef __cplusplus } diff --git a/examples/platform/silabs/efr32/rs911x/wfx_rsi_host.c b/examples/platform/silabs/efr32/rs911x/wfx_rsi_host.c index a448f3a0a45667..4b75a7b0c30411 100644 --- a/examples/platform/silabs/efr32/rs911x/wfx_rsi_host.c +++ b/examples/platform/silabs/efr32/rs911x/wfx_rsi_host.c @@ -193,7 +193,7 @@ sl_status_t wfx_connect_to_ap(void) return SL_STATUS_OK; } -#if CHIP_CONFIG_ENABLE_ICD_SERVER +#if SL_ICD_ENABLED /********************************************************************* * @fn sl_status_t wfx_power_save() * @brief @@ -210,7 +210,7 @@ sl_status_t wfx_power_save() } return SL_STATUS_OK; } -#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER */ +#endif /* SL_ICD_ENABLED */ /********************************************************************* * @fn void wfx_setup_ip6_link_local(sl_wfx_interface_t whichif) diff --git a/examples/platform/silabs/matter-platform.slcp b/examples/platform/silabs/matter-platform.slcp index 24e7cc54b4bb15..33ed32c11d909f 100644 --- a/examples/platform/silabs/matter-platform.slcp +++ b/examples/platform/silabs/matter-platform.slcp @@ -27,7 +27,7 @@ include: file_list: - {path: app.h} - {path: reset_util.h} -sdk: {id: gecko_sdk, version: 4.2.0} +sdk: {id: gecko_sdk, version: 4.3.1} toolchain_settings: [] component: @@ -44,10 +44,30 @@ component: - {id: rail_util_pti} - {id: bluetooth_feature_gatt} - {id: bluetooth_feature_connection} -- {id: psa_crypto} - {id: rail_lib_multiprotocol} - {id: bluetooth_feature_system} - {id: bluetooth_feature_scanner} +- {id: rail_util_power_manager_init} +- {id: psa_crypto} +- {id: psa_crypto_aes} +- {id: psa_crypto_ccm} +- {id: psa_crypto_cmac} +- {id: psa_crypto_ecc} +- {id: psa_crypto_ecdh} +- {id: psa_crypto_ecdsa} +- {id: psa_crypto_hash} +- {id: psa_crypto_hkdf} +- {id: mbedtls_x509} +- {id: mbedtls_cmac} +- {id: mbedtls_platform_dynamic_memory_allocation_config_init_runtime } +- {id: mbedtls_base64} +- {id: ot_psa_crypto} +- {id: bluetooth_crypto} +# Necessary componenets for ot coap cert lib +# - {id: mbedtls_dtls} # Requried by COAP lib +# - {id: mbedtls_tls_server} # Requried by COAP lib +# - {id: mbedtls_tls} # Requried by COAP lib +# - {id: mbedtls_jpake} # Required by COAP lib config_file: - override: @@ -57,20 +77,21 @@ config_file: directory: btconf configuration: -- {name: SL_BOARD_ENABLE_VCOM, value: '1'} -- {name: SL_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED, value: '1'} +- {name: SL_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED, value: '0'} - {name: SL_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED, value: '1'} - condition: [uartdrv_usart] name: UARTDRV_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION - value: '0' + value: '1' - condition: [iostream_usart] name: SL_IOSTREAM_USART_VCOM_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION - value: '0' + value: '1' - condition: [iostream_usart] name: SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE value: '128' -- {name: SL_HEAP_SIZE, value: '16384'} -- {name: SL_STACK_SIZE, value: '4608'} +- {name: SL_HEAP_SIZE, value: '0'} +- {name: SL_STACK_SIZE, value: '0'} +- {name: SL_BOARD_ENABLE_VCOM, value: '0'} +- {name: EMDRV_UARTDRV_FLOW_CONTROL_ENABLE, value: '0'} requires: - condition: [device_series_1] diff --git a/examples/pump-app/cc13x2x7_26x2x7/.gn b/examples/pump-app/cc13x2x7_26x2x7/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/pump-app/cc13x2x7_26x2x7/.gn +++ b/examples/pump-app/cc13x2x7_26x2x7/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp b/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp index 2dfecb65a11bc0..6fe2ee9973b3d7 100644 --- a/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp +++ b/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp @@ -156,13 +156,14 @@ int AppTask::Init() ; } -#ifdef CONFIG_OPENTHREAD_MTD_SED +#if CHIP_DEVICE_CONFIG_THREAD_FTD + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); +#elif CONFIG_OPENTHREAD_MTD_SED ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice); -#elif CONFIG_OPENTHREAD_MTD - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #else - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #endif + if (ret != CHIP_NO_ERROR) { PLAT_LOG("ConnectivityMgr().SetThreadDeviceType() failed"); diff --git a/examples/pump-app/cc13x2x7_26x2x7/main/DeviceCallbacks.cpp b/examples/pump-app/cc13x2x7_26x2x7/main/DeviceCallbacks.cpp index 8cda813016e45e..9bcfec5a6f8b51 100644 --- a/examples/pump-app/cc13x2x7_26x2x7/main/DeviceCallbacks.cpp +++ b/examples/pump-app/cc13x2x7_26x2x7/main/DeviceCallbacks.cpp @@ -27,6 +27,8 @@ #include "AppConfig.h" #include "PumpManager.h" +#include +#include #include #include #include diff --git a/examples/pump-app/cc13x4_26x4/.gn b/examples/pump-app/cc13x4_26x4/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/pump-app/cc13x4_26x4/.gn +++ b/examples/pump-app/cc13x4_26x4/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/pump-app/cc13x4_26x4/args.gni b/examples/pump-app/cc13x4_26x4/args.gni index a0299575e8bc49..93f1bd19e1590f 100644 --- a/examples/pump-app/cc13x4_26x4/args.gni +++ b/examples/pump-app/cc13x4_26x4/args.gni @@ -13,6 +13,7 @@ # limitations under the License. import("//build_overrides/chip.gni") +import("${chip_root}/config/standalone/args.gni") import("${chip_root}/examples/platform/cc13x4_26x4/args.gni") ti_simplelink_sdk_target = get_label_info(":sdk", "label_no_toolchain") diff --git a/examples/pump-app/cc13x4_26x4/main/AppTask.cpp b/examples/pump-app/cc13x4_26x4/main/AppTask.cpp index b5be215216a4bf..4e70c312e77f33 100644 --- a/examples/pump-app/cc13x4_26x4/main/AppTask.cpp +++ b/examples/pump-app/cc13x4_26x4/main/AppTask.cpp @@ -157,12 +157,12 @@ int AppTask::Init() ; } -#ifdef CONFIG_OPENTHREAD_MTD_SED +#if CHIP_DEVICE_CONFIG_THREAD_FTD + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); +#elif CONFIG_OPENTHREAD_MTD_SED ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice); -#elif CONFIG_OPENTHREAD_MTD - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #else - ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); #endif if (ret != CHIP_NO_ERROR) { diff --git a/examples/pump-app/cc13x4_26x4/main/DeviceCallbacks.cpp b/examples/pump-app/cc13x4_26x4/main/DeviceCallbacks.cpp index 8cda813016e45e..9bcfec5a6f8b51 100644 --- a/examples/pump-app/cc13x4_26x4/main/DeviceCallbacks.cpp +++ b/examples/pump-app/cc13x4_26x4/main/DeviceCallbacks.cpp @@ -27,6 +27,8 @@ #include "AppConfig.h" #include "PumpManager.h" +#include +#include #include #include #include diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter index c65c77bce28ef6..426fbbc2912bc4 100644 --- a/examples/pump-app/pump-common/pump-app.matter +++ b/examples/pump-app/pump-common/pump-app.matter @@ -219,6 +219,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 ce290aa780c9f6..8e8a10858ea042 100644 --- a/examples/pump-app/silabs/data_model/pump-thread-app.matter +++ b/examples/pump-app/silabs/data_model/pump-thread-app.matter @@ -219,6 +219,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 ce290aa780c9f6..8e8a10858ea042 100644 --- a/examples/pump-app/silabs/data_model/pump-wifi-app.matter +++ b/examples/pump-app/silabs/data_model/pump-wifi-app.matter @@ -219,6 +219,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/.gn b/examples/pump-controller-app/cc13x2x7_26x2x7/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/pump-controller-app/cc13x2x7_26x2x7/.gn +++ b/examples/pump-controller-app/cc13x2x7_26x2x7/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/main/AppTask.cpp b/examples/pump-controller-app/cc13x2x7_26x2x7/main/AppTask.cpp index fa5d85eaa6e42e..e7dadb13f75fad 100644 --- a/examples/pump-controller-app/cc13x2x7_26x2x7/main/AppTask.cpp +++ b/examples/pump-controller-app/cc13x2x7_26x2x7/main/AppTask.cpp @@ -145,7 +145,14 @@ int AppTask::Init() ; } +#if CHIP_DEVICE_CONFIG_THREAD_FTD ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); +#elif CONFIG_OPENTHREAD_MTD_SED + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice); +#else + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); +#endif + if (ret != CHIP_NO_ERROR) { PLAT_LOG("ConnectivityMgr().SetThreadDeviceType() failed"); diff --git a/examples/pump-controller-app/cc13x4_26x4/.gn b/examples/pump-controller-app/cc13x4_26x4/.gn index 3d48789e30ab3d..cf974b2eb1df22 100644 --- a/examples/pump-controller-app/cc13x4_26x4/.gn +++ b/examples/pump-controller-app/cc13x4_26x4/.gn @@ -25,4 +25,6 @@ default_args = { target_os = "freertos" import("//args.gni") + pw_build_PIP_REQUIREMENTS += + [ "${chip_root}/scripts/setup/requirements.ti.txt" ] } diff --git a/examples/pump-controller-app/cc13x4_26x4/args.gni b/examples/pump-controller-app/cc13x4_26x4/args.gni index 39b1c91806af19..680e5eaf6d33eb 100644 --- a/examples/pump-controller-app/cc13x4_26x4/args.gni +++ b/examples/pump-controller-app/cc13x4_26x4/args.gni @@ -13,6 +13,7 @@ # limitations under the License. import("//build_overrides/chip.gni") +import("${chip_root}/config/standalone/args.gni") import("${chip_root}/examples/platform/cc13x4_26x4/args.gni") ti_simplelink_sdk_target = get_label_info(":sdk", "label_no_toolchain") diff --git a/examples/pump-controller-app/cc13x4_26x4/main/AppTask.cpp b/examples/pump-controller-app/cc13x4_26x4/main/AppTask.cpp index 51ef817cff14ac..3d8b0bf2033b34 100644 --- a/examples/pump-controller-app/cc13x4_26x4/main/AppTask.cpp +++ b/examples/pump-controller-app/cc13x4_26x4/main/AppTask.cpp @@ -145,7 +145,14 @@ int AppTask::Init() ; } +#if CHIP_DEVICE_CONFIG_THREAD_FTD ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router); +#elif CONFIG_OPENTHREAD_MTD_SED + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice); +#else + ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice); +#endif + if (ret != CHIP_NO_ERROR) { PLAT_LOG("ConnectivityMgr().SetThreadDeviceType() failed"); 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 51a97051592256..594dabd32d0368 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 @@ -144,6 +144,10 @@ client cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter b/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter index c9a11288ef8505..bfe7bb19434d2f 100644 --- a/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter +++ b/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; 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 cdeaf613e099d4..7425da173360f4 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 @@ -150,6 +150,10 @@ server cluster Groups = 4 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -1976,12 +1980,17 @@ endpoint 0 { } } endpoint 1 { + device type ma_powersource = 17, version 1; device type ma_smokecoalarm = 118, version 1; server cluster Identify { ram attribute identifyTime default = 0x0; ram attribute identifyType default = 0x00; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 4; } @@ -1992,6 +2001,19 @@ endpoint 1 { ram attribute clusterRevision default = 4; } + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + server cluster PowerSource { emits event BatFaultChange; ram attribute status default = 0; @@ -2001,6 +2023,10 @@ endpoint 1 { ram attribute batReplacementNeeded; ram attribute batReplaceability; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 2; } @@ -2030,6 +2056,10 @@ endpoint 1 { ram attribute contaminationState default = 0; ram attribute smokeSensitivityLevel default = 1; ram attribute expiryDate default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 3; ram attribute clusterRevision default = 1; } diff --git a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap index 542005ce91a4c8..64d349dbf16b8b 100644 --- a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap +++ b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap @@ -33,7 +33,33 @@ ], "endpointTypes": [ { + "id": 37, "name": "MA-rootdevice", + "deviceTypeRef": { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + }, + "deviceTypes": [ + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 2 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], "deviceTypeName": "MA-rootdevice", "deviceTypeCode": 22, "deviceTypeProfileId": 259, @@ -5545,9 +5571,45 @@ ] }, { + "id": 36, "name": "Anonymous Endpoint Type", - "deviceTypeName": "MA-smokecoalarm", - "deviceTypeCode": 118, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 44, + "code": 118, + "profileId": 259, + "label": "MA-smokecoalarm", + "name": "MA-smokecoalarm" + } + ], + "deviceTypeRefs": [ + 3, + 44 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 118 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -5656,7 +5718,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -5672,7 +5734,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -5688,7 +5750,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -5704,7 +5766,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -5996,6 +6058,234 @@ } ] }, + { + "name": "Descriptor", + "code": 29, + "mfgCode": null, + "define": "DESCRIPTOR_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ServerList", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientList", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartsList", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "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": "Power Source", "code": 47, @@ -6564,7 +6854,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6580,7 +6870,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6596,7 +6886,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6612,7 +6902,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6939,7 +7229,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6955,7 +7245,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6971,7 +7261,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -6987,7 +7277,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -7119,18 +7409,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 118 + "networkId": 0 } ], "log": [] 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 094a376a635f92..72ebcefe90b4d9 100644 --- a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter +++ b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter @@ -35,6 +35,10 @@ struct OperationalStateStruct { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter index aff57f8b0d64c7..05c0e0d8e2b08c 100644 --- a/examples/thermostat/thermostat-common/thermostat.matter +++ b/examples/thermostat/thermostat-common/thermostat.matter @@ -196,125 +196,12 @@ server cluster Groups = 4 { fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; } -/** Attributes and commands for scene configuration and manipulation. */ -server cluster Scenes = 5 { +/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ +server cluster Descriptor = 29 { bitmap Feature : BITMAP32 { - kSceneNames = 0x1; - } - - bitmap ScenesCopyMode : BITMAP8 { - kCopyAllScenes = 0x1; - } - - struct AttributeValuePair { - attrib_id attributeID = 0; - int32u attributeValue = 1; - } - - struct ExtensionFieldSet { - cluster_id clusterID = 0; - AttributeValuePair attributeValueList[] = 1; - } - - readonly attribute int8u sceneCount = 0; - readonly attribute int8u currentScene = 1; - readonly attribute group_id currentGroup = 2; - readonly attribute boolean sceneValid = 3; - readonly attribute bitmap8 nameSupport = 4; - 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 AddSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - INT16U transitionTime = 2; - CHAR_STRING sceneName = 3; - ExtensionFieldSet extensionFieldSets[] = 4; - } - - request struct ViewSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RemoveSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RemoveAllScenesRequest { - group_id groupID = 0; - } - - request struct StoreSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RecallSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - optional nullable INT16U transitionTime = 2; - } - - request struct GetSceneMembershipRequest { - group_id groupID = 0; - } - - response struct AddSceneResponse = 0 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; + kTagList = 0x1; } - response struct ViewSceneResponse = 1 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - optional INT16U transitionTime = 3; - optional CHAR_STRING sceneName = 4; - optional ExtensionFieldSet extensionFieldSets[] = 5; - } - - response struct RemoveSceneResponse = 2 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - } - - response struct RemoveAllScenesResponse = 3 { - status status = 0; - group_id groupID = 1; - } - - response struct StoreSceneResponse = 4 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - } - - response struct GetSceneMembershipResponse = 6 { - status status = 0; - nullable INT8U capacity = 1; - group_id groupID = 2; - optional INT8U sceneList[] = 3; - } - - fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0; - fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1; - fabric command access(invoke: manage) RemoveScene(RemoveSceneRequest): RemoveSceneResponse = 2; - fabric command access(invoke: manage) RemoveAllScenes(RemoveAllScenesRequest): RemoveAllScenesResponse = 3; - fabric command access(invoke: manage) StoreScene(StoreSceneRequest): StoreSceneResponse = 4; - fabric command RecallScene(RecallSceneRequest): DefaultSuccess = 5; - fabric command GetSceneMembership(GetSceneMembershipRequest): GetSceneMembershipResponse = 6; -} - -/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ -server cluster Descriptor = 29 { struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -2078,16 +1965,6 @@ endpoint 1 { ram attribute clusterRevision default = 4; } - server cluster Scenes { - callback attribute sceneCount default = 0x00; - ram attribute currentScene default = 0x00; - ram attribute currentGroup default = 0x0000; - ram attribute sceneValid default = 0x00; - ram attribute nameSupport; - ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; - } - server cluster Descriptor { callback attribute deviceTypeList; callback attribute serverList; diff --git a/examples/thermostat/thermostat-common/thermostat.zap b/examples/thermostat/thermostat-common/thermostat.zap index 8931cd7a4d07c9..1e524bf4278fca 100644 --- a/examples/thermostat/thermostat-common/thermostat.zap +++ b/examples/thermostat/thermostat-common/thermostat.zap @@ -33,7 +33,33 @@ ], "endpointTypes": [ { + "id": 1, "name": "MA-rootdevice", + "deviceTypeRef": { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + }, + "deviceTypes": [ + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 2 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], "deviceTypeName": "MA-rootdevice", "deviceTypeCode": 22, "deviceTypeProfileId": 259, @@ -7629,7 +7655,33 @@ ] }, { + "id": 2, "name": "MA-thermostat", + "deviceTypeRef": { + "id": 34, + "code": 769, + "profileId": 259, + "label": "MA-thermostat", + "name": "MA-thermostat" + }, + "deviceTypes": [ + { + "id": 34, + "code": 769, + "profileId": 259, + "label": "MA-thermostat", + "name": "MA-thermostat" + } + ], + "deviceTypeRefs": [ + 34 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 769 + ], "deviceTypeName": "MA-thermostat", "deviceTypeCode": 769, "deviceTypeProfileId": 259, @@ -8010,7 +8062,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 1, + "enabled": 0, "commands": [ { "name": "AddSceneResponse", @@ -14769,18 +14821,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-thermostat", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 769 + "networkId": 0 } ], "log": [] diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter index 4500b8cdd9cdef..3d58227417d70a 100644 --- a/examples/tv-app/tv-common/tv-app.matter +++ b/examples/tv-app/tv-common/tv-app.matter @@ -188,6 +188,10 @@ server cluster LevelControl = 8 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/tv-casting-app/linux/BUILD.gn b/examples/tv-casting-app/linux/BUILD.gn index 07d9af1a71c721..113c6f56219f7d 100644 --- a/examples/tv-casting-app/linux/BUILD.gn +++ b/examples/tv-casting-app/linux/BUILD.gn @@ -19,13 +19,24 @@ import("${chip_root}/src/lib/lib.gni") assert(chip_build_tools) +declare_args() { + chip_casting_simplified = false +} + executable("chip-tv-casting-app") { - sources = [ - "${chip_root}/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h", - "CastingUtils.cpp", - "CastingUtils.h", - "main.cpp", - ] + if (chip_casting_simplified) { + sources = [ + "${chip_root}/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h", + "simple-app.cpp", + ] + } else { + sources = [ + "${chip_root}/examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h", + "CastingUtils.cpp", + "CastingUtils.h", + "main.cpp", + ] + } deps = [ "${chip_root}/examples/common/tracing:commandline", diff --git a/examples/tv-casting-app/linux/simple-app.cpp b/examples/tv-casting-app/linux/simple-app.cpp new file mode 100644 index 00000000000000..26f9e2825ff7d9 --- /dev/null +++ b/examples/tv-casting-app/linux/simple-app.cpp @@ -0,0 +1,154 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/Types.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace matter::casting::core; +using namespace matter::casting::support; + +// To hold SPAKE2+ verifier, discriminator, passcode +LinuxCommissionableDataProvider gCommissionableDataProvider; + +CHIP_ERROR InitCommissionableDataProvider(LinuxCommissionableDataProvider & provider, LinuxDeviceOptions & options) +{ + chip::Optional setupPasscode; + + if (options.payload.setUpPINCode != 0) + { + setupPasscode.SetValue(options.payload.setUpPINCode); + } + else if (!options.spake2pVerifier.HasValue()) + { + uint32_t defaultTestPasscode = 0; + chip::DeviceLayer::TestOnlyCommissionableDataProvider TestOnlyCommissionableDataProvider; + VerifyOrDie(TestOnlyCommissionableDataProvider.GetSetupPasscode(defaultTestPasscode) == CHIP_NO_ERROR); + + ChipLogError(Support, + "*** WARNING: Using temporary passcode %u due to no neither --passcode or --spake2p-verifier-base64 " + "given on command line. This is temporary and will be deprecated. Please update your scripts " + "to explicitly configure onboarding credentials. ***", + static_cast(defaultTestPasscode)); + setupPasscode.SetValue(defaultTestPasscode); + options.payload.setUpPINCode = defaultTestPasscode; + } + else + { + // Passcode is 0, so will be ignored, and verifier will take over. Onboarding payload + // printed for debug will be invalid, but if the onboarding payload had been given + // properly to the commissioner later, PASE will succeed. + } + + // Default to minimum PBKDF iterations + uint32_t spake2pIterationCount = chip::Crypto::kSpake2p_Min_PBKDF_Iterations; + if (options.spake2pIterations != 0) + { + spake2pIterationCount = options.spake2pIterations; + } + ChipLogError(Support, "PASE PBKDF iterations set to %u", static_cast(spake2pIterationCount)); + + return provider.Init(options.spake2pVerifier, options.spake2pSalt, spake2pIterationCount, setupPasscode, + options.payload.discriminator.GetLongValue()); +} + +/** + * @brief Provides the unique ID that is used by the SDK to generate the Rotating Device ID. + */ +class RotatingDeviceIdUniqueIdProvider : public MutableByteSpanDataProvider +{ +private: + chip::MutableByteSpan rotatingDeviceIdUniqueIdSpan; + uint8_t rotatingDeviceIdUniqueId[chip::DeviceLayer::ConfigurationManager::kRotatingDeviceIDUniqueIDLength]; + +public: + RotatingDeviceIdUniqueIdProvider() + { + // generate a random Unique ID for this example app + for (size_t i = 0; i < sizeof(rotatingDeviceIdUniqueId); i++) + { + rotatingDeviceIdUniqueId[i] = chip::Crypto::GetRandU8(); + } + rotatingDeviceIdUniqueIdSpan = chip::MutableByteSpan(rotatingDeviceIdUniqueId); + } + + chip::MutableByteSpan * Get() { return &rotatingDeviceIdUniqueIdSpan; } +}; + +/** + * @brief Provides the ServerInitParams required to start the CastingApp, which in turn starts the Matter server + */ +class CommonCaseDeviceServerInitParamsProvider : public ServerInitParamsProvider +{ +private: + // For this example, we'll use CommonCaseDeviceServerInitParams + chip::CommonCaseDeviceServerInitParams serverInitParams; + +public: + chip::ServerInitParams * Get() + { + CHIP_ERROR err = serverInitParams.InitializeStaticResourcesBeforeServerInit(); + VerifyOrReturnValue(err == CHIP_NO_ERROR, nullptr, + ChipLogError(AppServer, "Initialization of ServerInitParams failed %" CHIP_ERROR_FORMAT, err.Format())); + return &serverInitParams; + } +}; + +int main(int argc, char * argv[]) +{ + // Create AppParameters that need to be passed to CastingApp.Initialize() + AppParameters appParameters; + RotatingDeviceIdUniqueIdProvider rotatingDeviceIdUniqueIdProvider; + CommonCaseDeviceServerInitParamsProvider serverInitParamsProvider; + CHIP_ERROR err = CHIP_NO_ERROR; + err = InitCommissionableDataProvider(gCommissionableDataProvider, LinuxDeviceOptions::GetInstance()); + VerifyOrReturnValue( + err == CHIP_NO_ERROR, 0, + ChipLogError(AppServer, "Initialization of CommissionableDataProvider failed %" CHIP_ERROR_FORMAT, err.Format())); + err = appParameters.Create(&rotatingDeviceIdUniqueIdProvider, &gCommissionableDataProvider, + chip::Credentials::Examples::GetExampleDACProvider(), + GetDefaultDACVerifier(chip::Credentials::GetTestAttestationTrustStore()), &serverInitParamsProvider); + VerifyOrReturnValue(err == CHIP_NO_ERROR, 0, + ChipLogError(AppServer, "Creation of AppParameters failed %" CHIP_ERROR_FORMAT, err.Format())); + + // Initialize the CastingApp + err = CastingApp::GetInstance()->Initialize(appParameters); + VerifyOrReturnValue(err == CHIP_NO_ERROR, 0, + ChipLogError(AppServer, "Initialization of CastingApp failed %" CHIP_ERROR_FORMAT, err.Format())); + + // Initialize Linux KeyValueStoreMgr + chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(CHIP_CONFIG_KVS_PATH); + + // Start the CastingApp + err = CastingApp::GetInstance()->Start(); + VerifyOrReturnValue(err == CHIP_NO_ERROR, 0, + ChipLogError(AppServer, "CastingApp::Start failed %" CHIP_ERROR_FORMAT, err.Format())); + + chip::DeviceLayer::PlatformMgr().RunEventLoop(); + + return 0; +} diff --git a/examples/tv-casting-app/tv-casting-common/BUILD.gn b/examples/tv-casting-app/tv-casting-common/BUILD.gn index 65a4c36e90b44c..8292d8366b06da 100644 --- a/examples/tv-casting-app/tv-casting-common/BUILD.gn +++ b/examples/tv-casting-app/tv-casting-common/BUILD.gn @@ -85,6 +85,15 @@ chip_data_model("tv-casting-common") { "src/TargetVideoPlayerInfo.cpp", ] + # Add simplified casting API files here + sources += [ + "core/CastingApp.cpp", + "core/CastingApp.h", + "core/Types.h", + "support/AppParameters.h", + "support/DataProvider.h", + ] + deps = [ "${chip_root}/examples/common/tracing:commandline", "${chip_root}/src/app/tests/suites/commands/interaction_model", diff --git a/examples/tv-casting-app/tv-casting-common/core/CastingApp.cpp b/examples/tv-casting-app/tv-casting-common/core/CastingApp.cpp new file mode 100644 index 00000000000000..cc21c29c9b5f30 --- /dev/null +++ b/examples/tv-casting-app/tv-casting-common/core/CastingApp.cpp @@ -0,0 +1,128 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CastingApp.h" + +#include +#include +#include +#include + +namespace matter { +namespace casting { +namespace core { + +using namespace matter::casting::support; + +CastingApp * CastingApp::_castingApp = nullptr; + +CastingApp::CastingApp() {} + +CastingApp * CastingApp::GetInstance() +{ + if (_castingApp == nullptr) + { + _castingApp = new CastingApp(); + } + return _castingApp; +} + +CHIP_ERROR CastingApp::Initialize(const AppParameters & appParameters) +{ + VerifyOrReturnError(mState == UNINITIALIZED, CHIP_ERROR_INCORRECT_STATE); + VerifyOrReturnError(appParameters.GetCommissionableDataProvider() != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(appParameters.GetDeviceAttestationCredentialsProvider() != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(appParameters.GetServerInitParamsProvider() != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + + ReturnErrorOnFailure(chip::Platform::MemoryInit()); + ReturnErrorOnFailure(chip::DeviceLayer::PlatformMgr().InitChipStack()); + + mAppParameters = &appParameters; + + chip::DeviceLayer::SetCommissionableDataProvider(appParameters.GetCommissionableDataProvider()); + chip::Credentials::SetDeviceAttestationCredentialsProvider(appParameters.GetDeviceAttestationCredentialsProvider()); + chip::Credentials::SetDeviceAttestationVerifier(appParameters.GetDeviceAttestationVerifier()); + +#if CHIP_ENABLE_ROTATING_DEVICE_ID + MutableByteSpanDataProvider * uniqueIdProvider = appParameters.GetRotatingDeviceIdUniqueIdProvider(); + if (uniqueIdProvider != nullptr && uniqueIdProvider->Get() != nullptr) + { + ReturnErrorOnFailure(chip::DeviceLayer::ConfigurationMgr().SetRotatingDeviceIdUniqueId(*uniqueIdProvider->Get())); + } +#endif // CHIP_ENABLE_ROTATING_DEVICE_ID + + mState = NOT_RUNNING; // initialization done, set state to NOT_RUNNING + + return CHIP_NO_ERROR; +} + +CHIP_ERROR CastingApp::Start() +{ + VerifyOrReturnError(mState == NOT_RUNNING, CHIP_ERROR_INCORRECT_STATE); + + // start Matter server + chip::ServerInitParams * serverInitParams = mAppParameters->GetServerInitParamsProvider()->Get(); + VerifyOrReturnError(serverInitParams != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorOnFailure(chip::Server::GetInstance().Init(*serverInitParams)); + + // perform post server startup registrations + ReturnErrorOnFailure(PostStartRegistrations()); + + return CHIP_NO_ERROR; +} + +CHIP_ERROR CastingApp::PostStartRegistrations() +{ + VerifyOrReturnError(mState == NOT_RUNNING, CHIP_ERROR_INCORRECT_STATE); + auto & server = chip::Server::GetInstance(); + + // TODO: Set CastingApp as AppDelegate + // &server.GetCommissioningWindowManager().SetAppDelegate(??); + + // Initialize binding handlers + chip::BindingManager::GetInstance().Init( + { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() }); + + // TODO: Set FabricDelegate + // chip::Server::GetInstance().GetFabricTable().AddFabricDelegate(&mPersistenceManager); + + // TODO: Add DeviceEvent Handler + // ReturnErrorOnFailure(DeviceLayer::PlatformMgrImpl().AddEventHandler(DeviceEventCallback, 0)); + + mState = RUNNING; // CastingApp started successfully, set state to RUNNING + return CHIP_NO_ERROR; +} + +CHIP_ERROR CastingApp::Stop() +{ + VerifyOrReturnError(mState == RUNNING, CHIP_ERROR_INCORRECT_STATE); + + // TODO: add logic to capture CastingPlayers that we are currently connected to, so we can automatically reconnect with them on + // Start() again + + // Shutdown the Matter server + chip::Server::GetInstance().Shutdown(); + + mState = NOT_RUNNING; // CastingApp started successfully, set state to RUNNING + + return CHIP_ERROR_NOT_IMPLEMENTED; +} + +}; // namespace core +}; // namespace casting +}; // namespace matter diff --git a/examples/tv-casting-app/tv-casting-common/core/CastingApp.h b/examples/tv-casting-app/tv-casting-common/core/CastingApp.h new file mode 100644 index 00000000000000..1f122e1153c3ab --- /dev/null +++ b/examples/tv-casting-app/tv-casting-common/core/CastingApp.h @@ -0,0 +1,91 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "support/AppParameters.h" + +namespace matter { +namespace casting { +namespace core { + +/** + * @brief Represents CastingApp state. + * + */ +enum CastingAppState +{ + UNINITIALIZED, // Before Initialize() success + NOT_RUNNING, // After Initialize() success before Start()ing, OR After stop() success + RUNNING, // After Start() success +}; + +/** + * @brief CastingApp represents an app that can cast content to a Casting Player. + * This class is a singleton. + */ +class CastingApp +{ +public: + static CastingApp * GetInstance(); + + /** + * @brief Initializes the CastingApp with appParameters + * + * @param appParameters + * @return CHIP_ERROR + */ + CHIP_ERROR Initialize(const matter::casting::support::AppParameters & appParameters); + + /** + * @brief Starts the Matter server that the CastingApp runs on and calls PostStartRegistrations() to finish starting up the + * CastingApp. + * + * @return CHIP_ERROR - CHIP_NO_ERROR if Matter server started successfully, specific error code otherwise. + */ + CHIP_ERROR Start(); + + /** + * @brief Perform post Matter server startup registrations + * + * @return CHIP_ERROR - CHIP_NO_ERROR if all registrations succeeded, specific error code otherwise + */ + CHIP_ERROR PostStartRegistrations(); + + /** + * @brief Stops the Matter server that the CastingApp runs on + * + * @return CHIP_ERROR - CHIP_NO_ERROR if Matter server stopped successfully, specific error code otherwise. + */ + CHIP_ERROR Stop(); + +private: + CastingApp(); + static CastingApp * _castingApp; + + CastingApp(CastingApp & other) = delete; + void operator=(const CastingApp &) = delete; + + const matter::casting::support::AppParameters * mAppParameters; + + CastingAppState mState = UNINITIALIZED; +}; + +}; // namespace core +}; // namespace casting +}; // namespace matter diff --git a/examples/tv-casting-app/tv-casting-common/core/Types.h b/examples/tv-casting-app/tv-casting-common/core/Types.h new file mode 100644 index 00000000000000..a5dce75d60d181 --- /dev/null +++ b/examples/tv-casting-app/tv-casting-common/core/Types.h @@ -0,0 +1,55 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "core/CastingApp.h" +#include "support/AppParameters.h" + +#include +#include + +namespace matter { +namespace casting { + +namespace memory { + +template +using Weak = std::weak_ptr; + +template +using Strong = std::shared_ptr; + +} // namespace memory + +namespace app { + +class CastingApp; + +}; + +namespace support { + +class AppParameters; +class ByteSpanDataProvider; +class ServerInitParamsProvider; + +} // namespace support + +}; // namespace casting +}; // namespace matter diff --git a/examples/tv-casting-app/tv-casting-common/support/AppParameters.h b/examples/tv-casting-app/tv-casting-common/support/AppParameters.h new file mode 100644 index 00000000000000..9539a2919a81f5 --- /dev/null +++ b/examples/tv-casting-app/tv-casting-common/support/AppParameters.h @@ -0,0 +1,107 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "DataProvider.h" +#include "core/Types.h" + +#include +#include +#include +#include + +namespace matter { +namespace casting { +namespace support { + +/** + * @brief Parameters required to Initialize() the CastingApp + */ +class AppParameters +{ +public: + AppParameters() {} + CHIP_ERROR Create(MutableByteSpanDataProvider * rotatingDeviceIdUniqueIdProvider, + chip::DeviceLayer::CommissionableDataProvider * commissionableDataProvider, + chip::Credentials::DeviceAttestationCredentialsProvider * deviceAttestationCredentialsProvider, + chip::Credentials::DeviceAttestationVerifier * deviceAttestationVerifier, + ServerInitParamsProvider * serverInitParamsProvider) + { + VerifyOrReturnError(commissionableDataProvider != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(deviceAttestationCredentialsProvider != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(deviceAttestationVerifier != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(serverInitParamsProvider != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + + mRotatingDeviceIdUniqueIdProvider = rotatingDeviceIdUniqueIdProvider; + mCommissionableDataProvider = commissionableDataProvider; + mDeviceAttestationCredentialsProvider = deviceAttestationCredentialsProvider; + mDeviceAttestationVerifier = deviceAttestationVerifier; + mServerInitParamsProvider = serverInitParamsProvider; + + return CHIP_NO_ERROR; + } + + MutableByteSpanDataProvider * GetRotatingDeviceIdUniqueIdProvider() const { return mRotatingDeviceIdUniqueIdProvider; } + + chip::DeviceLayer::CommissionableDataProvider * GetCommissionableDataProvider() const { return mCommissionableDataProvider; } + + chip::Credentials::DeviceAttestationCredentialsProvider * GetDeviceAttestationCredentialsProvider() const + { + return mDeviceAttestationCredentialsProvider; + } + + chip::Credentials::DeviceAttestationVerifier * GetDeviceAttestationVerifier() const { return mDeviceAttestationVerifier; } + + ServerInitParamsProvider * GetServerInitParamsProvider() const { return mServerInitParamsProvider; } + +private: + /** + * @brief Provides UniqueId used to generate the RotatingDeviceId advertised by the CastingApp + * + */ + MutableByteSpanDataProvider * mRotatingDeviceIdUniqueIdProvider; + + /** + * @brief Provides CommissionableData (such as setupPasscode, discriminator, etc) used to get the CastingApp commissioned + * + */ + chip::DeviceLayer::CommissionableDataProvider * mCommissionableDataProvider; + + /** + * @brief Provides DeviceAttestationCredentials of the CastingApp during commissioning + * + */ + chip::Credentials::DeviceAttestationCredentialsProvider * mDeviceAttestationCredentialsProvider; + + /** + * @brief DeviceAttestationVerifier used by the CastingApp during commissioning + * + */ + chip::Credentials::DeviceAttestationVerifier * mDeviceAttestationVerifier; + + /** + * @brief Provides params used to initialize the Matter server run by the CastingApp + * + */ + ServerInitParamsProvider * mServerInitParamsProvider; +}; + +}; // namespace support +}; // namespace casting +}; // namespace matter diff --git a/examples/tv-casting-app/tv-casting-common/support/DataProvider.h b/examples/tv-casting-app/tv-casting-common/support/DataProvider.h new file mode 100644 index 00000000000000..811acd1b1a1512 --- /dev/null +++ b/examples/tv-casting-app/tv-casting-common/support/DataProvider.h @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "core/Types.h" + +#include +#include +#include + +namespace matter { +namespace casting { +namespace support { + +/** + * @brief Generic DataProvider template that allows the implementer to provide a pointer to some data with type T + * + * @tparam T type of the data to be provided + */ +template +class DataProvider +{ +public: + virtual ~DataProvider(){}; + virtual T * Get() { return nullptr; }; +}; + +class MutableByteSpanDataProvider : public DataProvider +{ +public: + virtual chip::MutableByteSpan * Get() { return nullptr; }; +}; + +class ServerInitParamsProvider : public DataProvider +{ +public: + virtual chip::ServerInitParams * Get() { return nullptr; }; +}; + +}; // namespace support +}; // namespace casting +}; // namespace matter 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 d85942d769a352..cd0c6116e9f907 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 @@ -349,6 +349,10 @@ server cluster BinaryInputBasic = 15 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ client cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -376,6 +380,10 @@ client cluster Descriptor = 29 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/examples/virtual-device-app/android/BUILD.gn b/examples/virtual-device-app/android/BUILD.gn index ffa9a9fe6e3520..61b29e9d8453a1 100644 --- a/examples/virtual-device-app/android/BUILD.gn +++ b/examples/virtual-device-app/android/BUILD.gn @@ -27,6 +27,8 @@ shared_library("jni") { "java/AppImpl.cpp", "java/AppImpl.h", "java/ClusterChangeAttribute.cpp", + "java/ColorControlManager.cpp", + "java/ColorControlManager.h", "java/DeviceApp-JNI.cpp", "java/JNIDACProvider.cpp", "java/JNIDACProvider.h", @@ -65,6 +67,7 @@ android_library("java") { sources = [ "java/src/com/matter/virtual/device/app/Clusters.java", + "java/src/com/matter/virtual/device/app/ColorControlManager.java", "java/src/com/matter/virtual/device/app/DACProvider.java", "java/src/com/matter/virtual/device/app/DeviceApp.java", "java/src/com/matter/virtual/device/app/DeviceAppCallback.java", diff --git a/examples/virtual-device-app/android/java/ClusterChangeAttribute.cpp b/examples/virtual-device-app/android/java/ClusterChangeAttribute.cpp index be16005ff089a1..721f4682d1c566 100644 --- a/examples/virtual-device-app/android/java/ClusterChangeAttribute.cpp +++ b/examples/virtual-device-app/android/java/ClusterChangeAttribute.cpp @@ -16,6 +16,7 @@ * limitations under the License. */ +#include "ColorControlManager.h" #include "OnOffManager.h" #include #include @@ -38,6 +39,56 @@ static void OnOffClusterAttributeChangeCallback(const app::ConcreteAttributePath } } +static void ColorControlClusterAttributeChangeCallback(const app::ConcreteAttributePath & attributePath, uint16_t size, + uint8_t * value) +{ + if (attributePath.mAttributeId == ColorControl::Attributes::CurrentHue::Id) + { + uint8_t currentHue = static_cast(*value); + + ChipLogProgress(Zcl, "Received CurrentHue command endpoint %d value = %d", static_cast(attributePath.mEndpointId), + currentHue); + + ColorControlManager().PostCurrentHueChanged(attributePath.mEndpointId, currentHue); + } + else if (attributePath.mAttributeId == ColorControl::Attributes::CurrentSaturation::Id) + { + uint8_t currentSaturation = static_cast(*value); + + ChipLogProgress(Zcl, "Received CurrentSaturation command endpoint %d value = %d", + static_cast(attributePath.mEndpointId), currentSaturation); + + ColorControlManager().PostCurrentSaturationChanged(attributePath.mEndpointId, currentSaturation); + } + else if (attributePath.mAttributeId == ColorControl::Attributes::ColorTemperatureMireds::Id) + { + int16_t colorTemperatureMireds = static_cast(*value); + + ChipLogProgress(Zcl, "Received ColorTemperatureMireds command endpoint %d value = %d", + static_cast(attributePath.mEndpointId), colorTemperatureMireds); + + ColorControlManager().PostColorTemperatureChanged(attributePath.mEndpointId, colorTemperatureMireds); + } + else if (attributePath.mAttributeId == ColorControl::Attributes::ColorMode::Id) + { + uint8_t colorMode = static_cast(*value); + + ChipLogProgress(Zcl, "Received ColorMode command endpoint %d value = %d", static_cast(attributePath.mEndpointId), + colorMode); + + ColorControlManager().PostColorModeChanged(attributePath.mEndpointId, colorMode); + } + else if (attributePath.mAttributeId == ColorControl::Attributes::EnhancedColorMode::Id) + { + uint8_t enhancedColorMode = static_cast(*value); + + ChipLogProgress(Zcl, "Received EnhancedColorMode command endpoint %d value = %d", + static_cast(attributePath.mEndpointId), enhancedColorMode); + + ColorControlManager().PostEnhancedColorModeChanged(attributePath.mEndpointId, enhancedColorMode); + } +} + void MatterPostAttributeChangeCallback(const app::ConcreteAttributePath & attributePath, uint8_t type, uint16_t size, uint8_t * value) { @@ -49,6 +100,9 @@ void MatterPostAttributeChangeCallback(const app::ConcreteAttributePath & attrib case OnOff::Id: OnOffClusterAttributeChangeCallback(attributePath, size, value); break; + case ColorControl::Id: + ColorControlClusterAttributeChangeCallback(attributePath, size, value); + break; default: break; diff --git a/examples/virtual-device-app/android/java/ColorControlManager.cpp b/examples/virtual-device-app/android/java/ColorControlManager.cpp new file mode 100644 index 00000000000000..0386f96272f66e --- /dev/null +++ b/examples/virtual-device-app/android/java/ColorControlManager.cpp @@ -0,0 +1,269 @@ +/** + * + * Copyright (c) 2023 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "ColorControlManager.h" +#include "DeviceApp-JNI.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace chip; + +static constexpr size_t kColorControlManagerTableSize = EMBER_AF_COLOR_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT; + +namespace { + +ColorControlManager * gColorControlManagerTable[kColorControlManagerTableSize] = { nullptr }; +static_assert(kColorControlManagerTableSize <= kEmberInvalidEndpointIndex, "gColorControlManagerTable table size error"); + +} // namespace + +void emberAfColorControlClusterInitCallback(EndpointId endpoint) +{ + ChipLogProgress(Zcl, "Device App::ColorControl::PostClusterInit"); + DeviceAppJNIMgr().PostClusterInit(chip::app::Clusters::ColorControl::Id, endpoint); +} + +void ColorControlManager::NewManager(jint endpoint, jobject manager) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::NewManager"); + uint16_t ep = emberAfGetClusterServerEndpointIndex(static_cast(endpoint), app::Clusters::ColorControl::Id, + EMBER_AF_COLOR_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT); + VerifyOrReturn(ep < kColorControlManagerTableSize, + ChipLogError(Zcl, "Device App::ColorControl::NewManager: endpoint %d not found", endpoint)); + + VerifyOrReturn(gColorControlManagerTable[ep] == nullptr, + ChipLogError(Zcl, "ST Device App::ColorControl::NewManager: endpoint %d already has a manager", endpoint)); + ColorControlManager * mgr = new ColorControlManager(); + CHIP_ERROR err = mgr->InitializeWithObjects(manager); + if (err != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "ST Device App::ColorControl::NewManager: failed to initialize manager for endpoint %d", endpoint); + delete mgr; + } + else + { + gColorControlManagerTable[ep] = mgr; + } +} + +static ColorControlManager * GetColorControlManager(EndpointId endpoint) +{ + uint16_t ep = emberAfGetClusterServerEndpointIndex(endpoint, app::Clusters::ColorControl::Id, + EMBER_AF_COLOR_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT); + return (ep >= kColorControlManagerTableSize ? nullptr : gColorControlManagerTable[ep]); +} + +void ColorControlManager::PostCurrentHueChanged(chip::EndpointId endpoint, int value) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::PostCurrentHueChanged"); + ColorControlManager * mgr = GetColorControlManager(endpoint); + VerifyOrReturn(mgr != nullptr, ChipLogError(Zcl, "ColorControlManager null")); + + mgr->HandleCurrentHueChanged(value); +} + +void ColorControlManager::PostCurrentSaturationChanged(chip::EndpointId endpoint, int value) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::PostCurrentSaturationChanged"); + ColorControlManager * mgr = GetColorControlManager(endpoint); + VerifyOrReturn(mgr != nullptr, ChipLogError(Zcl, "ColorControlManager null")); + + mgr->HandleCurrentSaturationChanged(value); +} + +void ColorControlManager::PostColorTemperatureChanged(chip::EndpointId endpoint, int value) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::PostColorTemperatureChanged"); + ColorControlManager * mgr = GetColorControlManager(endpoint); + VerifyOrReturn(mgr != nullptr, ChipLogError(Zcl, "ColorControlManager null")); + + mgr->HandleColorTemperatureChanged(value); +} + +void ColorControlManager::PostColorModeChanged(chip::EndpointId endpoint, int value) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::PostColorModeChanged"); + ColorControlManager * mgr = GetColorControlManager(endpoint); + VerifyOrReturn(mgr != nullptr, ChipLogError(Zcl, "ColorControlManager null")); + + mgr->HandleColorModeChanged(value); +} + +void ColorControlManager::PostEnhancedColorModeChanged(chip::EndpointId endpoint, int value) +{ + ChipLogProgress(Zcl, "Device App: ColorControlManager::PostEnhancedColorModeChanged"); + ColorControlManager * mgr = GetColorControlManager(endpoint); + VerifyOrReturn(mgr != nullptr, ChipLogError(Zcl, "ColorControlManager null")); + + mgr->HandleEnhancedColorModeChanged(value); +} + +CHIP_ERROR ColorControlManager::InitializeWithObjects(jobject managerObject) +{ + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturnLogError(env != nullptr, CHIP_ERROR_INCORRECT_STATE); + + mColorControlManagerObject = env->NewGlobalRef(managerObject); + VerifyOrReturnLogError(mColorControlManagerObject != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + + jclass ColorControlManagerClass = env->GetObjectClass(managerObject); + VerifyOrReturnLogError(ColorControlManagerClass != nullptr, CHIP_ERROR_INVALID_ARGUMENT); + + mHandleCurrentHueChangedMethod = env->GetMethodID(ColorControlManagerClass, "HandleCurrentHueChanged", "(I)V"); + if (mHandleCurrentHueChangedMethod == nullptr) + { + ChipLogError(Zcl, "Failed to access ColorControlManager 'HandleCurrentHueChanged' method"); + env->ExceptionClear(); + return CHIP_ERROR_INVALID_ARGUMENT; + } + + mHandleCurrentSaturationChangedMethod = env->GetMethodID(ColorControlManagerClass, "HandleCurrentSaturationChanged", "(I)V"); + if (mHandleCurrentSaturationChangedMethod == nullptr) + { + ChipLogError(Zcl, "Failed to access ColorControlManager 'HandleCurrentSaturationChanged' method"); + env->ExceptionClear(); + return CHIP_ERROR_INVALID_ARGUMENT; + } + + mHandleColorTemperatureChangedMethod = env->GetMethodID(ColorControlManagerClass, "HandleColorTemperatureChanged", "(I)V"); + if (mHandleColorTemperatureChangedMethod == nullptr) + { + ChipLogError(Zcl, "Failed to access ColorControlManager 'HandleColorTemperatureChanged' method"); + env->ExceptionClear(); + return CHIP_ERROR_INVALID_ARGUMENT; + } + + mHandleColorModeChangedMethod = env->GetMethodID(ColorControlManagerClass, "HandleColorModeChanged", "(I)V"); + if (mHandleColorModeChangedMethod == nullptr) + { + ChipLogError(Zcl, "Failed to access ColorControlManager 'HandleColorModeChanged' method"); + env->ExceptionClear(); + return CHIP_ERROR_INVALID_ARGUMENT; + } + + mHandleEnhancedColorModeChangedMethod = env->GetMethodID(ColorControlManagerClass, "HandleEnhancedColorModeChanged", "(I)V"); + if (mHandleEnhancedColorModeChangedMethod == nullptr) + { + ChipLogError(Zcl, "Failed to access ColorControlManager 'HandleEnhancedColorModeChanged' method"); + env->ExceptionClear(); + return CHIP_ERROR_INVALID_ARGUMENT; + } + + return CHIP_NO_ERROR; +} + +void ColorControlManager::HandleCurrentHueChanged(int value) +{ + ChipLogProgress(Zcl, "ColorControlManager::HandleCurrentHueChanged"); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturn(env != NULL, ChipLogProgress(Zcl, "env null")); + VerifyOrReturn(mColorControlManagerObject != nullptr, ChipLogProgress(Zcl, "mColorControlManagerObject null")); + VerifyOrReturn(mHandleCurrentHueChangedMethod != nullptr, ChipLogProgress(Zcl, "mHandleCurrentHueChangedMethod null")); + + env->ExceptionClear(); + env->CallVoidMethod(mColorControlManagerObject, mHandleCurrentHueChangedMethod, value); + if (env->ExceptionCheck()) + { + ChipLogError(AppServer, "Java exception in ColorControlManager::HandleCurrentHueChanged"); + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} + +void ColorControlManager::HandleCurrentSaturationChanged(int value) +{ + ChipLogProgress(Zcl, "ColorControlManager::HandleCurrentSaturationChanged"); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturn(env != NULL, ChipLogProgress(Zcl, "env null")); + VerifyOrReturn(mColorControlManagerObject != nullptr, ChipLogProgress(Zcl, "mColorControlManagerObject null")); + VerifyOrReturn(mHandleCurrentSaturationChangedMethod != nullptr, + ChipLogProgress(Zcl, "mHandleCurrentSaturationChangedMethod null")); + + env->ExceptionClear(); + env->CallVoidMethod(mColorControlManagerObject, mHandleCurrentSaturationChangedMethod, value); + if (env->ExceptionCheck()) + { + ChipLogError(AppServer, "Java exception in ColorControlManager::HandleCurrentSaturationChanged"); + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} + +void ColorControlManager::HandleColorTemperatureChanged(int value) +{ + ChipLogProgress(Zcl, "ColorControlManager::HandleColorTemperatureChanged"); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturn(env != NULL, ChipLogProgress(Zcl, "env null")); + VerifyOrReturn(mColorControlManagerObject != nullptr, ChipLogProgress(Zcl, "mColorControlManagerObject null")); + VerifyOrReturn(mHandleColorTemperatureChangedMethod != nullptr, + ChipLogProgress(Zcl, "mHandleColorTemperatureChangedMethod null")); + + env->ExceptionClear(); + env->CallVoidMethod(mColorControlManagerObject, mHandleColorTemperatureChangedMethod, value); + if (env->ExceptionCheck()) + { + ChipLogError(AppServer, "Java exception in ColorControlManager::mHandleColorTemperatureChanged"); + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} + +void ColorControlManager::HandleColorModeChanged(int value) +{ + ChipLogProgress(Zcl, "ColorControlManager::HandleColorModeChanged"); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturn(env != NULL, ChipLogProgress(Zcl, "env null")); + VerifyOrReturn(mColorControlManagerObject != nullptr, ChipLogProgress(Zcl, "mColorControlManagerObject null")); + VerifyOrReturn(mHandleColorModeChangedMethod != nullptr, ChipLogProgress(Zcl, "mHandleColorModeChangedMethod null")); + + env->ExceptionClear(); + env->CallVoidMethod(mColorControlManagerObject, mHandleColorModeChangedMethod, value); + if (env->ExceptionCheck()) + { + ChipLogError(AppServer, "Java exception in ColorControlManager::HandleColorModeChanged"); + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} + +void ColorControlManager::HandleEnhancedColorModeChanged(int value) +{ + ChipLogProgress(Zcl, "ColorControlManager::HandleEnhancedColorModeChanged"); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + VerifyOrReturn(env != NULL, ChipLogProgress(Zcl, "env null")); + VerifyOrReturn(mColorControlManagerObject != nullptr, ChipLogProgress(Zcl, "mColorControlManagerObject null")); + VerifyOrReturn(mHandleEnhancedColorModeChangedMethod != nullptr, + ChipLogProgress(Zcl, "mHandleEnhancedColorModeChangedMethod null")); + + env->ExceptionClear(); + env->CallVoidMethod(mColorControlManagerObject, mHandleEnhancedColorModeChangedMethod, value); + if (env->ExceptionCheck()) + { + ChipLogError(AppServer, "Java exception in ColorControlManager::HandleEnhancedColorModeChanged"); + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} diff --git a/examples/virtual-device-app/android/java/ColorControlManager.h b/examples/virtual-device-app/android/java/ColorControlManager.h new file mode 100644 index 00000000000000..be1022348c900c --- /dev/null +++ b/examples/virtual-device-app/android/java/ColorControlManager.h @@ -0,0 +1,55 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include +#include + +class ColorControlManager +{ +public: + static void NewManager(jint endpoint, jobject manager); + + static void PostCurrentHueChanged(chip::EndpointId endpoint, int currentHue); + + static void PostCurrentSaturationChanged(chip::EndpointId endpoint, int currentSaturation); + + static void PostColorTemperatureChanged(chip::EndpointId endpoint, int colorTemperature); + + static void PostColorModeChanged(chip::EndpointId endpoint, int colorMode); + + static void PostEnhancedColorModeChanged(chip::EndpointId endpoint, int enhancedColorMode); + + void HandleCurrentHueChanged(int value); + + void HandleCurrentSaturationChanged(int value); + + void HandleColorTemperatureChanged(int value); + + void HandleColorModeChanged(int value); + + void HandleEnhancedColorModeChanged(int value); + +private: + CHIP_ERROR InitializeWithObjects(jobject managerObject); + jobject mColorControlManagerObject = nullptr; + jmethodID mHandleCurrentHueChangedMethod = nullptr; + jmethodID mHandleCurrentSaturationChangedMethod = nullptr; + jmethodID mHandleColorTemperatureChangedMethod = nullptr; + jmethodID mHandleColorModeChangedMethod = nullptr; + jmethodID mHandleEnhancedColorModeChangedMethod = nullptr; +}; diff --git a/examples/virtual-device-app/android/java/DeviceApp-JNI.cpp b/examples/virtual-device-app/android/java/DeviceApp-JNI.cpp index 6e44f1fbd40777..02998bb4c7295d 100644 --- a/examples/virtual-device-app/android/java/DeviceApp-JNI.cpp +++ b/examples/virtual-device-app/android/java/DeviceApp-JNI.cpp @@ -20,6 +20,7 @@ #include "AppImpl.h" #include "JNIDACProvider.h" +#include "ColorControlManager.h" #include "OnOffManager.h" #include "credentials/DeviceAttestationCredsProvider.h" #include @@ -157,3 +158,11 @@ JNI_METHOD(jboolean, setOnOff)(JNIEnv *, jobject, jint endpoint, jboolean value) return DeviceLayer::SystemLayer().ScheduleLambda([endpoint, value] { OnOffManager::SetOnOff(endpoint, value); }) == CHIP_NO_ERROR; } + +/* + * Color Control Manager + */ +JNI_METHOD(void, setColorControlManager)(JNIEnv *, jobject, jint endpoint, jobject manager) +{ + ColorControlManager::NewManager(endpoint, manager); +} diff --git a/examples/virtual-device-app/android/java/src/com/matter/virtual/device/app/ColorControlManager.java b/examples/virtual-device-app/android/java/src/com/matter/virtual/device/app/ColorControlManager.java new file mode 100644 index 00000000000000..725d0b94cc9a22 --- /dev/null +++ b/examples/virtual-device-app/android/java/src/com/matter/virtual/device/app/ColorControlManager.java @@ -0,0 +1,18 @@ +package com.matter.virtual.device.app; + +public interface ColorControlManager { + /* + * Set up the initial value when device is powered on + */ + void initAttributeValue(int endpoint); + + void HandleEnhancedColorModeChanged(int value); + + void HandleColorModeChanged(int value); + + void HandleCurrentHueChanged(int value); + + void HandleCurrentSaturationChanged(int value); + + void HandleColorTemperatureChanged(int value); +} 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 19524943e6df09..2cd61711703b31 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 @@ -152,6 +152,9 @@ server cluster Groups = 4 { server cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -332,6 +335,10 @@ server cluster OnOff = 6 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ server cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -684,6 +691,236 @@ server cluster UnitLocalization = 45 { 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. */ +server cluster PowerSource = 47 { + 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 nullable int8u batPercentRemaining = 12; + 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. */ server cluster GeneralCommissioning = 48 { enum CommissioningErrorEnum : ENUM8 { @@ -1596,6 +1833,698 @@ server cluster UserLabel = 65 { readonly attribute int16u clusterRevision = 65533; } +/** An interface to a generic way to secure a door */ +server cluster DoorLock = 257 { + enum AlarmCodeEnum : ENUM8 { + kLockJammed = 0; + kLockFactoryReset = 1; + kLockRadioPowerCycled = 3; + kWrongCodeEntryLimit = 4; + kFrontEsceutcheonRemoved = 5; + kDoorForcedOpen = 6; + kDoorAjar = 7; + kForcedUser = 8; + } + + enum CredentialRuleEnum : ENUM8 { + kSingle = 0; + kDual = 1; + kTri = 2; + } + + enum CredentialTypeEnum : ENUM8 { + kProgrammingPIN = 0; + kPIN = 1; + kRFID = 2; + kFingerprint = 3; + kFingerVein = 4; + kFace = 5; + } + + enum DataOperationTypeEnum : ENUM8 { + kAdd = 0; + kClear = 1; + kModify = 2; + } + + enum DlLockState : ENUM8 { + kNotFullyLocked = 0; + kLocked = 1; + kUnlocked = 2; + kUnlatched = 3; + } + + enum DlLockType : ENUM8 { + kDeadBolt = 0; + kMagnetic = 1; + kOther = 2; + kMortise = 3; + kRim = 4; + kLatchBolt = 5; + kCylindricalLock = 6; + kTubularLock = 7; + kInterconnectedLock = 8; + kDeadLatch = 9; + kDoorFurniture = 10; + kEurocylinder = 11; + } + + enum DlStatus : ENUM8 { + kSuccess = 0; + kFailure = 1; + kDuplicate = 2; + kOccupied = 3; + kInvalidField = 133; + kResourceExhausted = 137; + kNotFound = 139; + } + + enum DoorLockOperationEventCode : ENUM8 { + kUnknownOrMfgSpecific = 0; + kLock = 1; + kUnlock = 2; + kLockInvalidPinOrId = 3; + kLockInvalidSchedule = 4; + kUnlockInvalidPinOrId = 5; + kUnlockInvalidSchedule = 6; + kOneTouchLock = 7; + kKeyLock = 8; + kKeyUnlock = 9; + kAutoLock = 10; + kScheduleLock = 11; + kScheduleUnlock = 12; + kManualLock = 13; + kManualUnlock = 14; + } + + enum DoorLockProgrammingEventCode : ENUM8 { + kUnknownOrMfgSpecific = 0; + kMasterCodeChanged = 1; + kPinAdded = 2; + kPinDeleted = 3; + kPinChanged = 4; + kIdAdded = 5; + kIdDeleted = 6; + } + + enum DoorLockSetPinOrIdStatus : ENUM8 { + kSuccess = 0; + kGeneralFailure = 1; + kMemoryFull = 2; + kDuplicateCodeError = 3; + } + + enum DoorLockUserStatus : ENUM8 { + kAvailable = 0; + kOccupiedEnabled = 1; + kOccupiedDisabled = 3; + kNotSupported = 255; + } + + enum DoorLockUserType : ENUM8 { + kUnrestricted = 0; + kYearDayScheduleUser = 1; + kWeekDayScheduleUser = 2; + kMasterUser = 3; + kNonAccessUser = 4; + kNotSupported = 255; + } + + enum DoorStateEnum : ENUM8 { + kDoorOpen = 0; + kDoorClosed = 1; + kDoorJammed = 2; + kDoorForcedOpen = 3; + kDoorUnspecifiedError = 4; + kDoorAjar = 5; + } + + enum LockDataTypeEnum : ENUM8 { + kUnspecified = 0; + kProgrammingCode = 1; + kUserIndex = 2; + kWeekDaySchedule = 3; + kYearDaySchedule = 4; + kHolidaySchedule = 5; + kPIN = 6; + kRFID = 7; + kFingerprint = 8; + kFingerVein = 9; + kFace = 10; + } + + enum LockOperationTypeEnum : ENUM8 { + kLock = 0; + kUnlock = 1; + kNonAccessUserEvent = 2; + kForcedUserEvent = 3; + kUnlatch = 4; + } + + enum OperatingModeEnum : ENUM8 { + kNormal = 0; + kVacation = 1; + kPrivacy = 2; + kNoRemoteLockUnlock = 3; + kPassage = 4; + } + + enum OperationErrorEnum : ENUM8 { + kUnspecified = 0; + kInvalidCredential = 1; + kDisabledUserDenied = 2; + kRestricted = 3; + kInsufficientBattery = 4; + } + + enum OperationSourceEnum : ENUM8 { + kUnspecified = 0; + kManual = 1; + kProprietaryRemote = 2; + kKeypad = 3; + kAuto = 4; + kButton = 5; + kSchedule = 6; + kRemote = 7; + kRFID = 8; + kBiometric = 9; + } + + enum UserStatusEnum : ENUM8 { + kAvailable = 0; + kOccupiedEnabled = 1; + kOccupiedDisabled = 3; + } + + enum UserTypeEnum : ENUM8 { + kUnrestrictedUser = 0; + kYearDayScheduleUser = 1; + kWeekDayScheduleUser = 2; + kProgrammingUser = 3; + kNonAccessUser = 4; + kForcedUser = 5; + kDisposableUser = 6; + kExpiringUser = 7; + kScheduleRestrictedUser = 8; + kRemoteOnlyUser = 9; + } + + bitmap DaysMaskMap : BITMAP8 { + kSunday = 0x1; + kMonday = 0x2; + kTuesday = 0x4; + kWednesday = 0x8; + kThursday = 0x10; + kFriday = 0x20; + kSaturday = 0x40; + } + + bitmap DlCredentialRuleMask : BITMAP8 { + kSingle = 0x1; + kDual = 0x2; + kTri = 0x4; + } + + bitmap DlCredentialRulesSupport : BITMAP8 { + kSingle = 0x1; + kDual = 0x2; + kTri = 0x4; + } + + bitmap DlDefaultConfigurationRegister : BITMAP16 { + kEnableLocalProgrammingEnabled = 0x1; + kKeypadInterfaceDefaultAccessEnabled = 0x2; + kRemoteInterfaceDefaultAccessIsEnabled = 0x4; + kSoundEnabled = 0x20; + kAutoRelockTimeSet = 0x40; + kLEDSettingsSet = 0x80; + } + + bitmap DlKeypadOperationEventMask : BITMAP16 { + kUnknown = 0x1; + kLock = 0x2; + kUnlock = 0x4; + kLockInvalidPIN = 0x8; + kLockInvalidSchedule = 0x10; + kUnlockInvalidCode = 0x20; + kUnlockInvalidSchedule = 0x40; + kNonAccessUserOpEvent = 0x80; + } + + bitmap DlKeypadProgrammingEventMask : BITMAP16 { + kUnknown = 0x1; + kProgrammingPINChanged = 0x2; + kPINAdded = 0x4; + kPINCleared = 0x8; + kPINChanged = 0x10; + } + + bitmap DlLocalProgrammingFeatures : BITMAP8 { + kAddUsersCredentialsSchedulesLocally = 0x1; + kModifyUsersCredentialsSchedulesLocally = 0x2; + kClearUsersCredentialsSchedulesLocally = 0x4; + kAdjustLockSettingsLocally = 0x8; + } + + bitmap DlManualOperationEventMask : BITMAP16 { + kUnknown = 0x1; + kThumbturnLock = 0x2; + kThumbturnUnlock = 0x4; + kOneTouchLock = 0x8; + kKeyLock = 0x10; + kKeyUnlock = 0x20; + kAutoLock = 0x40; + kScheduleLock = 0x80; + kScheduleUnlock = 0x100; + kManualLock = 0x200; + kManualUnlock = 0x400; + } + + bitmap DlRFIDOperationEventMask : BITMAP16 { + kUnknown = 0x1; + kLock = 0x2; + kUnlock = 0x4; + kLockInvalidRFID = 0x8; + kLockInvalidSchedule = 0x10; + kUnlockInvalidRFID = 0x20; + kUnlockInvalidSchedule = 0x40; + } + + bitmap DlRFIDProgrammingEventMask : BITMAP16 { + kUnknown = 0x1; + kRFIDCodeAdded = 0x20; + kRFIDCodeCleared = 0x40; + } + + bitmap DlRemoteOperationEventMask : BITMAP16 { + kUnknown = 0x1; + kLock = 0x2; + kUnlock = 0x4; + kLockInvalidCode = 0x8; + kLockInvalidSchedule = 0x10; + kUnlockInvalidCode = 0x20; + kUnlockInvalidSchedule = 0x40; + } + + bitmap DlRemoteProgrammingEventMask : BITMAP16 { + kUnknown = 0x1; + kProgrammingPINChanged = 0x2; + kPINAdded = 0x4; + kPINCleared = 0x8; + kPINChanged = 0x10; + kRFIDCodeAdded = 0x20; + kRFIDCodeCleared = 0x40; + } + + bitmap DlSupportedOperatingModes : BITMAP16 { + kNormal = 0x1; + kVacation = 0x2; + kPrivacy = 0x4; + kNoRemoteLockUnlock = 0x8; + kPassage = 0x10; + } + + bitmap DoorLockDayOfWeek : BITMAP8 { + kSunday = 0x1; + kMonday = 0x2; + kTuesday = 0x4; + kWednesday = 0x8; + kThursday = 0x10; + kFriday = 0x20; + kSaturday = 0x40; + } + + bitmap Feature : BITMAP32 { + kPINCredential = 0x1; + kRFIDCredential = 0x2; + kFingerCredentials = 0x4; + kLogging = 0x8; + kWeekDayAccessSchedules = 0x10; + kDoorPositionSensor = 0x20; + kFaceCredentials = 0x40; + kCredentialsOverTheAirAccess = 0x80; + kUser = 0x100; + kNotification = 0x200; + kYearDayAccessSchedules = 0x400; + kHolidaySchedules = 0x800; + kUnbolt = 0x1000; + } + + struct CredentialStruct { + CredentialTypeEnum credentialType = 0; + int16u credentialIndex = 1; + } + + critical event DoorLockAlarm = 0 { + AlarmCodeEnum alarmCode = 0; + } + + critical event DoorStateChange = 1 { + DoorStateEnum doorState = 0; + } + + critical event LockOperation = 2 { + LockOperationTypeEnum lockOperationType = 0; + OperationSourceEnum operationSource = 1; + nullable INT16U userIndex = 2; + nullable fabric_idx fabricIndex = 3; + nullable NODE_ID sourceNode = 4; + optional nullable CredentialStruct credentials[] = 5; + } + + critical event LockOperationError = 3 { + LockOperationTypeEnum lockOperationType = 0; + OperationSourceEnum operationSource = 1; + OperationErrorEnum operationError = 2; + nullable INT16U userIndex = 3; + nullable fabric_idx fabricIndex = 4; + nullable NODE_ID sourceNode = 5; + optional nullable CredentialStruct credentials[] = 6; + } + + info event LockUserChange = 4 { + LockDataTypeEnum lockDataType = 0; + DataOperationTypeEnum dataOperationType = 1; + OperationSourceEnum operationSource = 2; + nullable INT16U userIndex = 3; + nullable fabric_idx fabricIndex = 4; + nullable NODE_ID sourceNode = 5; + nullable INT16U dataIndex = 6; + } + + readonly attribute nullable DlLockState lockState = 0; + readonly attribute DlLockType lockType = 1; + readonly attribute boolean actuatorEnabled = 2; + readonly attribute nullable DoorStateEnum doorState = 3; + readonly attribute int16u numberOfTotalUsersSupported = 17; + readonly attribute int16u numberOfPINUsersSupported = 18; + readonly attribute int16u numberOfRFIDUsersSupported = 19; + readonly attribute int8u numberOfWeekDaySchedulesSupportedPerUser = 20; + readonly attribute int8u numberOfYearDaySchedulesSupportedPerUser = 21; + readonly attribute int8u maxPINCodeLength = 23; + readonly attribute int8u minPINCodeLength = 24; + readonly attribute int8u maxRFIDCodeLength = 25; + readonly attribute int8u minRFIDCodeLength = 26; + readonly attribute DlCredentialRuleMask credentialRulesSupport = 27; + attribute access(write: manage) char_string<3> language = 33; + attribute access(write: manage) int32u autoRelockTime = 35; + attribute access(write: manage) int8u soundVolume = 36; + attribute access(write: manage) OperatingModeEnum operatingMode = 37; + readonly attribute DlSupportedOperatingModes supportedOperatingModes = 38; + attribute access(write: manage) boolean enableOneTouchLocking = 41; + attribute access(write: manage) boolean enablePrivacyModeButton = 43; + attribute access(write: administer) int8u wrongCodeEntryLimit = 48; + attribute access(write: administer) int8u userCodeTemporaryDisableTime = 49; + attribute access(write: administer) boolean requirePINforRemoteOperation = 51; + 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 LockDoorRequest { + optional OCTET_STRING PINCode = 0; + } + + request struct UnlockDoorRequest { + optional OCTET_STRING PINCode = 0; + } + + request struct UnlockWithTimeoutRequest { + INT16U timeout = 0; + optional OCTET_STRING PINCode = 1; + } + + request struct SetWeekDayScheduleRequest { + INT8U weekDayIndex = 0; + INT16U userIndex = 1; + DaysMaskMap daysMask = 2; + INT8U startHour = 3; + INT8U startMinute = 4; + INT8U endHour = 5; + INT8U endMinute = 6; + } + + request struct GetWeekDayScheduleRequest { + INT8U weekDayIndex = 0; + INT16U userIndex = 1; + } + + request struct ClearWeekDayScheduleRequest { + INT8U weekDayIndex = 0; + INT16U userIndex = 1; + } + + request struct SetYearDayScheduleRequest { + INT8U yearDayIndex = 0; + INT16U userIndex = 1; + epoch_s localStartTime = 2; + epoch_s localEndTime = 3; + } + + request struct GetYearDayScheduleRequest { + INT8U yearDayIndex = 0; + INT16U userIndex = 1; + } + + request struct ClearYearDayScheduleRequest { + INT8U yearDayIndex = 0; + INT16U userIndex = 1; + } + + request struct SetUserRequest { + DataOperationTypeEnum operationType = 0; + INT16U userIndex = 1; + nullable CHAR_STRING userName = 2; + nullable INT32U userUniqueID = 3; + nullable UserStatusEnum userStatus = 4; + nullable UserTypeEnum userType = 5; + nullable CredentialRuleEnum credentialRule = 6; + } + + request struct GetUserRequest { + INT16U userIndex = 0; + } + + request struct ClearUserRequest { + INT16U userIndex = 0; + } + + request struct SetCredentialRequest { + DataOperationTypeEnum operationType = 0; + CredentialStruct credential = 1; + LONG_OCTET_STRING credentialData = 2; + nullable INT16U userIndex = 3; + nullable UserStatusEnum userStatus = 4; + nullable UserTypeEnum userType = 5; + } + + request struct GetCredentialStatusRequest { + CredentialStruct credential = 0; + } + + request struct ClearCredentialRequest { + nullable CredentialStruct credential = 0; + } + + response struct GetWeekDayScheduleResponse = 12 { + INT8U weekDayIndex = 0; + INT16U userIndex = 1; + DlStatus status = 2; + optional DaysMaskMap daysMask = 3; + optional INT8U startHour = 4; + optional INT8U startMinute = 5; + optional INT8U endHour = 6; + optional INT8U endMinute = 7; + } + + response struct GetYearDayScheduleResponse = 15 { + INT8U yearDayIndex = 0; + INT16U userIndex = 1; + DlStatus status = 2; + optional epoch_s localStartTime = 3; + optional epoch_s localEndTime = 4; + } + + response struct GetUserResponse = 28 { + INT16U userIndex = 0; + nullable CHAR_STRING userName = 1; + nullable INT32U userUniqueID = 2; + nullable UserStatusEnum userStatus = 3; + nullable UserTypeEnum userType = 4; + nullable CredentialRuleEnum credentialRule = 5; + nullable CredentialStruct credentials[] = 6; + nullable fabric_idx creatorFabricIndex = 7; + nullable fabric_idx lastModifiedFabricIndex = 8; + nullable INT16U nextUserIndex = 9; + } + + response struct SetCredentialResponse = 35 { + DlStatus status = 0; + nullable INT16U userIndex = 1; + nullable INT16U nextCredentialIndex = 2; + } + + response struct GetCredentialStatusResponse = 37 { + boolean credentialExists = 0; + nullable INT16U userIndex = 1; + nullable fabric_idx creatorFabricIndex = 2; + nullable fabric_idx lastModifiedFabricIndex = 3; + nullable INT16U nextCredentialIndex = 4; + } + + timed command LockDoor(LockDoorRequest): DefaultSuccess = 0; + timed command UnlockDoor(UnlockDoorRequest): DefaultSuccess = 1; + timed command UnlockWithTimeout(UnlockWithTimeoutRequest): DefaultSuccess = 3; + command access(invoke: administer) SetWeekDaySchedule(SetWeekDayScheduleRequest): DefaultSuccess = 11; + command access(invoke: administer) GetWeekDaySchedule(GetWeekDayScheduleRequest): GetWeekDayScheduleResponse = 12; + command access(invoke: administer) ClearWeekDaySchedule(ClearWeekDayScheduleRequest): DefaultSuccess = 13; + command access(invoke: administer) SetYearDaySchedule(SetYearDayScheduleRequest): DefaultSuccess = 14; + command access(invoke: administer) GetYearDaySchedule(GetYearDayScheduleRequest): GetYearDayScheduleResponse = 15; + command access(invoke: administer) ClearYearDaySchedule(ClearYearDayScheduleRequest): DefaultSuccess = 16; + timed command access(invoke: administer) SetUser(SetUserRequest): DefaultSuccess = 26; + command access(invoke: administer) GetUser(GetUserRequest): GetUserResponse = 27; + timed command access(invoke: administer) ClearUser(ClearUserRequest): DefaultSuccess = 29; + timed command access(invoke: administer) SetCredential(SetCredentialRequest): SetCredentialResponse = 34; + command access(invoke: administer) GetCredentialStatus(GetCredentialStatusRequest): GetCredentialStatusResponse = 36; + timed command access(invoke: administer) ClearCredential(ClearCredentialRequest): DefaultSuccess = 38; +} + +/** Attributes and commands for controlling the color properties of a color-capable light. */ +server cluster ColorControl = 768 { + enum ColorLoopAction : ENUM8 { + kDeactivate = 0; + kActivateFromColorLoopStartEnhancedHue = 1; + kActivateFromEnhancedCurrentHue = 2; + } + + enum ColorLoopDirection : ENUM8 { + kDecrementHue = 0; + kIncrementHue = 1; + } + + enum ColorMode : ENUM8 { + kCurrentHueAndCurrentSaturation = 0; + kCurrentXAndCurrentY = 1; + kColorTemperature = 2; + } + + enum HueDirection : ENUM8 { + kShortestDistance = 0; + kLongestDistance = 1; + kUp = 2; + kDown = 3; + } + + enum HueMoveMode : ENUM8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum HueStepMode : ENUM8 { + kUp = 1; + kDown = 3; + } + + enum SaturationMoveMode : ENUM8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum SaturationStepMode : ENUM8 { + kUp = 1; + kDown = 3; + } + + bitmap ColorCapabilities : BITMAP16 { + kHueSaturationSupported = 0x1; + kEnhancedHueSupported = 0x2; + kColorLoopSupported = 0x4; + kXYAttributesSupported = 0x8; + kColorTemperatureSupported = 0x10; + } + + bitmap ColorLoopUpdateFlags : BITMAP8 { + kUpdateAction = 0x1; + kUpdateDirection = 0x2; + kUpdateTime = 0x4; + kUpdateStartHue = 0x8; + } + + bitmap Feature : BITMAP32 { + kHueAndSaturation = 0x1; + kEnhancedHue = 0x2; + kColorLoop = 0x4; + kXY = 0x8; + kColorTemperature = 0x10; + } + + readonly attribute int8u currentHue = 0; + readonly attribute int8u currentSaturation = 1; + readonly attribute int16u remainingTime = 2; + readonly attribute int16u currentX = 3; + readonly attribute int16u currentY = 4; + readonly attribute int16u colorTemperatureMireds = 7; + readonly attribute enum8 colorMode = 8; + attribute bitmap8 options = 15; + readonly attribute nullable int8u numberOfPrimaries = 16; + readonly attribute enum8 enhancedColorMode = 16385; + readonly attribute bitmap16 colorCapabilities = 16394; + 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 MoveToHueRequest { + INT8U hue = 0; + HueDirection direction = 1; + INT16U transitionTime = 2; + BITMAP8 optionsMask = 3; + BITMAP8 optionsOverride = 4; + } + + request struct MoveToSaturationRequest { + INT8U saturation = 0; + INT16U transitionTime = 1; + BITMAP8 optionsMask = 2; + BITMAP8 optionsOverride = 3; + } + + request struct MoveToHueAndSaturationRequest { + INT8U hue = 0; + INT8U saturation = 1; + INT16U transitionTime = 2; + BITMAP8 optionsMask = 3; + BITMAP8 optionsOverride = 4; + } + + request struct MoveToColorRequest { + INT16U colorX = 0; + INT16U colorY = 1; + INT16U transitionTime = 2; + BITMAP8 optionsMask = 3; + BITMAP8 optionsOverride = 4; + } + + request struct MoveToColorTemperatureRequest { + INT16U colorTemperatureMireds = 0; + INT16U transitionTime = 1; + BITMAP8 optionsMask = 2; + BITMAP8 optionsOverride = 3; + } + + command MoveToHue(MoveToHueRequest): DefaultSuccess = 0; + command MoveToSaturation(MoveToSaturationRequest): DefaultSuccess = 3; + command MoveToHueAndSaturation(MoveToHueAndSaturationRequest): DefaultSuccess = 6; + command MoveToColor(MoveToColorRequest): DefaultSuccess = 7; + command MoveToColorTemperature(MoveToColorTemperatureRequest): DefaultSuccess = 10; +} + endpoint 0 { device type ma_rootdevice = 22, version 1; @@ -1933,6 +2862,73 @@ endpoint 1 { ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; } + + server cluster PowerSource { + ram attribute status; + ram attribute order; + ram attribute description; + ram attribute batPercentRemaining default = 0; + callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 2; + } + + server cluster DoorLock { + emits event DoorLockAlarm; + emits event LockOperation; + emits event LockOperationError; + emits event LockUserChange; + ram attribute lockState default = 2; + ram attribute lockType; + ram attribute actuatorEnabled; + ram attribute doorState; + ram attribute numberOfTotalUsersSupported default = 10; + ram attribute numberOfPINUsersSupported default = 10; + ram attribute numberOfRFIDUsersSupported default = 10; + ram attribute numberOfWeekDaySchedulesSupportedPerUser default = 10; + ram attribute numberOfYearDaySchedulesSupportedPerUser default = 10; + ram attribute maxPINCodeLength default = 8; + ram attribute minPINCodeLength default = 6; + ram attribute maxRFIDCodeLength default = 20; + ram attribute minRFIDCodeLength default = 10; + ram attribute credentialRulesSupport default = 1; + ram attribute language default = "en"; + ram attribute autoRelockTime default = 60; + ram attribute soundVolume default = 0; + ram attribute operatingMode default = 0; + ram attribute supportedOperatingModes default = 0xFFF6; + ram attribute enableOneTouchLocking default = 0; + ram attribute enablePrivacyModeButton default = 0; + ram attribute wrongCodeEntryLimit default = 3; + ram attribute userCodeTemporaryDisableTime default = 10; + ram attribute requirePINforRemoteOperation default = 1; + ram attribute featureMap default = 0x193; + ram attribute clusterRevision default = 6; + } + + server cluster ColorControl { + ram attribute currentHue default = 0x00; + ram attribute currentSaturation default = 0x00; + ram attribute remainingTime default = 0x0000; + ram attribute currentX default = 0x616B; + ram attribute currentY default = 0x607D; + ram attribute colorTemperatureMireds default = 0x00FA; + ram attribute colorMode default = 0x01; + ram attribute options default = 0x00; + ram attribute numberOfPrimaries; + ram attribute enhancedColorMode default = 0x01; + ram attribute colorCapabilities default = 0x0000; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 5; + } } diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap index 8b7302ca6b3172..71642a79536bf8 100644 --- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap +++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap @@ -33,7 +33,33 @@ ], "endpointTypes": [ { + "id": 7, "name": "MA-rootdevice", + "deviceTypeRef": { + "id": 55, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + }, + "deviceTypes": [ + { + "id": 55, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 55 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], "deviceTypeName": "MA-rootdevice", "deviceTypeCode": 22, "deviceTypeProfileId": 259, @@ -7003,7 +7029,33 @@ ] }, { + "id": 8, "name": "MA-videoplayer", + "deviceTypeRef": { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + } + ], + "deviceTypeRefs": [ + 61 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 256 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -8882,7 +8934,7 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "attributes": [ { "name": "Status", @@ -9380,6 +9432,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EndpointList", + "code": 31, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -9412,6 +9480,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -9454,7 +9538,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "2", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -9746,7 +9830,7 @@ "mfgCode": null, "define": "DOOR_LOCK_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "commands": [ { "name": "GetWeekDayScheduleResponse", @@ -10222,6 +10306,36 @@ "maxInterval": 65534, "reportableChange": 0 } + ], + "events": [ + { + "name": "DoorLockAlarm", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockOperation", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockOperationError", + "code": 3, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockUserChange", + "code": 4, + "mfgCode": null, + "side": "server", + "included": 1 + } ] }, { @@ -12016,6 +12130,22 @@ "incoming": 1, "outgoing": 0 }, + { + "name": "MoveHue", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 0 + }, + { + "name": "StepHue", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 0 + }, { "name": "MoveToSaturation", "code": 3, @@ -12024,6 +12154,22 @@ "incoming": 1, "outgoing": 0 }, + { + "name": "MoveSaturation", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 0 + }, + { + "name": "StepSaturation", + "code": 5, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 0 + }, { "name": "MoveToHueAndSaturation", "code": 6, @@ -12047,6 +12193,14 @@ "source": "client", "incoming": 1, "outgoing": 0 + }, + { + "name": "MoveColorTemperature", + "code": 75, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 0 } ], "attributes": [ @@ -12090,7 +12244,7 @@ "mfgCode": null, "define": "COLOR_CONTROL_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "attributes": [ { "name": "CurrentHue", @@ -12956,6 +13110,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -15623,18 +15793,14 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-videoplayer", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 } ], "log": [] diff --git a/examples/window-app/common/window-app.matter b/examples/window-app/common/window-app.matter index 8a7ef763ef0eed..aa5eb9d83f4893 100644 --- a/examples/window-app/common/window-app.matter +++ b/examples/window-app/common/window-app.matter @@ -148,125 +148,12 @@ server cluster Groups = 4 { fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; } -/** Attributes and commands for scene configuration and manipulation. */ -server cluster Scenes = 5 { +/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ +server cluster Descriptor = 29 { bitmap Feature : BITMAP32 { - kSceneNames = 0x1; - } - - bitmap ScenesCopyMode : BITMAP8 { - kCopyAllScenes = 0x1; - } - - struct AttributeValuePair { - attrib_id attributeID = 0; - int32u attributeValue = 1; - } - - struct ExtensionFieldSet { - cluster_id clusterID = 0; - AttributeValuePair attributeValueList[] = 1; - } - - readonly attribute int8u sceneCount = 0; - readonly attribute int8u currentScene = 1; - readonly attribute group_id currentGroup = 2; - readonly attribute boolean sceneValid = 3; - readonly attribute bitmap8 nameSupport = 4; - 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 AddSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - INT16U transitionTime = 2; - CHAR_STRING sceneName = 3; - ExtensionFieldSet extensionFieldSets[] = 4; - } - - request struct ViewSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RemoveSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RemoveAllScenesRequest { - group_id groupID = 0; - } - - request struct StoreSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - } - - request struct RecallSceneRequest { - group_id groupID = 0; - INT8U sceneID = 1; - optional nullable INT16U transitionTime = 2; - } - - request struct GetSceneMembershipRequest { - group_id groupID = 0; - } - - response struct AddSceneResponse = 0 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - } - - response struct ViewSceneResponse = 1 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - optional INT16U transitionTime = 3; - optional CHAR_STRING sceneName = 4; - optional ExtensionFieldSet extensionFieldSets[] = 5; - } - - response struct RemoveSceneResponse = 2 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - } - - response struct RemoveAllScenesResponse = 3 { - status status = 0; - group_id groupID = 1; + kTagList = 0x1; } - response struct StoreSceneResponse = 4 { - status status = 0; - group_id groupID = 1; - INT8U sceneID = 2; - } - - response struct GetSceneMembershipResponse = 6 { - status status = 0; - nullable INT8U capacity = 1; - group_id groupID = 2; - optional INT8U sceneList[] = 3; - } - - fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0; - fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1; - fabric command access(invoke: manage) RemoveScene(RemoveSceneRequest): RemoveSceneResponse = 2; - fabric command access(invoke: manage) RemoveAllScenes(RemoveAllScenesRequest): RemoveAllScenesResponse = 3; - fabric command access(invoke: manage) StoreScene(StoreSceneRequest): StoreSceneResponse = 4; - fabric command RecallScene(RecallSceneRequest): DefaultSuccess = 5; - fabric command GetSceneMembership(GetSceneMembershipRequest): GetSceneMembershipResponse = 6; -} - -/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ -server cluster Descriptor = 29 { struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; @@ -1936,6 +1823,7 @@ server cluster WindowCovering = 258 { endpoint 0 { device type ma_rootdevice = 22, version 1; + device type ma_powersource = 17, version 1; binding cluster OtaSoftwareUpdateProvider; @@ -1946,6 +1834,7 @@ endpoint 0 { callback attribute partsList; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; callback attribute clusterRevision default = 1; @@ -1961,6 +1850,7 @@ endpoint 0 { callback attribute accessControlEntriesPerFabric default = 4; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -1991,6 +1881,7 @@ endpoint 0 { callback attribute capabilityMinima; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2013,6 +1904,7 @@ endpoint 0 { 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; @@ -2024,6 +1916,7 @@ endpoint 0 { callback attribute supportedCalendarTypes; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2032,6 +1925,7 @@ endpoint 0 { server cluster UnitLocalization { callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2048,6 +1942,10 @@ endpoint 0 { callback attribute activeBatFaults; ram attribute batChargeState; callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 2; } @@ -2060,6 +1958,7 @@ endpoint 0 { callback attribute supportsConcurrentConnection default = 1; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2076,6 +1975,7 @@ endpoint 0 { ram attribute lastConnectErrorValue; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 2; ram attribute clusterRevision default = 1; @@ -2094,6 +1994,7 @@ endpoint 0 { callback attribute testEventTriggersEnabled default = false; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2217,6 +2118,7 @@ endpoint 0 { callback attribute adminVendorId default = 0; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2231,6 +2133,7 @@ endpoint 0 { callback attribute currentFabricIndex; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2243,6 +2146,7 @@ endpoint 0 { callback attribute maxGroupKeysPerFabric; callback attribute generatedCommandList; callback attribute acceptedCommandList; + callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; ram attribute clusterRevision default = 1; @@ -2283,19 +2187,6 @@ endpoint 1 { ram attribute clusterRevision default = 4; } - server cluster Scenes { - callback attribute sceneCount default = 0x00; - ram attribute currentScene default = 0x00; - ram attribute currentGroup default = 0x0000; - ram attribute sceneValid default = 0x00; - ram attribute nameSupport; - callback attribute generatedCommandList; - callback attribute acceptedCommandList; - callback attribute attributeList; - ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; - } - server cluster Descriptor { callback attribute deviceTypeList; callback attribute serverList; @@ -2361,19 +2252,6 @@ endpoint 2 { ram attribute clusterRevision default = 4; } - server cluster Scenes { - callback attribute sceneCount default = 0x00; - ram attribute currentScene default = 0x00; - ram attribute currentGroup default = 0x0000; - ram attribute sceneValid default = 0x00; - ram attribute nameSupport; - callback attribute generatedCommandList; - callback attribute acceptedCommandList; - callback attribute attributeList; - ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; - } - server cluster Descriptor { callback attribute deviceTypeList; callback attribute serverList; diff --git a/examples/window-app/common/window-app.zap b/examples/window-app/common/window-app.zap index 8c4fcc8066c736..76df605f07f48f 100644 --- a/examples/window-app/common/window-app.zap +++ b/examples/window-app/common/window-app.zap @@ -33,9 +33,45 @@ ], "endpointTypes": [ { + "id": 3, "name": "MA-windowcovering", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 3, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 2, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 3, + 2 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -754,7 +790,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -854,6 +890,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -886,6 +938,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -950,7 +1018,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -1098,6 +1166,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1178,7 +1262,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 1, "bounded": 0, @@ -1534,6 +1618,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "ProductAppearance", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "ProductAppearanceStruct", + "included": 0, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -1566,6 +1666,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1962,7 +2078,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2062,6 +2178,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2126,7 +2258,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2242,6 +2374,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2306,7 +2454,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2379,9 +2527,493 @@ "code": 65529, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Power Source", + "code": 47, + "mfgCode": null, + "define": "POWER_SOURCE_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "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": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Order", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Description", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "WiredAssessedInputVoltage", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredAssessedInputFrequency", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredCurrentType", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "WiredCurrentTypeEnum", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredAssessedCurrent", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredNominalVoltage", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredMaximumCurrent", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiredPresent", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveWiredFaults", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatPercentRemaining", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatTimeRemaining", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatChargeLevel", + "code": 14, + "mfgCode": null, + "side": "server", + "type": "BatChargeLevelEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatReplacementNeeded", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatReplaceability", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "BatReplaceabilityEnum", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatPresent", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveBatFaults", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BatReplacementDescription", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatCommonDesignation", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "BatCommonDesignationEnum", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatANSIDesignation", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatIECDesignation", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2391,13 +3023,13 @@ "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "BatApprovedChemistry", + "code": 23, "mfgCode": null, "side": "server", - "type": "array", - "included": 1, - "storageOption": "External", + "type": "BatApprovedChemistryEnum", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -2407,53 +3039,43 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "BatCapacity", + "code": 24, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "BatQuantity", + "code": 25, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "int8u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "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, + "name": "BatChargeState", + "code": 26, "mfgCode": null, "side": "server", - "type": "PowerSourceStatusEnum", + "type": "BatChargeStateEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -2465,104 +3087,104 @@ "reportableChange": 0 }, { - "name": "Order", - "code": 1, + "name": "BatTimeToFullCharge", + "code": 27, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "int32u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Description", - "code": 2, + "name": "BatFunctionalWhileCharging", + "code": 28, "mfgCode": null, "side": "server", - "type": "char_string", - "included": 1, + "type": "boolean", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatVoltage", - "code": 11, + "name": "BatChargingCurrent", + "code": 29, "mfgCode": null, "side": "server", "type": "int32u", - "included": 1, + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatPercentRemaining", - "code": 12, + "name": "ActiveBatChargeFaults", + "code": 30, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, - "storageOption": "RAM", + "type": "array", + "included": 0, + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatTimeRemaining", - "code": 13, + "name": "EndpointList", + "code": 31, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatChargeLevel", - "code": 14, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "BatChargeLevelEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActiveBatFaults", - "code": 18, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", "type": "array", @@ -2572,29 +3194,29 @@ "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BatChargeState", - "code": 26, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "BatChargeStateEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EndpointList", - "code": 31, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", "type": "array", @@ -2682,7 +3304,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -2856,6 +3478,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2970,7 +3608,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -3192,6 +3830,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -3249,6 +3903,16 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ { "name": "FeatureMap", @@ -3256,7 +3920,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -3478,6 +4142,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -5384,7 +6064,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -5500,6 +6180,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -5630,7 +6326,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -5828,6 +6524,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -5926,7 +6638,7 @@ "mfgCode": null, "side": "client", "type": "bitmap32", - "included": 0, + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -6076,6 +6788,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -6261,7 +6989,33 @@ ] }, { + "id": 4, "name": "MA-windowcovering", + "deviceTypeRef": { + "id": 31, + "code": 514, + "profileId": 259, + "label": "MA-windowcovering", + "name": "MA-windowcovering" + }, + "deviceTypes": [ + { + "id": 31, + "code": 514, + "profileId": 259, + "label": "MA-windowcovering", + "name": "MA-windowcovering" + } + ], + "deviceTypeRefs": [ + 31 + ], + "deviceVersions": [ + 2 + ], + "deviceIdentifiers": [ + 514 + ], "deviceTypeName": "MA-windowcovering", "deviceTypeCode": 514, "deviceTypeProfileId": 259, @@ -6744,7 +7498,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 1, + "enabled": 0, "commands": [ { "name": "AddSceneResponse", @@ -7797,7 +8551,33 @@ ] }, { + "id": 5, "name": "MA-windowcovering", + "deviceTypeRef": { + "id": 31, + "code": 514, + "profileId": 259, + "label": "MA-windowcovering", + "name": "MA-windowcovering" + }, + "deviceTypes": [ + { + "id": 31, + "code": 514, + "profileId": 259, + "label": "MA-windowcovering", + "name": "MA-windowcovering" + } + ], + "deviceTypeRefs": [ + 31 + ], + "deviceVersions": [ + 2 + ], + "deviceIdentifiers": [ + 514 + ], "deviceTypeName": "MA-windowcovering", "deviceTypeCode": 514, "deviceTypeProfileId": 259, @@ -8280,7 +9060,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 1, + "enabled": 0, "commands": [ { "name": "AddSceneResponse", @@ -9339,27 +10119,21 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-windowcovering", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 2, - "deviceIdentifier": 514 + "networkId": 0 }, { "endpointTypeName": "MA-windowcovering", "endpointTypeIndex": 2, "profileId": 259, "endpointId": 2, - "networkId": 0, - "endpointVersion": 2, - "deviceIdentifier": 514 + "networkId": 0 } ], "log": [] diff --git a/integrations/docker/images/base/chip-build/version b/integrations/docker/images/base/chip-build/version index a3bb1d9c725371..ca7bc016f5ad62 100644 --- a/integrations/docker/images/base/chip-build/version +++ b/integrations/docker/images/base/chip-build/version @@ -1 +1 @@ -7 : Fix TI sysconfig root in vscode image +8 : Update Silabs GSDK to v4.3.1 diff --git a/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile b/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile index 1946a0e6073717..619dcb870ba2b2 100644 --- a/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile +++ b/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile @@ -17,8 +17,8 @@ RUN set -x \ && : # last line -#Clone Gecko SDK 4.2.0 (ef05eb6) -RUN git clone --depth=1 --branch=v4.2.3 https://github.com/SiliconLabs/gecko_sdk.git && \ +#Clone Gecko SDK 4.3.1 (2ba59bf) +RUN git clone --depth=1 --branch=v4.3.1 https://github.com/SiliconLabs/gecko_sdk.git && \ cd gecko_sdk && \ rm -rf .git \ && : # last line diff --git a/scripts/py_matter_yamltests/matter_yamltests/hooks.py b/scripts/py_matter_yamltests/matter_yamltests/hooks.py index b68ae35fd6ce94..c1b1fa53446ab5 100644 --- a/scripts/py_matter_yamltests/matter_yamltests/hooks.py +++ b/scripts/py_matter_yamltests/matter_yamltests/hooks.py @@ -13,14 +13,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .errors import TestStepError from .parser import TestStep class TestParserHooks(): __test__ = False - def start(self, count: int): + def parsing_start(self, count: int): """ This method is called when the parser starts parsing a set of files. @@ -31,7 +30,7 @@ def start(self, count: int): """ pass - def stop(self, duration: int): + def parsing_stop(self, duration: int): """ This method is called when the parser is done parsing a set of files. @@ -42,7 +41,7 @@ def stop(self, duration: int): """ pass - def test_start(self, name: str): + def test_parsing_start(self, name: str): """ This method is called when the parser starts parsing a single file. @@ -53,20 +52,20 @@ def test_start(self, name: str): """ pass - def test_failure(self, exception: TestStepError, duration: int): + def test_parsing_failure(self, exception: Exception, duration: int): """ This method is called when parsing a single file fails. Parameters ---------- - exception: TestStepError + exception: Exception An exception describing why parsing the file has failed. duration: int How long it took to parse the file, in milliseconds. """ pass - def test_success(self, duration: int): + def test_parsing_success(self, duration: int): """ This method is called when parsing a single file succeeds. diff --git a/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py b/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py index 70a4eb01705447..819406f2d43cfd 100644 --- a/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py +++ b/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py @@ -70,7 +70,7 @@ def __init__(self, config: TestParserBuilderConfig = TestParserBuilderConfig()): self.done = False def __iter__(self): - self.__config.hooks.start(len(self.__tests)) + self.__config.hooks.parsing_start(len(self.__tests)) return self def __next__(self): @@ -78,7 +78,7 @@ def __next__(self): return self.__get_test_parser(self.__tests.pop(0)) if not self.done: - self.__config.hooks.stop(round(self.__duration)) + self.__config.hooks.parsing_stop(round(self.__duration)) self.done = True raise StopIteration @@ -89,7 +89,7 @@ def __get_test_parser(self, test_file: str) -> TestParser: parser = None exception = None try: - self.__config.hooks.test_start(test_file) + self.__config.hooks.test_parsing_start(test_file) parser = TestParser(test_file, self.__config.parser_config) except Exception as e: exception = e @@ -97,10 +97,10 @@ def __get_test_parser(self, test_file: str) -> TestParser: duration = round((time.time() - start) * 1000, 0) self.__duration += duration if exception: - self.__config.hooks.test_failure(exception, duration) + self.__config.hooks.test_parsing_failure(exception, duration) if self.__config.options.stop_on_error: raise StopIteration return None - self.__config.hooks.test_success(duration) + self.__config.hooks.test_parsing_success(duration) return parser diff --git a/scripts/py_matter_yamltests/matter_yamltests/runner.py b/scripts/py_matter_yamltests/matter_yamltests/runner.py index c819eea79d9a56..472d3cd8fa8203 100644 --- a/scripts/py_matter_yamltests/matter_yamltests/runner.py +++ b/scripts/py_matter_yamltests/matter_yamltests/runner.py @@ -16,6 +16,7 @@ import asyncio import time from abc import ABC, abstractmethod +from asyncio import CancelledError from dataclasses import dataclass, field from .adapter import TestAdapter @@ -144,7 +145,7 @@ async def run(self, parser_builder_config: TestParserBuilderConfig, runner_confi continue result = await self._run_with_timeout(parser, runner_config) - if isinstance(result, Exception): + if isinstance(result, Exception) or isinstance(result, CancelledError): raise (result) elif not result: return False @@ -160,7 +161,7 @@ async def _run_with_timeout(self, parser: TestParser, config: TestRunnerConfig): try: await self.start() status = await asyncio.wait_for(self._run(parser, config), parser.timeout) - except Exception as exception: + except (Exception, CancelledError) as exception: status = exception finally: await self.stop() diff --git a/scripts/py_matter_yamltests/test_parser_builder.py b/scripts/py_matter_yamltests/test_parser_builder.py index 186dfad98f0def..40b29357221f43 100644 --- a/scripts/py_matter_yamltests/test_parser_builder.py +++ b/scripts/py_matter_yamltests/test_parser_builder.py @@ -72,19 +72,19 @@ def __init__(self): self.test_failure_count = 0 self.test_success_count = 0 - def start(self, count): + def parsing_start(self, count): self.start_count += 1 - def stop(self, duration): + def parsing_stop(self, duration): self.stop_count += 1 - def test_start(self, name): + def test_parsing_start(self, name): self.test_start_count += 1 - def test_success(self, duration): + def test_parsing_success(self, duration): self.test_success_count += 1 - def test_failure(self, exception, duration): + def test_parsing_failure(self, exception, duration): self.test_failure_count += 1 diff --git a/scripts/setup/requirements.ti.txt b/scripts/setup/requirements.ti.txt index 14ea26e1ba9fd7..b832ec6cf68b69 100644 --- a/scripts/setup/requirements.ti.txt +++ b/scripts/setup/requirements.ti.txt @@ -1 +1,2 @@ ecdsa>=0.17.0 +intelhex diff --git a/scripts/tests/chiptest/__init__.py b/scripts/tests/chiptest/__init__.py index e3d2f25d2db368..29942b0a2e2ac4 100644 --- a/scripts/tests/chiptest/__init__.py +++ b/scripts/tests/chiptest/__init__.py @@ -170,6 +170,9 @@ def _GetChipReplUnsupportedTests() -> Set[str]: "Test_TC_DRLK_2_8.yaml", # Test fails only in chip-repl: Refer--> https://github.com/project-chip/connectedhomeip/pull/27011#issuecomment-1593339855 "Test_TC_ACE_1_6.yaml", # Test fails only in chip-repl: Refer--> https://github.com/project-chip/connectedhomeip/pull/27910#issuecomment-1632485584 "Test_TC_IDM_1_2.yaml", # chip-repl does not support AnyCommands (19/07/2023) + "Test_TC_DRLK_2_2.yaml", # chip-repl does not support EqualityCommands pseudo-cluster (08/04/2023) + "Test_TC_DRLK_2_3.yaml", # chip-repl does not support EqualityCommands pseudo-cluster (08/04/2023) + "Test_TC_DRLK_2_12.yaml", # chip-repl does not support EqualityCommands pseudo-cluster (08/04/2023) "TestGroupKeyManagementCluster.yaml", # chip-repl does not support EqualityCommands (2023-08-04) "Test_TC_S_2_2.yaml", # chip-repl does not support scenes cluster commands "Test_TC_S_2_3.yaml", # chip-repl does not support scenes cluster commands diff --git a/scripts/tests/yaml/tests_logger.py b/scripts/tests/yaml/tests_logger.py index f01b0d28ec26a4..ff8ea0b41cec01 100755 --- a/scripts/tests/yaml/tests_logger.py +++ b/scripts/tests/yaml/tests_logger.py @@ -67,19 +67,19 @@ def __init__(self): self.__errors = 0 self.__strings = ParserStrings() - def start(self, count: int): + def parsing_start(self, count: int): print(self.__strings.start.format(count=count)) - def stop(self, duration: int): + def parsing_stop(self, duration: int): state = _FAILURE if self.__errors else _SUCCESS success = click.style(self.__success, bold=True) errors = click.style(self.__errors, bold=True) print(self.__strings.stop.format(state=state, successes=success, errors=errors, duration=duration)) - def test_start(self, name: str): + def test_parsing_start(self, name: str): print(self.__strings.test_start.format(name=name), end='') - def test_failure(self, exception: Exception, duration: int): + def test_parsing_failure(self, exception: Exception, duration: int): print(self.__strings.test_result.format(state=_FAILURE, duration=duration)) try: @@ -91,7 +91,7 @@ def test_failure(self, exception: Exception, duration: int): self.__errors += 1 - def test_success(self, duration: int): + def test_parsing_success(self, duration: int): print(self.__strings.test_result.format(state=_SUCCESS, duration=duration)) self.__success += 1 diff --git a/scripts/tools/summarize_fail.py b/scripts/tools/summarize_fail.py new file mode 100644 index 00000000000000..90d60ba5860379 --- /dev/null +++ b/scripts/tools/summarize_fail.py @@ -0,0 +1,7 @@ +import pandas as pd + +df = pd.read_json("runlist.json") +print("Recent Failures:") +print(df) +print("Percentage Frequency:") +print(df["workflowName"].value_counts(normalize=True) * 100) diff --git a/scripts/tools/zap/tests/inputs/all-clusters-app.zap b/scripts/tools/zap/tests/inputs/all-clusters-app.zap index de1df2565556fc..d2c9b0c54e5d36 100644 --- a/scripts/tools/zap/tests/inputs/all-clusters-app.zap +++ b/scripts/tools/zap/tests/inputs/all-clusters-app.zap @@ -16,6 +16,12 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json", @@ -23,19 +29,49 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data with some extensions" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" } ], "endpointTypes": [ { + "id": 48, "name": "MA-rootdevice", - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeRef": { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + "deviceTypes": [ + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + }, + { + "id": 55, + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceTypeRefs": [ + 56, + 55 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 17, + 22 + ], + "deviceTypeName": "MA-powersource", + "deviceTypeCode": 17, "deviceTypeProfileId": 259, "clusters": [ { @@ -800,6 +836,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -890,6 +942,86 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1014,7 +1146,41 @@ "mfgCode": null, "define": "ACCESS_CONTROL_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Access Control", @@ -1104,6 +1270,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1162,6 +1392,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -1509,47 +1755,127 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ProductAppearance", + "code": 20, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "ProductAppearanceStruct", + "included": 0, "storageOption": "RAM", - "singleton": 0, + "singleton": 1, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ], - "events": [ + }, { - "name": "StartUp", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "included": 1 - }, - { + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "1", + "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, @@ -1880,7 +2206,41 @@ "mfgCode": null, "define": "LOCALIZATION_CONFIGURATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Localization Configuration", @@ -1922,6 +2282,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -1962,7 +2386,41 @@ "mfgCode": null, "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Time Format Localization", @@ -2052,6 +2510,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2108,24 +2582,16 @@ "mfgCode": null, "define": "UNIT_LOCALIZATION_CLUSTER", "side": "client", - "enabled": 0 - }, - { - "name": "Unit Localization", - "code": 45, - "mfgCode": null, - "define": "UNIT_LOCALIZATION_CLUSTER", - "side": "server", - "enabled": 1, + "enabled": 0, "attributes": [ { - "name": "TemperatureUnit", - "code": 0, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "TempUnitEnum", + "side": "client", + "type": "bitmap32", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "0", @@ -2135,10 +2601,116 @@ "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Unit Localization", + "code": 45, + "mfgCode": null, + "define": "UNIT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "TemperatureUnit", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "TempUnitEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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", @@ -2240,7 +2812,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -2768,7 +3374,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2784,7 +3390,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2794,13 +3400,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -2878,6 +3500,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3010,6 +3648,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -3102,6 +3804,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3283,12 +4001,60 @@ "reportableChange": 0 }, { - "name": "AttributeList", + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -3391,7 +4157,33 @@ "define": "GENERAL_DIAGNOSTICS_CLUSTER", "side": "client", "enabled": 0, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -3604,6 +4396,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -5568,6 +6376,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5642,6 +6466,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5750,6 +6638,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -5906,6 +6810,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -5983,20 +6951,36 @@ ], "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "client", - "type": "int16u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 } ] }, @@ -6090,6 +7074,70 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -8739,7 +9787,43 @@ ] }, { + "id": 47, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 61, + 56 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -8770,6 +9854,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -8828,6 +9928,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -8920,6 +10084,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -8996,6 +10176,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9097,23 +10341,39 @@ ], "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "client", - "type": "int16u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, { "name": "Scenes", "code": 5, @@ -9252,6 +10512,118 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9344,6 +10716,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -9456,7 +10844,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -9472,7 +10860,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -9482,13 +10870,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -10162,6 +11566,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -10252,6 +11672,86 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -11047,8 +12547,24 @@ "enabled": 0, "attributes": [ { - "name": "ClusterRevision", - "code": 65533, + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "client", "type": "int16u", @@ -11590,7 +13106,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -11606,7 +13122,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -11616,13 +13132,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -20980,7 +22512,43 @@ ] }, { + "id": 46, "name": "MA-onofflight", + "deviceTypeRef": { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + "deviceTypes": [ + { + "id": 61, + "code": 256, + "profileId": 259, + "label": "MA-onofflight", + "name": "MA-onofflight" + }, + { + "id": 56, + "code": 17, + "profileId": 259, + "label": "MA-powersource", + "name": "MA-powersource" + } + ], + "deviceTypeRefs": [ + 61, + 56 + ], + "deviceVersions": [ + 1, + 1 + ], + "deviceIdentifiers": [ + 256, + 17 + ], "deviceTypeName": "MA-onofflight", "deviceTypeCode": 256, "deviceTypeProfileId": 259, @@ -21000,9 +22568,33 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "TriggerEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21027,7 +22619,7 @@ "mfgCode": null, "define": "IDENTIFY_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "attributes": [ { "name": "IdentifyTime", @@ -21045,6 +22637,102 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "IdentifyType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "IdentifyTypeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21121,6 +22809,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21197,6 +22901,70 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -21297,6 +23065,22 @@ } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21321,7 +23105,7 @@ "mfgCode": null, "define": "SCENES_CLUSTER", "side": "server", - "enabled": 0, + "enabled": 1, "commands": [ { "name": "AddSceneResponse", @@ -21453,6 +23237,134 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "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": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21502,9 +23414,49 @@ "source": "client", "incoming": 1, "outgoing": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 } ], "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21532,83 +23484,147 @@ "enabled": 1, "attributes": [ { - "name": "OnOff", - "code": 0, + "name": "OnOff", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "GlobalSceneControl", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OffWaitTime", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpOnOff", + "code": 16387, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "OnOffStartUpOnOff", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "GlobalSceneControl", - "code": 16384, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OnTime", - "code": 16385, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OffWaitTime", - "code": 16386, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "StartUpOnOff", - "code": 16387, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "OnOffStartUpOnOff", + "type": "array", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -21761,6 +23777,54 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "RemainingTime", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "LevelControlOptions", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21787,6 +23851,22 @@ "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -21877,6 +23957,86 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "TagList", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -22289,7 +24449,41 @@ "mfgCode": null, "define": "POWER_SOURCE_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { "name": "Power Source", @@ -22817,7 +25011,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -22833,7 +25027,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -22843,13 +25037,29 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -24586,7 +26796,33 @@ ] }, { + "id": 45, "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "id": 106, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + }, + "deviceTypes": [ + { + "id": 106, + "code": 61442, + "profileId": 259, + "label": "MA-secondary-network-commissioning", + "name": "MA-secondary-network-commissioning" + } + ], + "deviceTypeRefs": [ + 106 + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 61442 + ], "deviceTypeName": "MA-secondary-network-commissioning", "deviceTypeCode": 61442, "deviceTypeProfileId": 259, @@ -25068,36 +27304,28 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 22 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "MA-onofflight", "endpointTypeIndex": 2, "profileId": 259, "endpointId": 2, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 256 + "networkId": 0 }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 3, "profileId": 259, "endpointId": 65534, - "networkId": 0, - "endpointVersion": 1, - "deviceIdentifier": 61442 + "networkId": 0 } ], "log": [] diff --git a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h index d8f15d8089e0ea..b827ad03853187 100644 --- a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h +++ b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h @@ -354,7 +354,7 @@ } // This is an array of EmberAfAttributeMetadata structures. -#define GENERATED_ATTRIBUTE_COUNT 724 +#define GENERATED_ATTRIBUTE_COUNT 739 #define GENERATED_ATTRIBUTES \ { \ \ @@ -759,6 +759,8 @@ { ZAP_SIMPLE_DEFAULT(0x0000), 0x00000002, 2, ZAP_TYPE(GROUP_ID), 0 }, /* CurrentGroup */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000003, 1, ZAP_TYPE(BOOLEAN), 0 }, /* SceneValid */ \ { ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000006, 2, ZAP_TYPE(INT16U), 0 }, /* SceneTableSize */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000007, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RemainingCapacity */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ @@ -1406,11 +1408,28 @@ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ + /* Endpoint: 2, Cluster: Identify (server) */ \ + { ZAP_SIMPLE_DEFAULT(0x0000), 0x00000000, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ + { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ + { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ + { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + \ /* Endpoint: 2, Cluster: Groups (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ + /* Endpoint: 2, Cluster: Scenes (server) */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SceneCount */ \ + { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(INT8U), 0 }, /* CurrentScene */ \ + { ZAP_SIMPLE_DEFAULT(0x0000), 0x00000002, 2, ZAP_TYPE(GROUP_ID), 0 }, /* CurrentGroup */ \ + { ZAP_SIMPLE_DEFAULT(0x00), 0x00000003, 1, ZAP_TYPE(BOOLEAN), 0 }, /* SceneValid */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000006, 2, ZAP_TYPE(INT16U), 0 }, /* SceneTableSize */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000007, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* RemainingCapacity */ \ + { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + \ /* Endpoint: 2, Cluster: On/Off (server) */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000000, 1, ZAP_TYPE(BOOLEAN), 0 }, /* OnOff */ \ { ZAP_SIMPLE_DEFAULT(1), 0x00004000, 1, ZAP_TYPE(BOOLEAN), 0 }, /* GlobalSceneControl */ \ @@ -1647,31 +1666,32 @@ /* Endpoint: 0, Cluster: General Diagnostics (server) */\ /* AcceptedCommandList (index=40) */ \ 0x00000000 /* TestEventTrigger */, \ + 0x00000000 /* TestEventTrigger */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Software Diagnostics (server) */\ - /* AcceptedCommandList (index=42) */ \ + /* AcceptedCommandList (index=43) */ \ 0x00000000 /* ResetWatermarks */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Thread Network Diagnostics (server) */\ - /* AcceptedCommandList (index=44) */ \ + /* AcceptedCommandList (index=45) */ \ 0x00000000 /* ResetCounts */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: WiFi Network Diagnostics (server) */\ - /* AcceptedCommandList (index=46) */ \ + /* AcceptedCommandList (index=47) */ \ 0x00000000 /* ResetCounts */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Ethernet Network Diagnostics (server) */\ - /* AcceptedCommandList (index=48) */ \ + /* AcceptedCommandList (index=49) */ \ 0x00000000 /* ResetCounts */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Administrator Commissioning (server) */\ - /* AcceptedCommandList (index=50) */ \ + /* AcceptedCommandList (index=51) */ \ 0x00000000 /* OpenCommissioningWindow */, \ 0x00000001 /* OpenBasicCommissioningWindow */, \ 0x00000002 /* RevokeCommissioning */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Operational Credentials (server) */\ - /* AcceptedCommandList (index=54) */ \ + /* AcceptedCommandList (index=55) */ \ 0x00000000 /* AttestationRequest */, \ 0x00000002 /* CertificateChainRequest */, \ 0x00000004 /* CSRRequest */, \ @@ -1681,35 +1701,35 @@ 0x0000000A /* RemoveFabric */, \ 0x0000000B /* AddTrustedRootCertificate */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=63)*/ \ + /* GeneratedCommandList (index=64)*/ \ 0x00000001 /* AttestationResponse */, \ 0x00000003 /* CertificateChainResponse */, \ 0x00000005 /* CSRResponse */, \ 0x00000008 /* NOCResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Group Key Management (server) */\ - /* AcceptedCommandList (index=68) */ \ + /* AcceptedCommandList (index=69) */ \ 0x00000000 /* KeySetWrite */, \ 0x00000001 /* KeySetRead */, \ 0x00000003 /* KeySetRemove */, \ 0x00000004 /* KeySetReadAllIndices */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=73)*/ \ + /* GeneratedCommandList (index=74)*/ \ 0x00000002 /* KeySetReadResponse */, \ 0x00000005 /* KeySetReadAllIndicesResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 0, Cluster: Fault Injection (server) */\ - /* AcceptedCommandList (index=76) */ \ + /* AcceptedCommandList (index=77) */ \ 0x00000000 /* FailAtFault */, \ 0x00000001 /* FailRandomlyAtFault */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Identify (server) */\ - /* AcceptedCommandList (index=79) */ \ + /* AcceptedCommandList (index=80) */ \ 0x00000000 /* Identify */, \ 0x00000040 /* TriggerEffect */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Groups (server) */\ - /* AcceptedCommandList (index=82) */ \ + /* AcceptedCommandList (index=83) */ \ 0x00000000 /* AddGroup */, \ 0x00000001 /* ViewGroup */, \ 0x00000002 /* GetGroupMembership */, \ @@ -1717,14 +1737,14 @@ 0x00000004 /* RemoveAllGroups */, \ 0x00000005 /* AddGroupIfIdentifying */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=89)*/ \ + /* GeneratedCommandList (index=90)*/ \ 0x00000000 /* AddGroupResponse */, \ 0x00000001 /* ViewGroupResponse */, \ 0x00000002 /* GetGroupMembershipResponse */, \ 0x00000003 /* RemoveGroupResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Scenes (server) */\ - /* AcceptedCommandList (index=94) */ \ + /* AcceptedCommandList (index=95) */ \ 0x00000000 /* AddScene */, \ 0x00000001 /* ViewScene */, \ 0x00000002 /* RemoveScene */, \ @@ -1733,7 +1753,7 @@ 0x00000005 /* RecallScene */, \ 0x00000006 /* GetSceneMembership */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=102)*/ \ + /* GeneratedCommandList (index=103)*/ \ 0x00000000 /* AddSceneResponse */, \ 0x00000001 /* ViewSceneResponse */, \ 0x00000002 /* RemoveSceneResponse */, \ @@ -1742,7 +1762,7 @@ 0x00000006 /* GetSceneMembershipResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: On/Off (server) */\ - /* AcceptedCommandList (index=109) */ \ + /* AcceptedCommandList (index=110) */ \ 0x00000000 /* Off */, \ 0x00000001 /* On */, \ 0x00000002 /* Toggle */, \ @@ -1751,7 +1771,7 @@ 0x00000042 /* OnWithTimedOff */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Level Control (server) */\ - /* AcceptedCommandList (index=116) */ \ + /* AcceptedCommandList (index=117) */ \ 0x00000000 /* MoveToLevel */, \ 0x00000001 /* Move */, \ 0x00000002 /* Step */, \ @@ -1762,11 +1782,11 @@ 0x00000007 /* StopWithOnOff */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Mode Select (server) */\ - /* AcceptedCommandList (index=125) */ \ + /* AcceptedCommandList (index=126) */ \ 0x00000000 /* ChangeToMode */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Door Lock (server) */\ - /* AcceptedCommandList (index=127) */ \ + /* AcceptedCommandList (index=128) */ \ 0x00000000 /* LockDoor */, \ 0x00000001 /* UnlockDoor */, \ 0x00000003 /* UnlockWithTimeout */, \ @@ -1782,7 +1802,7 @@ 0x00000024 /* GetCredentialStatus */, \ 0x00000026 /* ClearCredential */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=142)*/ \ + /* GeneratedCommandList (index=143)*/ \ 0x0000000C /* GetWeekDayScheduleResponse */, \ 0x0000000F /* GetYearDayScheduleResponse */, \ 0x0000001C /* GetUserResponse */, \ @@ -1790,7 +1810,7 @@ 0x00000025 /* GetCredentialStatusResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Window Covering (server) */\ - /* AcceptedCommandList (index=148) */ \ + /* AcceptedCommandList (index=149) */ \ 0x00000000 /* UpOrOpen */, \ 0x00000001 /* DownOrClose */, \ 0x00000002 /* StopMotion */, \ @@ -1800,16 +1820,16 @@ 0x00000008 /* GoToTiltPercentage */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Barrier Control (server) */\ - /* AcceptedCommandList (index=156) */ \ + /* AcceptedCommandList (index=157) */ \ 0x00000000 /* BarrierControlGoToPercent */, \ 0x00000001 /* BarrierControlStop */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Thermostat (server) */\ - /* AcceptedCommandList (index=159) */ \ + /* AcceptedCommandList (index=160) */ \ 0x00000000 /* SetpointRaiseLower */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Color Control (server) */\ - /* AcceptedCommandList (index=161) */ \ + /* AcceptedCommandList (index=162) */ \ 0x00000000 /* MoveToHue */, \ 0x00000001 /* MoveHue */, \ 0x00000002 /* StepHue */, \ @@ -1831,32 +1851,32 @@ 0x0000004C /* StepColorTemperature */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Target Navigator (server) */\ - /* AcceptedCommandList (index=181) */ \ + /* AcceptedCommandList (index=182) */ \ 0x00000000 /* NavigateTarget */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=183)*/ \ + /* GeneratedCommandList (index=184)*/ \ 0x00000001 /* NavigateTargetResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Media Input (server) */\ - /* AcceptedCommandList (index=185) */ \ + /* AcceptedCommandList (index=186) */ \ 0x00000000 /* SelectInput */, \ 0x00000001 /* ShowInputStatus */, \ 0x00000002 /* HideInputStatus */, \ 0x00000003 /* RenameInput */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Low Power (server) */\ - /* AcceptedCommandList (index=190) */ \ + /* AcceptedCommandList (index=191) */ \ 0x00000000 /* Sleep */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Keypad Input (server) */\ - /* AcceptedCommandList (index=192) */ \ + /* AcceptedCommandList (index=193) */ \ 0x00000000 /* SendKey */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=194)*/ \ + /* GeneratedCommandList (index=195)*/ \ 0x00000001 /* SendKeyResponse */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 1, Cluster: Unit Testing (server) */\ - /* AcceptedCommandList (index=196) */ \ + /* AcceptedCommandList (index=197) */ \ 0x00000000 /* Test */, \ 0x00000001 /* TestNotHandled */, \ 0x00000002 /* TestSpecific */, \ @@ -1876,7 +1896,7 @@ 0x00000014 /* TestEmitTestEventRequest */, \ 0x00000015 /* TestEmitTestFabricScopedEventRequest */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=215)*/ \ + /* GeneratedCommandList (index=216)*/ \ 0x00000000 /* TestSpecificResponse */, \ 0x00000001 /* TestAddArgumentsResponse */, \ 0x00000004 /* TestListInt8UReverseResponse */, \ @@ -1887,8 +1907,13 @@ 0x0000000A /* TestEmitTestEventResponse */, \ 0x0000000B /* TestEmitTestFabricScopedEventResponse */, \ chip::kInvalidCommandId /* end of list */, \ + /* Endpoint: 2, Cluster: Identify (server) */\ + /* AcceptedCommandList (index=226) */ \ + 0x00000000 /* Identify */, \ + 0x00000040 /* TriggerEffect */, \ + chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 2, Cluster: Groups (server) */\ - /* AcceptedCommandList (index=225) */ \ + /* AcceptedCommandList (index=229) */ \ 0x00000000 /* AddGroup */, \ 0x00000001 /* ViewGroup */, \ 0x00000002 /* GetGroupMembership */, \ @@ -1896,20 +1921,41 @@ 0x00000004 /* RemoveAllGroups */, \ 0x00000005 /* AddGroupIfIdentifying */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=232)*/ \ + /* GeneratedCommandList (index=236)*/ \ 0x00000000 /* AddGroupResponse */, \ 0x00000001 /* ViewGroupResponse */, \ 0x00000002 /* GetGroupMembershipResponse */, \ 0x00000003 /* RemoveGroupResponse */, \ chip::kInvalidCommandId /* end of list */, \ + /* Endpoint: 2, Cluster: Scenes (server) */\ + /* AcceptedCommandList (index=241) */ \ + 0x00000000 /* AddScene */, \ + 0x00000001 /* ViewScene */, \ + 0x00000002 /* RemoveScene */, \ + 0x00000003 /* RemoveAllScenes */, \ + 0x00000004 /* StoreScene */, \ + 0x00000005 /* RecallScene */, \ + 0x00000006 /* GetSceneMembership */, \ + chip::kInvalidCommandId /* end of list */, \ + /* GeneratedCommandList (index=249)*/ \ + 0x00000000 /* AddSceneResponse */, \ + 0x00000001 /* ViewSceneResponse */, \ + 0x00000002 /* RemoveSceneResponse */, \ + 0x00000003 /* RemoveAllScenesResponse */, \ + 0x00000004 /* StoreSceneResponse */, \ + 0x00000006 /* GetSceneMembershipResponse */, \ + chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 2, Cluster: On/Off (server) */\ - /* AcceptedCommandList (index=237) */ \ + /* AcceptedCommandList (index=256) */ \ 0x00000000 /* Off */, \ 0x00000001 /* On */, \ 0x00000002 /* Toggle */, \ + 0x00000040 /* OffWithEffect */, \ + 0x00000041 /* OnWithRecallGlobalScene */, \ + 0x00000042 /* OnWithTimedOff */, \ chip::kInvalidCommandId /* end of list */, \ /* Endpoint: 65534, Cluster: Network Commissioning (server) */\ - /* AcceptedCommandList (index=241) */ \ + /* AcceptedCommandList (index=263) */ \ 0x00000000 /* ScanNetworks */, \ 0x00000002 /* AddOrUpdateWiFiNetwork */, \ 0x00000003 /* AddOrUpdateThreadNetwork */, \ @@ -1917,7 +1963,7 @@ 0x00000006 /* ConnectNetwork */, \ 0x00000008 /* ReorderNetwork */, \ chip::kInvalidCommandId /* end of list */, \ - /* GeneratedCommandList (index=248)*/ \ + /* GeneratedCommandList (index=270)*/ \ 0x00000001 /* ScanNetworksResponse */, \ 0x00000005 /* NetworkConfigResponse */, \ 0x00000007 /* ConnectNetworkResponse */, \ @@ -1927,7 +1973,7 @@ // clang-format on // This is an array of EmberAfCluster structures. -#define GENERATED_CLUSTER_COUNT 78 +#define GENERATED_CLUSTER_COUNT 80 // clang-format off #define GENERATED_CLUSTERS { \ { \ @@ -2146,7 +2192,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 42 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 43 ), \ .generatedCommandList = nullptr, \ .eventList = ZAP_GENERATED_EVENTS_INDEX( 12 ), \ .eventCount = 1, \ @@ -2159,7 +2205,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 44 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 45 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2172,7 +2218,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 46 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 47 ), \ .generatedCommandList = nullptr, \ .eventList = ZAP_GENERATED_EVENTS_INDEX( 13 ), \ .eventCount = 3, \ @@ -2185,7 +2231,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 48 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 49 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2198,7 +2244,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 50 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 51 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2211,8 +2257,8 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 54 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 63 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 55 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 64 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ @@ -2224,8 +2270,8 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 68 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 73 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 69 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 74 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ @@ -2276,7 +2322,7 @@ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 76 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 77 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2289,7 +2335,7 @@ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION), \ .functions = chipFuncArrayIdentifyServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 79 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 80 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2302,8 +2348,8 @@ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \ .functions = chipFuncArrayGroupsServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 82 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 89 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 83 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 90 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ @@ -2311,24 +2357,24 @@ /* Endpoint: 1, Cluster: Scenes (server) */ \ .clusterId = 0x00000005, \ .attributes = ZAP_ATTRIBUTE_INDEX(238), \ - .attributeCount = 7, \ - .clusterSize = 11, \ + .attributeCount = 9, \ + .clusterSize = 13, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 94 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 102 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 95 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 103 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ { \ /* Endpoint: 1, Cluster: On/Off (server) */ \ .clusterId = 0x00000006, \ - .attributes = ZAP_ATTRIBUTE_INDEX(245), \ + .attributes = ZAP_ATTRIBUTE_INDEX(247), \ .attributeCount = 7, \ .clusterSize = 13, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION), \ .functions = chipFuncArrayOnOffServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 109 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 110 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2336,7 +2382,7 @@ { \ /* Endpoint: 1, Cluster: On/off Switch Configuration (server) */ \ .clusterId = 0x00000007, \ - .attributes = ZAP_ATTRIBUTE_INDEX(252), \ + .attributes = ZAP_ATTRIBUTE_INDEX(254), \ .attributeCount = 4, \ .clusterSize = 8, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2349,12 +2395,12 @@ { \ /* Endpoint: 1, Cluster: Level Control (server) */ \ .clusterId = 0x00000008, \ - .attributes = ZAP_ATTRIBUTE_INDEX(256), \ + .attributes = ZAP_ATTRIBUTE_INDEX(258), \ .attributeCount = 16, \ .clusterSize = 27, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION), \ .functions = chipFuncArrayLevelControlServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 116 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 117 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2362,7 +2408,7 @@ { \ /* Endpoint: 1, Cluster: Binary Input (Basic) (server) */ \ .clusterId = 0x0000000F, \ - .attributes = ZAP_ATTRIBUTE_INDEX(272), \ + .attributes = ZAP_ATTRIBUTE_INDEX(274), \ .attributeCount = 5, \ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2375,7 +2421,7 @@ { \ /* Endpoint: 1, Cluster: Descriptor (server) */ \ .clusterId = 0x0000001D, \ - .attributes = ZAP_ATTRIBUTE_INDEX(277), \ + .attributes = ZAP_ATTRIBUTE_INDEX(279), \ .attributeCount = 6, \ .clusterSize = 4, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2388,7 +2434,7 @@ { \ /* Endpoint: 1, Cluster: Binding (server) */ \ .clusterId = 0x0000001E, \ - .attributes = ZAP_ATTRIBUTE_INDEX(283), \ + .attributes = ZAP_ATTRIBUTE_INDEX(285), \ .attributeCount = 3, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2401,7 +2447,7 @@ { \ /* Endpoint: 1, Cluster: Actions (server) */ \ .clusterId = 0x00000025, \ - .attributes = ZAP_ATTRIBUTE_INDEX(286), \ + .attributes = ZAP_ATTRIBUTE_INDEX(288), \ .attributeCount = 5, \ .clusterSize = 4, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2414,7 +2460,7 @@ { \ /* Endpoint: 1, Cluster: Power Source (server) */ \ .clusterId = 0x0000002F, \ - .attributes = ZAP_ATTRIBUTE_INDEX(291), \ + .attributes = ZAP_ATTRIBUTE_INDEX(293), \ .attributeCount = 9, \ .clusterSize = 72, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2427,7 +2473,7 @@ { \ /* Endpoint: 1, Cluster: Switch (server) */ \ .clusterId = 0x0000003B, \ - .attributes = ZAP_ATTRIBUTE_INDEX(300), \ + .attributes = ZAP_ATTRIBUTE_INDEX(302), \ .attributeCount = 5, \ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2440,7 +2486,7 @@ { \ /* Endpoint: 1, Cluster: Fixed Label (server) */ \ .clusterId = 0x00000040, \ - .attributes = ZAP_ATTRIBUTE_INDEX(305), \ + .attributes = ZAP_ATTRIBUTE_INDEX(307), \ .attributeCount = 3, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2453,7 +2499,7 @@ { \ /* Endpoint: 1, Cluster: User Label (server) */ \ .clusterId = 0x00000041, \ - .attributes = ZAP_ATTRIBUTE_INDEX(308), \ + .attributes = ZAP_ATTRIBUTE_INDEX(310), \ .attributeCount = 3, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2466,7 +2512,7 @@ { \ /* Endpoint: 1, Cluster: Boolean State (server) */ \ .clusterId = 0x00000045, \ - .attributes = ZAP_ATTRIBUTE_INDEX(311), \ + .attributes = ZAP_ATTRIBUTE_INDEX(313), \ .attributeCount = 3, \ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2479,12 +2525,12 @@ { \ /* Endpoint: 1, Cluster: Mode Select (server) */ \ .clusterId = 0x00000050, \ - .attributes = ZAP_ATTRIBUTE_INDEX(314), \ + .attributes = ZAP_ATTRIBUTE_INDEX(316), \ .attributeCount = 9, \ .clusterSize = 77, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ .functions = chipFuncArrayModeSelectServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 125 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 126 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2492,25 +2538,25 @@ { \ /* Endpoint: 1, Cluster: Door Lock (server) */ \ .clusterId = 0x00000101, \ - .attributes = ZAP_ATTRIBUTE_INDEX(323), \ + .attributes = ZAP_ATTRIBUTE_INDEX(325), \ .attributeCount = 33, \ .clusterSize = 55, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ .functions = chipFuncArrayDoorLockServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 127 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 142 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 128 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 143 ), \ .eventList = ZAP_GENERATED_EVENTS_INDEX( 17 ), \ .eventCount = 4, \ },\ { \ /* Endpoint: 1, Cluster: Window Covering (server) */ \ .clusterId = 0x00000102, \ - .attributes = ZAP_ATTRIBUTE_INDEX(356), \ + .attributes = ZAP_ATTRIBUTE_INDEX(358), \ .attributeCount = 24, \ .clusterSize = 43, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION), \ .functions = chipFuncArrayWindowCoveringServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 148 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 149 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2518,12 +2564,12 @@ { \ /* Endpoint: 1, Cluster: Barrier Control (server) */ \ .clusterId = 0x00000103, \ - .attributes = ZAP_ATTRIBUTE_INDEX(380), \ + .attributes = ZAP_ATTRIBUTE_INDEX(382), \ .attributeCount = 6, \ .clusterSize = 11, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION), \ .functions = chipFuncArrayBarrierControlServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 156 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 157 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2531,7 +2577,7 @@ { \ /* Endpoint: 1, Cluster: Pump Configuration and Control (server) */ \ .clusterId = 0x00000200, \ - .attributes = ZAP_ATTRIBUTE_INDEX(386), \ + .attributes = ZAP_ATTRIBUTE_INDEX(388), \ .attributeCount = 25, \ .clusterSize = 52, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ @@ -2544,12 +2590,12 @@ { \ /* Endpoint: 1, Cluster: Thermostat (server) */ \ .clusterId = 0x00000201, \ - .attributes = ZAP_ATTRIBUTE_INDEX(411), \ + .attributes = ZAP_ATTRIBUTE_INDEX(413), \ .attributeCount = 16, \ .clusterSize = 31, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ .functions = chipFuncArrayThermostatServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 159 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 160 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2557,7 +2603,7 @@ { \ /* Endpoint: 1, Cluster: Fan Control (server) */ \ .clusterId = 0x00000202, \ - .attributes = ZAP_ATTRIBUTE_INDEX(427), \ + .attributes = ZAP_ATTRIBUTE_INDEX(429), \ .attributeCount = 13, \ .clusterSize = 17, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ @@ -2570,7 +2616,7 @@ { \ /* Endpoint: 1, Cluster: Thermostat User Interface Configuration (server) */ \ .clusterId = 0x00000204, \ - .attributes = ZAP_ATTRIBUTE_INDEX(440), \ + .attributes = ZAP_ATTRIBUTE_INDEX(442), \ .attributeCount = 5, \ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION), \ @@ -2583,12 +2629,12 @@ { \ /* Endpoint: 1, Cluster: Color Control (server) */ \ .clusterId = 0x00000300, \ - .attributes = ZAP_ATTRIBUTE_INDEX(445), \ + .attributes = ZAP_ATTRIBUTE_INDEX(447), \ .attributeCount = 54, \ .clusterSize = 345, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION), \ .functions = chipFuncArrayColorControlServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 161 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 162 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2596,7 +2642,7 @@ { \ /* Endpoint: 1, Cluster: Illuminance Measurement (server) */ \ .clusterId = 0x00000400, \ - .attributes = ZAP_ATTRIBUTE_INDEX(499), \ + .attributes = ZAP_ATTRIBUTE_INDEX(501), \ .attributeCount = 7, \ .clusterSize = 15, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2609,7 +2655,7 @@ { \ /* Endpoint: 1, Cluster: Temperature Measurement (server) */ \ .clusterId = 0x00000402, \ - .attributes = ZAP_ATTRIBUTE_INDEX(506), \ + .attributes = ZAP_ATTRIBUTE_INDEX(508), \ .attributeCount = 6, \ .clusterSize = 14, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2622,7 +2668,7 @@ { \ /* Endpoint: 1, Cluster: Pressure Measurement (server) */ \ .clusterId = 0x00000403, \ - .attributes = ZAP_ATTRIBUTE_INDEX(512), \ + .attributes = ZAP_ATTRIBUTE_INDEX(514), \ .attributeCount = 5, \ .clusterSize = 12, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2635,7 +2681,7 @@ { \ /* Endpoint: 1, Cluster: Flow Measurement (server) */ \ .clusterId = 0x00000404, \ - .attributes = ZAP_ATTRIBUTE_INDEX(517), \ + .attributes = ZAP_ATTRIBUTE_INDEX(519), \ .attributeCount = 6, \ .clusterSize = 14, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2648,7 +2694,7 @@ { \ /* Endpoint: 1, Cluster: Relative Humidity Measurement (server) */ \ .clusterId = 0x00000405, \ - .attributes = ZAP_ATTRIBUTE_INDEX(523), \ + .attributes = ZAP_ATTRIBUTE_INDEX(525), \ .attributeCount = 6, \ .clusterSize = 14, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2661,7 +2707,7 @@ { \ /* Endpoint: 1, Cluster: Occupancy Sensing (server) */ \ .clusterId = 0x00000406, \ - .attributes = ZAP_ATTRIBUTE_INDEX(529), \ + .attributes = ZAP_ATTRIBUTE_INDEX(531), \ .attributeCount = 5, \ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \ @@ -2674,7 +2720,7 @@ { \ /* Endpoint: 1, Cluster: Wake on LAN (server) */ \ .clusterId = 0x00000503, \ - .attributes = ZAP_ATTRIBUTE_INDEX(534), \ + .attributes = ZAP_ATTRIBUTE_INDEX(536), \ .attributeCount = 3, \ .clusterSize = 39, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2687,7 +2733,7 @@ { \ /* Endpoint: 1, Cluster: Channel (server) */ \ .clusterId = 0x00000504, \ - .attributes = ZAP_ATTRIBUTE_INDEX(537), \ + .attributes = ZAP_ATTRIBUTE_INDEX(539), \ .attributeCount = 3, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2700,20 +2746,20 @@ { \ /* Endpoint: 1, Cluster: Target Navigator (server) */ \ .clusterId = 0x00000505, \ - .attributes = ZAP_ATTRIBUTE_INDEX(540), \ + .attributes = ZAP_ATTRIBUTE_INDEX(542), \ .attributeCount = 4, \ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 181 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 183 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 182 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 184 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ { \ /* Endpoint: 1, Cluster: Media Playback (server) */ \ .clusterId = 0x00000506, \ - .attributes = ZAP_ATTRIBUTE_INDEX(544), \ + .attributes = ZAP_ATTRIBUTE_INDEX(546), \ .attributeCount = 8, \ .clusterSize = 43, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2726,12 +2772,12 @@ { \ /* Endpoint: 1, Cluster: Media Input (server) */ \ .clusterId = 0x00000507, \ - .attributes = ZAP_ATTRIBUTE_INDEX(552), \ + .attributes = ZAP_ATTRIBUTE_INDEX(554), \ .attributeCount = 4, \ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 185 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 186 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2739,12 +2785,12 @@ { \ /* Endpoint: 1, Cluster: Low Power (server) */ \ .clusterId = 0x00000508, \ - .attributes = ZAP_ATTRIBUTE_INDEX(556), \ + .attributes = ZAP_ATTRIBUTE_INDEX(558), \ .attributeCount = 2, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 190 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 191 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2752,20 +2798,20 @@ { \ /* Endpoint: 1, Cluster: Keypad Input (server) */ \ .clusterId = 0x00000509, \ - .attributes = ZAP_ATTRIBUTE_INDEX(558), \ + .attributes = ZAP_ATTRIBUTE_INDEX(560), \ .attributeCount = 2, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 192 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 194 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 193 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 195 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ { \ /* Endpoint: 1, Cluster: Content Launcher (server) */ \ .clusterId = 0x0000050A, \ - .attributes = ZAP_ATTRIBUTE_INDEX(560), \ + .attributes = ZAP_ATTRIBUTE_INDEX(562), \ .attributeCount = 4, \ .clusterSize = 10, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2778,7 +2824,7 @@ { \ /* Endpoint: 1, Cluster: Audio Output (server) */ \ .clusterId = 0x0000050B, \ - .attributes = ZAP_ATTRIBUTE_INDEX(564), \ + .attributes = ZAP_ATTRIBUTE_INDEX(566), \ .attributeCount = 4, \ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2791,7 +2837,7 @@ { \ /* Endpoint: 1, Cluster: Application Launcher (server) */ \ .clusterId = 0x0000050C, \ - .attributes = ZAP_ATTRIBUTE_INDEX(568), \ + .attributes = ZAP_ATTRIBUTE_INDEX(570), \ .attributeCount = 3, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2804,7 +2850,7 @@ { \ /* Endpoint: 1, Cluster: Application Basic (server) */ \ .clusterId = 0x0000050D, \ - .attributes = ZAP_ATTRIBUTE_INDEX(571), \ + .attributes = ZAP_ATTRIBUTE_INDEX(573), \ .attributeCount = 9, \ .clusterSize = 110, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2817,7 +2863,7 @@ { \ /* Endpoint: 1, Cluster: Account Login (server) */ \ .clusterId = 0x0000050E, \ - .attributes = ZAP_ATTRIBUTE_INDEX(580), \ + .attributes = ZAP_ATTRIBUTE_INDEX(582), \ .attributeCount = 2, \ .clusterSize = 6, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2830,7 +2876,7 @@ { \ /* Endpoint: 1, Cluster: Electrical Measurement (server) */ \ .clusterId = 0x00000B04, \ - .attributes = ZAP_ATTRIBUTE_INDEX(582), \ + .attributes = ZAP_ATTRIBUTE_INDEX(584), \ .attributeCount = 13, \ .clusterSize = 32, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2843,38 +2889,64 @@ { \ /* Endpoint: 1, Cluster: Unit Testing (server) */ \ .clusterId = 0xFFF1FC05, \ - .attributes = ZAP_ATTRIBUTE_INDEX(595), \ + .attributes = ZAP_ATTRIBUTE_INDEX(597), \ .attributeCount = 83, \ .clusterSize = 2289, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 196 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 215 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 197 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 216 ), \ .eventList = ZAP_GENERATED_EVENTS_INDEX( 21 ), \ .eventCount = 2, \ },\ + { \ + /* Endpoint: 2, Cluster: Identify (server) */ \ + .clusterId = 0x00000003, \ + .attributes = ZAP_ATTRIBUTE_INDEX(680), \ + .attributeCount = 4, \ + .clusterSize = 9, \ + .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION), \ + .functions = chipFuncArrayIdentifyServer, \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 226 ), \ + .generatedCommandList = nullptr, \ + .eventList = nullptr, \ + .eventCount = 0, \ + },\ { \ /* Endpoint: 2, Cluster: Groups (server) */ \ .clusterId = 0x00000004, \ - .attributes = ZAP_ATTRIBUTE_INDEX(678), \ + .attributes = ZAP_ATTRIBUTE_INDEX(684), \ .attributeCount = 3, \ .clusterSize = 7, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \ .functions = chipFuncArrayGroupsServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 225 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 232 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 229 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 236 ), \ + .eventList = nullptr, \ + .eventCount = 0, \ + },\ + { \ + /* Endpoint: 2, Cluster: Scenes (server) */ \ + .clusterId = 0x00000005, \ + .attributes = ZAP_ATTRIBUTE_INDEX(687), \ + .attributeCount = 9, \ + .clusterSize = 13, \ + .mask = ZAP_CLUSTER_MASK(SERVER), \ + .functions = NULL, \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 241 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 249 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ { \ /* Endpoint: 2, Cluster: On/Off (server) */ \ .clusterId = 0x00000006, \ - .attributes = ZAP_ATTRIBUTE_INDEX(681), \ + .attributes = ZAP_ATTRIBUTE_INDEX(696), \ .attributeCount = 7, \ .clusterSize = 13, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(SHUTDOWN_FUNCTION), \ .functions = chipFuncArrayOnOffServer, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 237 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 256 ), \ .generatedCommandList = nullptr, \ .eventList = nullptr, \ .eventCount = 0, \ @@ -2882,7 +2954,7 @@ { \ /* Endpoint: 2, Cluster: Descriptor (server) */ \ .clusterId = 0x0000001D, \ - .attributes = ZAP_ATTRIBUTE_INDEX(688), \ + .attributes = ZAP_ATTRIBUTE_INDEX(703), \ .attributeCount = 6, \ .clusterSize = 4, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2895,7 +2967,7 @@ { \ /* Endpoint: 2, Cluster: Power Source (server) */ \ .clusterId = 0x0000002F, \ - .attributes = ZAP_ATTRIBUTE_INDEX(694), \ + .attributes = ZAP_ATTRIBUTE_INDEX(709), \ .attributeCount = 9, \ .clusterSize = 72, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2908,7 +2980,7 @@ { \ /* Endpoint: 2, Cluster: Occupancy Sensing (server) */ \ .clusterId = 0x00000406, \ - .attributes = ZAP_ATTRIBUTE_INDEX(703), \ + .attributes = ZAP_ATTRIBUTE_INDEX(718), \ .attributeCount = 5, \ .clusterSize = 9, \ .mask = ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \ @@ -2921,7 +2993,7 @@ { \ /* Endpoint: 65534, Cluster: Descriptor (server) */ \ .clusterId = 0x0000001D, \ - .attributes = ZAP_ATTRIBUTE_INDEX(708), \ + .attributes = ZAP_ATTRIBUTE_INDEX(723), \ .attributeCount = 6, \ .clusterSize = 4, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -2934,13 +3006,13 @@ { \ /* Endpoint: 65534, Cluster: Network Commissioning (server) */ \ .clusterId = 0x00000031, \ - .attributes = ZAP_ATTRIBUTE_INDEX(714), \ + .attributes = ZAP_ATTRIBUTE_INDEX(729), \ .attributeCount = 10, \ .clusterSize = 0, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ - .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 241 ), \ - .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 248 ), \ + .acceptedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 263 ), \ + .generatedCommandList = ZAP_GENERATED_COMMANDS_INDEX( 270 ), \ .eventList = nullptr, \ .eventCount = 0, \ },\ @@ -2948,13 +3020,13 @@ // clang-format on -#define ZAP_FIXED_ENDPOINT_DATA_VERSION_COUNT 77 +#define ZAP_FIXED_ENDPOINT_DATA_VERSION_COUNT 79 // This is an array of EmberAfEndpointType structures. #define GENERATED_ENDPOINT_TYPES \ { \ - { ZAP_CLUSTER_INDEX(0), 27, 355 }, { ZAP_CLUSTER_INDEX(27), 44, 3490 }, { ZAP_CLUSTER_INDEX(71), 5, 105 }, \ - { ZAP_CLUSTER_INDEX(76), 2, 4 }, \ + { ZAP_CLUSTER_INDEX(0), 27, 355 }, { ZAP_CLUSTER_INDEX(27), 44, 3492 }, { ZAP_CLUSTER_INDEX(71), 7, 127 }, \ + { ZAP_CLUSTER_INDEX(78), 2, 4 }, \ } // Largest attribute size is needed for various buffers @@ -2966,7 +3038,7 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, #define ATTRIBUTE_SINGLETONS_SIZE (37) // Total size of attribute storage -#define ATTRIBUTE_MAX_SIZE (3954) +#define ATTRIBUTE_MAX_SIZE (3978) // Number of fixed endpoints #define FIXED_ENDPOINT_COUNT (4) @@ -2987,7 +3059,7 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device types #define FIXED_DEVICE_TYPES \ { \ - { 0x0016, 1 }, { 0x0100, 1 }, { 0x0100, 1 }, \ + { 0x0011, 1 }, { 0x0016, 1 }, { 0x0100, 1 }, { 0x0011, 1 }, { 0x0100, 1 }, { 0x0011, 1 }, \ { \ 0xF002, 1 \ } \ @@ -2996,13 +3068,13 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device type offsets #define FIXED_DEVICE_TYPE_OFFSETS \ { \ - 0, 1, 2, 3 \ + 0, 2, 4, 6 \ } // Array of device type lengths #define FIXED_DEVICE_TYPE_LENGTHS \ { \ - 1, 1, 1, 1 \ + 2, 2, 2, 1 \ } // Array of endpoint types supported on each endpoint diff --git a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/gen_config.h b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/gen_config.h index 288f62bb5d53f1..bf4dbc94ede3f7 100644 --- a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/gen_config.h +++ b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/gen_config.h @@ -21,9 +21,9 @@ #pragma once /**** Cluster endpoint counts ****/ -#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (2) +#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (3) #define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (3) -#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (1) +#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (2) #define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (2) #define EMBER_AF_ON_OFF_SWITCH_CONFIGURATION_CLUSTER_SERVER_ENDPOINT_COUNT (1) #define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1) diff --git a/src/app/CommandHandler.cpp b/src/app/CommandHandler.cpp index 14ad098965f5e5..d291d8154d421f 100644 --- a/src/app/CommandHandler.cpp +++ b/src/app/CommandHandler.cpp @@ -303,6 +303,9 @@ Status CommandHandler::ProcessCommandDataIB(CommandDataIB::Parser & aCommandElem if (CommandIsFabricScoped(concretePath.mClusterId, concretePath.mCommandId)) { + // SPEC: Else if the command in the path is fabric-scoped and there is no accessing fabric, + // a CommandStatusIB SHALL be generated with the UNSUPPORTED_ACCESS Status Code. + // Fabric-scoped commands are not allowed before a specific accessing fabric is available. // This is mostly just during a PASE session before AddNOC. if (GetAccessingFabricIndex() == kUndefinedFabricIndex) @@ -470,8 +473,7 @@ CHIP_ERROR CommandHandler::AddStatus(const ConcreteCommandPath & aCommandPath, c return AddStatusInternal(aCommandPath, StatusIB(aStatus)); } -CHIP_ERROR CommandHandler::AddStatusAndLogIfFailure(const ConcreteCommandPath & aCommandPath, const Status aStatus, - const char * aMessage) +void CommandHandler::AddStatusAndLogIfFailure(const ConcreteCommandPath & aCommandPath, const Status aStatus, const char * aMessage) { if (aStatus != Status::Success) { @@ -482,7 +484,15 @@ CHIP_ERROR CommandHandler::AddStatusAndLogIfFailure(const ConcreteCommandPath & ChipLogValueIMStatus(aStatus), aMessage); } - return AddStatus(aCommandPath, aStatus); + CHIP_ERROR err = AddStatus(aCommandPath, aStatus); + if (err != CHIP_NO_ERROR) + { + ChipLogError(DataManagement, + "Failed to set status on Endpoint=%u Cluster=" ChipLogFormatMEI " Command=" ChipLogFormatMEI + ": %" CHIP_ERROR_FORMAT, + aCommandPath.mEndpointId, ChipLogValueMEI(aCommandPath.mClusterId), ChipLogValueMEI(aCommandPath.mCommandId), + err.Format()); + } } CHIP_ERROR CommandHandler::AddClusterSpecificSuccess(const ConcreteCommandPath & aCommandPath, ClusterStatus aClusterStatus) diff --git a/src/app/CommandHandler.h b/src/app/CommandHandler.h index e2d2f4a6f75e1e..bc96583abd7597 100644 --- a/src/app/CommandHandler.h +++ b/src/app/CommandHandler.h @@ -173,9 +173,10 @@ class CommandHandler : public Messaging::ExchangeDelegate CHIP_ERROR AddStatus(const ConcreteCommandPath & aCommandPath, const Protocols::InteractionModel::Status aStatus); // Same as AddStatus, but logs that the command represented by aCommandPath failed with the given - // error status and error message, if aStatus is an error. - CHIP_ERROR AddStatusAndLogIfFailure(const ConcreteCommandPath & aCommandPath, const Protocols::InteractionModel::Status aStatus, - const char * aMessage); + // error status and error message, if aStatus is an error. Errors on AddStatus are just logged + // (since the caller likely can only log and not further add a status). + void AddStatusAndLogIfFailure(const ConcreteCommandPath & aCommandPath, const Protocols::InteractionModel::Status aStatus, + const char * aMessage); CHIP_ERROR AddClusterSpecificSuccess(const ConcreteCommandPath & aCommandPath, ClusterStatus aClusterStatus); diff --git a/src/app/DataModelRevision.h b/src/app/DataModelRevision.h index a476b32c93b1c8..47ecb626a13ffa 100644 --- a/src/app/DataModelRevision.h +++ b/src/app/DataModelRevision.h @@ -22,7 +22,10 @@ * * A monotonic number identifying the revision number of the Data Model against * which the Node is certified. + * + * See section 7.1.1. "Revision History" in the "Data Model Specification" + * chapter of the core Matter specification. */ #ifndef CHIP_DEVICE_DATA_MODEL_REVISION -#define CHIP_DEVICE_DATA_MODEL_REVISION 1 +#define CHIP_DEVICE_DATA_MODEL_REVISION 17 #endif diff --git a/src/app/InteractionModelRevision.h b/src/app/InteractionModelRevision.h index 8f38a342969ddd..7e92d7c2d58aba 100644 --- a/src/app/InteractionModelRevision.h +++ b/src/app/InteractionModelRevision.h @@ -24,9 +24,12 @@ * CHIP_DEVICE_INTERACTION_MODEL_REVISION * * A monothonic number identifying the interaction model revision. + * + * See section 8.1.1. "Revision History" in the "Interaction Model + * Specification" chapter of the core Matter specification. */ #ifndef CHIP_DEVICE_INTERACTION_MODEL_REVISION -#define CHIP_DEVICE_INTERACTION_MODEL_REVISION 1 +#define CHIP_DEVICE_INTERACTION_MODEL_REVISION 10 #endif constexpr uint8_t kInteractionModelRevisionTag = 0xFF; diff --git a/src/app/ReadHandler.cpp b/src/app/ReadHandler.cpp index 4e9e8fccdf5646..1295cc6920c462 100644 --- a/src/app/ReadHandler.cpp +++ b/src/app/ReadHandler.cpp @@ -79,7 +79,6 @@ ReadHandler::ReadHandler(ManagementCallback & apCallback, Messaging::ExchangeCon VerifyOrDie(observer != nullptr); mObserver = observer; - mObserver->OnReadHandlerCreated(this); } #if CHIP_CONFIG_PERSIST_SUBSCRIPTIONS @@ -92,7 +91,6 @@ ReadHandler::ReadHandler(ManagementCallback & apCallback, Observer * observer) : VerifyOrDie(observer != nullptr); mObserver = observer; - mObserver->OnReadHandlerCreated(this); } void ReadHandler::ResumeSubscription(CASESessionManager & caseSessionManager, @@ -235,6 +233,7 @@ CHIP_ERROR ReadHandler::OnStatusResponse(Messaging::ExchangeContext * apExchange { appCallback->OnSubscriptionEstablished(*this); } + mObserver->OnSubscriptionEstablished(this); } } else @@ -246,10 +245,10 @@ CHIP_ERROR ReadHandler::OnStatusResponse(Messaging::ExchangeContext * apExchange return CHIP_NO_ERROR; } - MoveToState(HandlerState::GeneratingReports); + MoveToState(HandlerState::CanStartReporting); break; - case HandlerState::GeneratingReports: + case HandlerState::CanStartReporting: case HandlerState::Idle: default: err = CHIP_ERROR_INCORRECT_STATE; @@ -262,7 +261,7 @@ CHIP_ERROR ReadHandler::OnStatusResponse(Messaging::ExchangeContext * apExchange CHIP_ERROR ReadHandler::SendStatusReport(Protocols::InteractionModel::Status aStatus) { - VerifyOrReturnLogError(mState == HandlerState::GeneratingReports, CHIP_ERROR_INCORRECT_STATE); + VerifyOrReturnLogError(mState == HandlerState::CanStartReporting, CHIP_ERROR_INCORRECT_STATE); if (IsPriming() || IsChunkedReport()) { mSessionHandle.Grab(mExchangeCtx->GetSessionHandle()); @@ -286,7 +285,7 @@ CHIP_ERROR ReadHandler::SendStatusReport(Protocols::InteractionModel::Status aSt CHIP_ERROR ReadHandler::SendReportData(System::PacketBufferHandle && aPayload, bool aMoreChunks) { - VerifyOrReturnLogError(mState == HandlerState::GeneratingReports, CHIP_ERROR_INCORRECT_STATE); + VerifyOrReturnLogError(mState == HandlerState::CanStartReporting, CHIP_ERROR_INCORRECT_STATE); VerifyOrDie(!IsAwaitingReportResponse()); // Should not be reportable! if (IsPriming() || IsChunkedReport()) { @@ -335,7 +334,7 @@ CHIP_ERROR ReadHandler::SendReportData(System::PacketBufferHandle && aPayload, b // Priming reports are handled when we send a SubscribeResponse. if (IsType(InteractionType::Subscribe) && !IsPriming() && !IsChunkedReport()) { - mObserver->OnSubscriptionAction(this); + mObserver->OnSubscriptionReportSent(this); } } if (!aMoreChunks) @@ -456,7 +455,7 @@ CHIP_ERROR ReadHandler::ProcessReadRequest(System::PacketBufferHandle && aPayloa ReturnErrorOnFailure(readRequestParser.GetIsFabricFiltered(&isFabricFiltered)); SetStateFlag(ReadHandlerFlags::FabricFiltered, isFabricFiltered); ReturnErrorOnFailure(readRequestParser.ExitContainer()); - MoveToState(HandlerState::GeneratingReports); + MoveToState(HandlerState::CanStartReporting); mExchangeCtx->WillSendMessage(); @@ -574,8 +573,8 @@ const char * ReadHandler::GetStateStr() const return "Idle"; case HandlerState::AwaitingDestruction: return "AwaitingDestruction"; - case HandlerState::GeneratingReports: - return "GeneratingReports"; + case HandlerState::CanStartReporting: + return "CanStartReporting"; case HandlerState::AwaitingReportResponse: return "AwaitingReportResponse"; @@ -603,10 +602,17 @@ void ReadHandler::MoveToState(const HandlerState aTargetState) // If we just unblocked sending reports, let's go ahead and schedule the reporting // engine to run to kick that off. // - if (aTargetState == HandlerState::GeneratingReports) + if (aTargetState == HandlerState::CanStartReporting) { - // mObserver will take care of scheduling the report as soon as allowed - mObserver->OnBecameReportable(this); + if (ShouldReportUnscheduled()) + { + InteractionModelEngine::GetInstance()->GetReportingEngine().ScheduleRun(); + } + else + { + // If we became reportable, the scheduler will schedule a run as soon as allowed + mObserver->OnBecameReportable(this); + } } } @@ -647,8 +653,6 @@ CHIP_ERROR ReadHandler::SendSubscribeResponse() ReturnErrorOnFailure(writer.Finalize(&packet)); VerifyOrReturnLogError(mExchangeCtx, CHIP_ERROR_INCORRECT_STATE); - mObserver->OnSubscriptionAction(this); - ClearStateFlag(ReadHandlerFlags::PrimingReports); return mExchangeCtx->SendMessage(Protocols::InteractionModel::MsgType::SubscribeResponse, std::move(packet)); } @@ -785,7 +789,7 @@ CHIP_ERROR ReadHandler::ProcessSubscribeRequest(System::PacketBufferHandle && aP SetStateFlag(ReadHandlerFlags::FabricFiltered, isFabricFiltered); ReturnErrorOnFailure(Crypto::DRBG_get_bytes(reinterpret_cast(&mSubscriptionId), sizeof(mSubscriptionId))); ReturnErrorOnFailure(subscribeRequestParser.ExitContainer()); - MoveToState(HandlerState::GeneratingReports); + MoveToState(HandlerState::CanStartReporting); mExchangeCtx->WillSendMessage(); @@ -872,11 +876,11 @@ void ReadHandler::ForceDirtyState() void ReadHandler::SetStateFlag(ReadHandlerFlags aFlag, bool aValue) { - bool oldReportable = IsReportable(); + bool oldReportable = ShouldStartReporting(); mFlags.Set(aFlag, aValue); // If we became reportable, schedule a reporting run. - if (!oldReportable && IsReportable()) + if (!oldReportable && ShouldStartReporting()) { // If we became reportable, the scheduler will schedule a run as soon as allowed mObserver->OnBecameReportable(this); @@ -895,7 +899,7 @@ void ReadHandler::HandleDeviceConnected(void * context, Messaging::ExchangeManag _this->mSessionHandle.Grab(sessionHandle); - _this->MoveToState(HandlerState::GeneratingReports); + _this->MoveToState(HandlerState::CanStartReporting); ObjectList * attributePath = _this->mpAttributePathList; while (attributePath) diff --git a/src/app/ReadHandler.h b/src/app/ReadHandler.h index a87c121ffaf8b0..ecdc0c1c0696c1 100644 --- a/src/app/ReadHandler.h +++ b/src/app/ReadHandler.h @@ -166,20 +166,23 @@ class ReadHandler : public Messaging::ExchangeDelegate public: virtual ~Observer() = default; - /// @brief Callback invoked to notify a ReadHandler was created and can be registered - /// @param[in] apReadHandler ReadHandler getting added - virtual void OnReadHandlerCreated(ReadHandler * apReadHandler) = 0; - - /// @brief Callback invoked when a ReadHandler went from a non reportable state to a reportable state so a report can be - /// sent immediately if the minimal interval allows it. Otherwise the report should be rescheduled to the earliest time - /// allowed. - /// @param[in] apReadHandler ReadHandler that became dirty + /// @brief Callback invoked to notify a subscription was successfully established for the ReadHandler + /// @param[in] apReadHandler ReadHandler that completed its subscription + virtual void OnSubscriptionEstablished(ReadHandler * apReadHandler) = 0; + + /// @brief Callback invoked when a ReadHandler went from a non reportable state to a reportable state. Indicates to the + /// observer that a report should be emitted when the min interval allows it. + /// + /// This will only be invoked for subscribe-type ReadHandler objects, and only after + /// OnSubscriptionEstablished has been called. + /// + /// @param[in] apReadHandler ReadHandler that became dirty and in HandlerState::CanStartReporting state virtual void OnBecameReportable(ReadHandler * apReadHandler) = 0; /// @brief Callback invoked when the read handler needs to make sure to send a message to the subscriber within the next /// maxInterval time period. /// @param[in] apReadHandler ReadHandler that has generated a report - virtual void OnSubscriptionAction(ReadHandler * apReadHandler) = 0; + virtual void OnSubscriptionReportSent(ReadHandler * apReadHandler) = 0; /// @brief Callback invoked when a ReadHandler is getting removed so it can be unregistered /// @param[in] apReadHandler ReadHandler getting destroyed @@ -333,13 +336,22 @@ class ReadHandler : public Messaging::ExchangeDelegate bool IsIdle() const { return mState == HandlerState::Idle; } /// @brief Returns whether the ReadHandler is in a state where it can send a report and there is data to report. - bool IsReportable() const + bool ShouldStartReporting() const { - // Important: Anything that changes the state IsReportable must call mObserver->OnBecameReportable(this) for the scheduler - // to plan the next run accordingly. - return mState == HandlerState::GeneratingReports && IsDirty(); + // Important: Anything that changes ShouldStartReporting() from false to true + // (which can only happen for subscriptions) must call + // mObserver->OnBecameReportable(this). + return CanStartReporting() && (ShouldReportUnscheduled() || IsDirty()); + } + /// @brief CanStartReporting() is true if the ReadHandler is in a state where it could generate + /// a (possibly empty) report if someone asked it to. + bool CanStartReporting() const { return mState == HandlerState::CanStartReporting; } + /// @brief ShouldReportUnscheduled() is true if the ReadHandler should be asked to generate reports + /// without consulting the report scheduler. + bool ShouldReportUnscheduled() const + { + return CanStartReporting() && (IsType(ReadHandler::InteractionType::Read) || IsPriming()); } - bool IsGeneratingReports() const { return mState == HandlerState::GeneratingReports; } bool IsAwaitingReportResponse() const { return mState == HandlerState::AwaitingReportResponse; } // Resets the path iterator to the beginning of the whole report for generating a series of new reports. @@ -418,14 +430,14 @@ class ReadHandler : public Messaging::ExchangeDelegate friend class chip::app::reporting::Engine; friend class chip::app::InteractionModelEngine; - // The report scheduler needs to be able to access StateFlag private functions IsReportable(), IsGeneratingReports(), + // The report scheduler needs to be able to access StateFlag private functions ShouldStartReporting(), CanStartReporting(), // ForceDirtyState() and IsDirty() to know when to schedule a run so it is declared as a friend class. friend class chip::app::reporting::ReportScheduler; enum class HandlerState : uint8_t { Idle, ///< The handler has been initialized and is ready - GeneratingReports, ///< The handler has is now capable of generating reports and may generate one immediately + CanStartReporting, ///< The handler has is now capable of generating reports and may generate one immediately ///< or later when other criteria are satisfied (e.g hold-off for min reporting interval). AwaitingReportResponse, ///< The handler has sent the report to the client and is awaiting a status response. AwaitingDestruction, ///< The object has completed its work and is awaiting destruction by the application. diff --git a/src/app/clusters/group-key-mgmt-server/group-key-mgmt-server.cpp b/src/app/clusters/group-key-mgmt-server/group-key-mgmt-server.cpp index 9ff43d9a2ef834..fcd0dfa1353516 100644 --- a/src/app/clusters/group-key-mgmt-server/group-key-mgmt-server.cpp +++ b/src/app/clusters/group-key-mgmt-server/group-key-mgmt-server.cpp @@ -401,7 +401,34 @@ ValidateKeySetWriteArguments(const chip::app::Clusters::GroupKeyManagement::Comm return Status::Success; } -constexpr uint16_t GroupKeyManagementAttributeAccess::kClusterRevision; +bool GetProviderAndFabric(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, + Credentials::GroupDataProvider ** outGroupDataProvider, const FabricInfo ** outFabricInfo) +{ + VerifyOrDie(commandObj != nullptr); + VerifyOrDie(outGroupDataProvider != nullptr); + VerifyOrDie(outFabricInfo != nullptr); + + // Internal failures on internal inconsistencies. + auto provider = GetGroupDataProvider(); + auto fabric = Server::GetInstance().GetFabricTable().FindFabricWithIndex(commandObj->GetAccessingFabricIndex()); + + if (nullptr == provider) + { + commandObj->AddStatusAndLogIfFailure(commandPath, Status::Failure, "Internal consistency error on provider!"); + return false; + } + + if (nullptr == fabric) + { + commandObj->AddStatusAndLogIfFailure(commandPath, Status::Failure, "Internal consistency error on access fabric!"); + return false; + } + + *outGroupDataProvider = provider; + *outFabricInfo = fabric; + + return true; +} GroupKeyManagementAttributeAccess gAttribute; @@ -420,12 +447,12 @@ bool emberAfGroupKeyManagementClusterKeySetWriteCallback( chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, const chip::app::Clusters::GroupKeyManagement::Commands::KeySetWrite::DecodableType & commandData) { - auto provider = GetGroupDataProvider(); - auto fabric = Server::GetInstance().GetFabricTable().FindFabricWithIndex(commandObj->GetAccessingFabricIndex()); + Credentials::GroupDataProvider * provider = nullptr; + const FabricInfo * fabric = nullptr; - if (nullptr == provider || nullptr == fabric) + if (!GetProviderAndFabric(commandObj, commandPath, &provider, &fabric)) { - commandObj->AddStatusAndLogIfFailure(commandPath, Status::Failure, "Internal consistency error on provider/fabric"); + // Command will already have status populated from validation. return true; } @@ -516,11 +543,7 @@ bool emberAfGroupKeyManagementClusterKeySetWriteCallback( } // Send response - err = commandObj->AddStatus(commandPath, StatusIB(err).mStatus); - if (CHIP_NO_ERROR != err) - { - ChipLogDetail(Zcl, "GroupKeyManagementCluster: KeySetWrite failed: %" CHIP_ERROR_FORMAT, err.Format()); - } + commandObj->AddStatus(commandPath, StatusIB(err).mStatus); return true; } @@ -528,20 +551,21 @@ bool emberAfGroupKeyManagementClusterKeySetReadCallback( chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, const chip::app::Clusters::GroupKeyManagement::Commands::KeySetRead::DecodableType & commandData) { - auto fabric = commandObj->GetAccessingFabricIndex(); - auto * provider = GetGroupDataProvider(); + Credentials::GroupDataProvider * provider = nullptr; + const FabricInfo * fabric = nullptr; - if (nullptr == provider) + if (!GetProviderAndFabric(commandObj, commandPath, &provider, &fabric)) { - commandObj->AddStatus(commandPath, Status::Failure); + // Command will already have status populated from validation. return true; } + FabricIndex fabricIndex = fabric->GetFabricIndex(); GroupDataProvider::KeySet keyset; - if (CHIP_NO_ERROR != provider->GetKeySet(fabric, commandData.groupKeySetID, keyset)) + if (CHIP_NO_ERROR != provider->GetKeySet(fabricIndex, commandData.groupKeySetID, keyset)) { // KeySet ID not found - commandObj->AddStatus(commandPath, Status::NotFound); + commandObj->AddStatusAndLogIfFailure(commandPath, Status::NotFound, "Keyset ID not found in KeySetRead"); return true; } @@ -592,30 +616,40 @@ bool emberAfGroupKeyManagementClusterKeySetRemoveCallback( const chip::app::Clusters::GroupKeyManagement::Commands::KeySetRemove::DecodableType & commandData) { - auto fabric = commandObj->GetAccessingFabricIndex(); - auto * provider = GetGroupDataProvider(); - Status status = Status::Failure; + Credentials::GroupDataProvider * provider = nullptr; + const FabricInfo * fabric = nullptr; - if (nullptr != provider) + if (!GetProviderAndFabric(commandObj, commandPath, &provider, &fabric)) { - // Remove keyset - CHIP_ERROR err = provider->RemoveKeySet(fabric, commandData.groupKeySetID); - if (CHIP_ERROR_KEY_NOT_FOUND == err) - { - status = Status::NotFound; - } - else if (CHIP_NO_ERROR == err) - { - status = Status::Success; - } + // Command will already have status populated from validation. + return true; } - // Send response - CHIP_ERROR send_err = commandObj->AddStatus(commandPath, status); - if (CHIP_NO_ERROR != send_err) + if (commandData.groupKeySetID == GroupDataProvider::kIdentityProtectionKeySetId) + { + // SPEC: This command SHALL fail with an INVALID_COMMAND status code back to the initiator if the GroupKeySetID being + // removed is 0, which is the Key Set associated with the Identity Protection Key (IPK). + commandObj->AddStatusAndLogIfFailure(commandPath, Status::InvalidCommand, + "Attempted to KeySetRemove the identity protection key!"); + return true; + } + + // Remove keyset + FabricIndex fabricIndex = fabric->GetFabricIndex(); + CHIP_ERROR err = provider->RemoveKeySet(fabricIndex, commandData.groupKeySetID); + + Status status = Status::Success; + if (CHIP_ERROR_KEY_NOT_FOUND == err) + { + status = Status::NotFound; + } + else if (CHIP_NO_ERROR != err) { - ChipLogDetail(Zcl, "GroupKeyManagementCluster: KeySetRemove failed: %" CHIP_ERROR_FORMAT, send_err.Format()); + status = Status::Failure; } + + // Send status response. + commandObj->AddStatusAndLogIfFailure(commandPath, status, "KeySetRemove failed"); return true; } @@ -654,19 +688,20 @@ bool emberAfGroupKeyManagementClusterKeySetReadAllIndicesCallback( chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, const chip::app::Clusters::GroupKeyManagement::Commands::KeySetReadAllIndices::DecodableType & commandData) { - auto fabric = commandObj->GetAccessingFabricIndex(); - auto * provider = GetGroupDataProvider(); + Credentials::GroupDataProvider * provider = nullptr; + const FabricInfo * fabric = nullptr; - if (nullptr == provider) + if (!GetProviderAndFabric(commandObj, commandPath, &provider, &fabric)) { - commandObj->AddStatus(commandPath, Status::Failure); + // Command will already have status populated from validation. return true; } - auto keysIt = provider->IterateKeySets(fabric); + FabricIndex fabricIndex = fabric->GetFabricIndex(); + auto keysIt = provider->IterateKeySets(fabricIndex); if (nullptr == keysIt) { - commandObj->AddStatus(commandPath, Status::Failure); + commandObj->AddStatusAndLogIfFailure(commandPath, Status::Failure, "Failed iteration of key set indices!"); return true; } diff --git a/src/app/clusters/mode-base-server/mode-base-server.cpp b/src/app/clusters/mode-base-server/mode-base-server.cpp index cb55bc214c8676..2b9cc232f87e8d 100644 --- a/src/app/clusters/mode-base-server/mode-base-server.cpp +++ b/src/app/clusters/mode-base-server/mode-base-server.cpp @@ -368,6 +368,11 @@ void Instance::HandleChangeToMode(HandlerContext & ctx, const Commands::ChangeTo Commands::ChangeToModeResponse::Type response; + // If the NewMode field doesn't match the Mode field of any entry of the SupportedModes list, + // the ChangeToModeResponse command's Status field SHALL indicate UnsupportedMode and + // the StatusText field SHALL be included and MAY be used to indicate the issue, with a human readable string, + // or include an empty string. + // We are leaving the StatusText empty since the Status is descriptive enough. if (!IsSupportedMode(newMode)) { ChipLogError(Zcl, "ModeBase: Failed to find the option with mode %u", newMode); @@ -376,6 +381,17 @@ void Instance::HandleChangeToMode(HandlerContext & ctx, const Commands::ChangeTo return; } + // If the NewMode field is the same as the value of the CurrentMode attribute + // the ChangeToModeResponse command SHALL have the Status field set to Success and + // the StatusText field MAY be supplied with a human readable string or include an empty string. + // We are leaving the StatusText empty since the Status is descriptive enough. + if (newMode == GetCurrentMode()) + { + response.status = to_underlying(ModeBase::StatusCode::kSuccess); + ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); + return; + } + mDelegate->HandleChangeToMode(newMode, response); if (response.status == to_underlying(StatusCode::kSuccess)) diff --git a/src/app/clusters/operational-state-server/operational-state-cluster-objects.h b/src/app/clusters/operational-state-server/operational-state-cluster-objects.h index d7159791964915..c4248db70e8b9c 100644 --- a/src/app/clusters/operational-state-server/operational-state-cluster-objects.h +++ b/src/app/clusters/operational-state-server/operational-state-cluster-objects.h @@ -138,6 +138,35 @@ struct GenericOperationalError : public app::Clusters::detail::Structs::ErrorSta } } + bool IsEqual(const Structs::ErrorStateStruct::Type & rhs) + { + if (errorStateID != rhs.errorStateID) + { + return false; + } + if (errorStateLabel.HasValue() != rhs.errorStateLabel.HasValue() || + errorStateDetails.HasValue() != rhs.errorStateDetails.HasValue()) + { + return false; + } + if (errorStateLabel.HasValue()) + { + if (!errorStateLabel.Value().data_equal(rhs.errorStateLabel.Value())) + { + return false; + } + } + if (errorStateDetails.HasValue()) + { + if (!errorStateDetails.Value().data_equal(rhs.errorStateDetails.Value())) + { + return false; + } + } + + return true; + } + private: char mErrorStateLabelBuffer[kOperationalErrorLabelMaxSize]; char mErrorStateDetailsBuffer[kOperationalErrorDetailsMaxSize]; diff --git a/src/app/clusters/operational-state-server/operational-state-server.cpp b/src/app/clusters/operational-state-server/operational-state-server.cpp index f818c63c5cc14f..8e74786ba0ffaf 100644 --- a/src/app/clusters/operational-state-server/operational-state-server.cpp +++ b/src/app/clusters/operational-state-server/operational-state-server.cpp @@ -22,19 +22,10 @@ #include "operational-state-server.h" #include #include -#include -#include -#include -#include -#include -#include #include #include #include -#include #include -#include -#include using namespace chip; using namespace chip::app; @@ -44,7 +35,20 @@ using namespace chip::app::Clusters::OperationalState::Attributes; using Status = Protocols::InteractionModel::Status; -CHIP_ERROR OperationalStateServer::Init() +Instance::Instance(Delegate * aDelegate, EndpointId aEndpointId, ClusterId aClusterId) : + CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId), + mDelegate(aDelegate), mEndpointId(aEndpointId), mClusterId(aClusterId) +{ + mDelegate->SetInstance(this); +} + +Instance::~Instance() +{ + InteractionModelEngine::GetInstance()->UnregisterCommandHandler(this); + unregisterAttributeAccessOverride(this); +} + +CHIP_ERROR Instance::Init() { // Check if the cluster has been selected in zap if (!emberAfContainsServer(mEndpointId, mClusterId)) @@ -60,139 +64,156 @@ CHIP_ERROR OperationalStateServer::Init() return CHIP_NO_ERROR; } -void OperationalStateServer::Shutdown() +CHIP_ERROR Instance::SetCurrentPhase(const DataModel::Nullable & aPhase) { - InteractionModelEngine::GetInstance()->UnregisterCommandHandler(this); -} - -// This function is called by the interaction model engine when a command destined for this instance is received. -void OperationalStateServer::InvokeCommand(HandlerContext & handlerContext) -{ - ChipLogDetail(Zcl, "OperationalState: InvokeCommand"); - switch (handlerContext.mRequestPath.mCommandId) + if (!aPhase.IsNull()) { - case Commands::Pause::Id: - ChipLogDetail(Zcl, "OperationalState: Entering handling Pause state"); - - HandleCommand( - handlerContext, [this](HandlerContext & ctx, const auto & req) { HandlePauseState(ctx, req); }); - break; - - case Commands::Resume::Id: - ChipLogDetail(Zcl, "OperationalState: Entering handling Resume state"); - - HandleCommand( - handlerContext, [this](HandlerContext & ctx, const auto & req) { HandleResumeState(ctx, req); }); - break; - - case Commands::Start::Id: - ChipLogDetail(Zcl, "OperationalState: Entering handling Start state"); - - HandleCommand( - handlerContext, [this](HandlerContext & ctx, const auto & req) { HandleStartState(ctx, req); }); - break; - - case Commands::Stop::Id: - ChipLogDetail(Zcl, "OperationalState: Entering handling Stop state"); + if (!IsSupportedPhase(aPhase.Value())) + { + return CHIP_ERROR_INVALID_ARGUMENT; + } + } - HandleCommand(handlerContext, - [this](HandlerContext & ctx, const auto & req) { HandleStopState(ctx, req); }); - break; + DataModel::Nullable oldPhase = mCurrentPhase; + mCurrentPhase = aPhase; + if (mCurrentPhase != oldPhase) + { + ConcreteAttributePath path = ConcreteAttributePath(mEndpointId, mClusterId, Attributes::CurrentPhase::Id); + MatterReportingAttributeChangeCallback(path); } + return CHIP_NO_ERROR; } -void OperationalStateServer::HandlePauseState(HandlerContext & ctx, const Commands::Pause::DecodableType & req) +CHIP_ERROR Instance::SetOperationalState(uint8_t aOpState) { - ChipLogDetail(Zcl, "OperationalState: HandlePauseState"); - Commands::OperationalCommandResponse::Type response; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); - - VerifyOrReturn(delegate != nullptr, ctx.mCommandHandler.AddStatus(ctx.mRequestPath, Status::Failure)); - uint8_t opState = delegate->GetCurrentOperationalState(); + // Error is only allowed to be set by OnOperationalErrorDetected. + if (aOpState == to_underlying(OperationalStateEnum::kError) || !IsSupportedOperationalState(aOpState)) + { + return CHIP_ERROR_INVALID_ARGUMENT; + } - if (opState != to_underlying(OperationalStateEnum::kPaused) && opState != to_underlying(OperationalStateEnum::kRunning)) + if (mOperationalError.errorStateID != to_underlying(ErrorStateEnum::kNoError)) { - err.Set(to_underlying(ErrorStateEnum::kCommandInvalidInState)); + mOperationalError.Set(to_underlying(ErrorStateEnum::kNoError)); + ConcreteAttributePath path = ConcreteAttributePath(mEndpointId, mClusterId, Attributes::OperationalError::Id); + MatterReportingAttributeChangeCallback(path); } - else if (opState != to_underlying(OperationalStateEnum::kPaused)) + + uint8_t oldState = mOperationalState; + mOperationalState = aOpState; + if (mOperationalState != oldState) { - delegate->HandlePauseStateCallback(err); + ConcreteAttributePath path = ConcreteAttributePath(mEndpointId, mClusterId, Attributes::OperationalState::Id); + MatterReportingAttributeChangeCallback(path); } - response.commandResponseState = err; + return CHIP_NO_ERROR; +} - ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); +DataModel::Nullable Instance::GetCurrentPhase() const +{ + return mCurrentPhase; } -void OperationalStateServer::HandleResumeState(HandlerContext & ctx, const Commands::Resume::DecodableType & req) +uint8_t Instance::GetCurrentOperationalState() const { - ChipLogDetail(Zcl, "OperationalState: HandleResumeState"); - Commands::OperationalCommandResponse::Type response; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + return mOperationalState; +} - VerifyOrReturn(delegate != nullptr, ctx.mCommandHandler.AddStatus(ctx.mRequestPath, Status::Failure)); - uint8_t opState = delegate->GetCurrentOperationalState(); +void Instance::GetCurrentOperationalError(GenericOperationalError & error) const +{ + error.Set(mOperationalError.errorStateID, mOperationalError.errorStateLabel, mOperationalError.errorStateDetails); +} - if (opState != to_underlying(OperationalStateEnum::kPaused) && opState != to_underlying(OperationalStateEnum::kRunning)) +void Instance::OnOperationalErrorDetected(const Structs::ErrorStateStruct::Type & aError) +{ + ChipLogDetail(Zcl, "OperationalStateServer: OnOperationalErrorDetected"); + // Set the OperationalState attribute to Error + if (mOperationalState != to_underlying(OperationalStateEnum::kError)) { - err.Set(to_underlying(ErrorStateEnum::kCommandInvalidInState)); + mOperationalState = to_underlying(OperationalStateEnum::kError); + ConcreteAttributePath path = ConcreteAttributePath(mEndpointId, mClusterId, Attributes::OperationalState::Id); + MatterReportingAttributeChangeCallback(path); } - else if (opState == to_underlying(OperationalStateEnum::kPaused)) + + // Set the OperationalError attribute + if (mOperationalError.IsEqual(aError)) { - delegate->HandleResumeStateCallback(err); + mOperationalError.Set(aError.errorStateID, aError.errorStateLabel, aError.errorStateDetails); + ConcreteAttributePath path = ConcreteAttributePath(mEndpointId, mClusterId, Attributes::OperationalError::Id); + MatterReportingAttributeChangeCallback(path); } - response.commandResponseState = err; - ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); + // Generate an ErrorDetected event + GenericErrorEvent event(mClusterId, aError); + EventNumber eventNumber; + CHIP_ERROR error = LogEvent(event, mEndpointId, eventNumber); + + if (error != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "OperationalStateServer: Failed to record OperationalError event: %" CHIP_ERROR_FORMAT, error.Format()); + } } -void OperationalStateServer::HandleStartState(HandlerContext & ctx, const Commands::Start::DecodableType & req) +void Instance::OnOperationCompletionDetected(uint8_t aCompletionErrorCode, + const Optional> & aTotalOperationalTime, + const Optional> & aPausedTime) const { - ChipLogDetail(Zcl, "OperationalState: HandleStartState"); - Commands::OperationalCommandResponse::Type response; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + ChipLogDetail(Zcl, "OperationalStateServer: OnOperationCompletionDetected"); - VerifyOrReturn(delegate != nullptr, ctx.mCommandHandler.AddStatus(ctx.mRequestPath, Status::Failure)); - uint8_t opState = delegate->GetCurrentOperationalState(); + GenericOperationCompletionEvent event(mClusterId, aCompletionErrorCode, aTotalOperationalTime, aPausedTime); + EventNumber eventNumber; + CHIP_ERROR error = LogEvent(event, mEndpointId, eventNumber); - if (opState != to_underlying(OperationalStateEnum::kRunning)) + if (error != CHIP_NO_ERROR) { - delegate->HandleStartStateCallback(err); + ChipLogError(Zcl, "OperationalStateServer: Failed to record OperationCompletion event: %" CHIP_ERROR_FORMAT, + error.Format()); } - response.commandResponseState = err; - - ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); } -void OperationalStateServer::HandleStopState(HandlerContext & ctx, const Commands::Stop::DecodableType & req) +void Instance::ReportOperationalStateListChange() { - ChipLogDetail(Zcl, "OperationalState: HandleStopState"); - Commands::OperationalCommandResponse::Type response; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + MatterReportingAttributeChangeCallback(ConcreteAttributePath(mEndpointId, mClusterId, Attributes::OperationalStateList::Id)); +} - VerifyOrReturn(delegate != nullptr, ctx.mCommandHandler.AddStatus(ctx.mRequestPath, Status::Failure)); - uint8_t opState = delegate->GetCurrentOperationalState(); +void Instance::ReportPhaseListChange() +{ + MatterReportingAttributeChangeCallback(ConcreteAttributePath(mEndpointId, mClusterId, Attributes::PhaseList::Id)); +} - if (opState != to_underlying(OperationalStateEnum::kStopped)) +bool Instance::IsSupportedPhase(uint8_t aPhase) +{ + GenericOperationalPhase phase = GenericOperationalPhase(DataModel::Nullable()); + if (mDelegate->GetOperationalPhaseAtIndex(aPhase, phase) != CHIP_ERROR_NOT_FOUND) { - delegate->HandleStopStateCallback(err); + return true; } - response.commandResponseState = err; + return false; +} - ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); +bool Instance::IsSupportedOperationalState(uint8_t aState) +{ + GenericOperationalState opState; + for (uint8_t i = 0; mDelegate->GetOperationalStateAtIndex(i, opState) != CHIP_ERROR_NOT_FOUND; i++) + { + if (opState.operationalStateID == aState) + { + return true; + } + } + ChipLogDetail(Zcl, "Cannot find an operational state with value %u", aState); + return false; } +// private + template -void OperationalStateServer::HandleCommand(HandlerContext & handlerContext, FuncT func) +void Instance::HandleCommand(HandlerContext & handlerContext, FuncT func) { if (!handlerContext.mCommandHandled && (handlerContext.mRequestPath.mCommandId == RequestT::GetCommandId())) { RequestT requestPayload; - // // If the command matches what the caller is looking for, let's mark this as being handled // even if errors happen after this. This ensures that we don't execute any fall-back strategies // to handle this command since at this point, the caller is taking responsibility for handling @@ -211,15 +232,49 @@ void OperationalStateServer::HandleCommand(HandlerContext & handlerContext, Func } } -CHIP_ERROR OperationalStateServer::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) +// This function is called by the interaction model engine when a command destined for this instance is received. +void Instance::InvokeCommand(HandlerContext & handlerContext) +{ + ChipLogDetail(Zcl, "OperationalState: InvokeCommand"); + switch (handlerContext.mRequestPath.mCommandId) + { + case Commands::Pause::Id: + ChipLogDetail(Zcl, "OperationalState: Entering handling Pause state"); + + HandleCommand( + handlerContext, [this](HandlerContext & ctx, const auto & req) { HandlePauseState(ctx, req); }); + break; + + case Commands::Resume::Id: + ChipLogDetail(Zcl, "OperationalState: Entering handling Resume state"); + + HandleCommand( + handlerContext, [this](HandlerContext & ctx, const auto & req) { HandleResumeState(ctx, req); }); + break; + + case Commands::Start::Id: + ChipLogDetail(Zcl, "OperationalState: Entering handling Start state"); + + HandleCommand( + handlerContext, [this](HandlerContext & ctx, const auto & req) { HandleStartState(ctx, req); }); + break; + + case Commands::Stop::Id: + ChipLogDetail(Zcl, "OperationalState: Entering handling Stop state"); + + HandleCommand(handlerContext, + [this](HandlerContext & ctx, const auto & req) { HandleStopState(ctx, req); }); + break; + } +} + +CHIP_ERROR Instance::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) { + ChipLogError(Zcl, "OperationalState: Reading"); switch (aPath.mAttributeId) { case OperationalState::Attributes::OperationalStateList::Id: { - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - - return aEncoder.EncodeList([delegate](const auto & encoder) -> CHIP_ERROR { + return aEncoder.EncodeList([delegate = mDelegate](const auto & encoder) -> CHIP_ERROR { GenericOperationalState opState; size_t index = 0; CHIP_ERROR err = CHIP_NO_ERROR; @@ -238,36 +293,26 @@ CHIP_ERROR OperationalStateServer::Read(const ConcreteReadAttributePath & aPath, break; case OperationalState::Attributes::OperationalState::Id: { - - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - uint8_t opState = delegate->GetCurrentOperationalState(); - return aEncoder.Encode(opState); + ChipLogError(Zcl, "OperationalState: H1"); + ReturnErrorOnFailure(aEncoder.Encode(GetCurrentOperationalState())); } break; case OperationalState::Attributes::OperationalError::Id: { - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalError opErr(to_underlying(ErrorStateEnum::kNoError)); - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - delegate->GetCurrentOperationalError(opErr); - return aEncoder.Encode(opErr); + ReturnErrorOnFailure(aEncoder.Encode(mOperationalError)); } break; case OperationalState::Attributes::PhaseList::Id: { - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - GenericOperationalPhase phase = GenericOperationalPhase(DataModel::Nullable()); size_t index = 0; - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - if (delegate->GetOperationalPhaseAtIndex(index, phase) == CHIP_ERROR_NOT_FOUND || phase.IsMissing()) + if (mDelegate->GetOperationalPhaseAtIndex(index, phase) == CHIP_ERROR_NOT_FOUND || phase.IsMissing()) { return aEncoder.EncodeNull(); } return aEncoder.EncodeList([&](const auto & encoder) -> CHIP_ERROR { - while (delegate->GetOperationalPhaseAtIndex(index, phase) != CHIP_ERROR_NOT_FOUND) + while (this->mDelegate->GetOperationalPhaseAtIndex(index, phase) != CHIP_ERROR_NOT_FOUND) { ReturnErrorOnFailure(encoder.Encode(phase.mPhaseName)); index++; @@ -278,56 +323,94 @@ CHIP_ERROR OperationalStateServer::Read(const ConcreteReadAttributePath & aPath, break; case OperationalState::Attributes::CurrentPhase::Id: { - DataModel::Nullable currentPhase; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - delegate->GetCurrentPhase(currentPhase); - return aEncoder.Encode(currentPhase); + ReturnErrorOnFailure(aEncoder.Encode(GetCurrentPhase())); } break; case OperationalState::Attributes::CountdownTime::Id: { - DataModel::Nullable countdownTime; - Delegate * delegate = OperationalState::GetOperationalStateDelegate(mEndpointId, mClusterId); - - VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is nullptr")); - delegate->GetCountdownTime(countdownTime); - return aEncoder.Encode(countdownTime); + ReturnErrorOnFailure(aEncoder.Encode(mDelegate->GetCountdownTime())); } break; } return CHIP_NO_ERROR; } -void OperationalStateServer::OnOperationalErrorDetected(const Structs::ErrorStateStruct::Type & aError) +void Instance::HandlePauseState(HandlerContext & ctx, const Commands::Pause::DecodableType & req) { - ChipLogDetail(Zcl, "OperationalStateServer: OnOperationalErrorDetected"); - MatterReportingAttributeChangeCallback(mEndpointId, mClusterId, Attributes::OperationalState::Id); + ChipLogDetail(Zcl, "OperationalState: HandlePauseState"); - GenericErrorEvent event(mClusterId, aError); - EventNumber eventNumber; - CHIP_ERROR error = app::LogEvent(event, mEndpointId, eventNumber); + GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + uint8_t opState = GetCurrentOperationalState(); - if (error != CHIP_NO_ERROR) + if (opState != to_underlying(OperationalStateEnum::kPaused) && opState != to_underlying(OperationalStateEnum::kRunning)) { - ChipLogError(Zcl, "OperationalStateServer: Failed to record OperationalError event: %" CHIP_ERROR_FORMAT, error.Format()); + err.Set(to_underlying(ErrorStateEnum::kCommandInvalidInState)); + } + else if (opState == to_underlying(OperationalStateEnum::kRunning)) + { + mDelegate->HandlePauseStateCallback(err); } + + Commands::OperationalCommandResponse::Type response; + response.commandResponseState = err; + + ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); } -void OperationalStateServer::OnOperationCompletionDetected(uint8_t aCompletionErrorCode, - const Optional> & aTotalOperationalTime, - const Optional> & aPausedTime) +void Instance::HandleStopState(HandlerContext & ctx, const Commands::Stop::DecodableType & req) { - ChipLogDetail(Zcl, "OperationalStateServer: OnOperationCompletionDetected"); + ChipLogDetail(Zcl, "OperationalState: HandleStopState"); - GenericOperationCompletionEvent event(mClusterId, aCompletionErrorCode, aTotalOperationalTime, aPausedTime); - EventNumber eventNumber; - CHIP_ERROR error = app::LogEvent(event, mEndpointId, eventNumber); + GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + uint8_t opState = GetCurrentOperationalState(); - if (error != CHIP_NO_ERROR) + if (opState != to_underlying(OperationalStateEnum::kStopped)) { - ChipLogError(Zcl, "OperationalStateServer: Failed to record OperationCompletion event: %" CHIP_ERROR_FORMAT, - error.Format()); + mDelegate->HandleStopStateCallback(err); + } + + Commands::OperationalCommandResponse::Type response; + response.commandResponseState = err; + + ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); +} + +void Instance::HandleStartState(HandlerContext & ctx, const Commands::Start::DecodableType & req) +{ + ChipLogDetail(Zcl, "OperationalState: HandleStartState"); + + GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + uint8_t opState = GetCurrentOperationalState(); + + if (opState != to_underlying(OperationalStateEnum::kRunning)) + { + mDelegate->HandleStartStateCallback(err); } + + Commands::OperationalCommandResponse::Type response; + response.commandResponseState = err; + + ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); +} + +void Instance::HandleResumeState(HandlerContext & ctx, const Commands::Resume::DecodableType & req) +{ + ChipLogDetail(Zcl, "OperationalState: HandleResumeState"); + + GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError)); + uint8_t opState = GetCurrentOperationalState(); + + if (opState != to_underlying(OperationalStateEnum::kPaused) && opState != to_underlying(OperationalStateEnum::kRunning)) + { + err.Set(to_underlying(ErrorStateEnum::kCommandInvalidInState)); + } + else if (opState == to_underlying(OperationalStateEnum::kPaused)) + { + mDelegate->HandleResumeStateCallback(err); + } + + Commands::OperationalCommandResponse::Type response; + response.commandResponseState = err; + + ctx.mCommandHandler.AddResponse(ctx.mRequestPath, response); } diff --git a/src/app/clusters/operational-state-server/operational-state-server.h b/src/app/clusters/operational-state-server/operational-state-server.h index 3e96fa6ca03405..4d093318ac4833 100644 --- a/src/app/clusters/operational-state-server/operational-state-server.h +++ b/src/app/clusters/operational-state-server/operational-state-server.h @@ -33,54 +33,83 @@ class Uncopyable { protected: Uncopyable() {} - ~Uncopyable() {} + ~Uncopyable() = default; private: Uncopyable(const Uncopyable &) = delete; Uncopyable & operator=(const Uncopyable &) = delete; }; +class Delegate; + /** - * OperationalStateServer is a class that represents an instance of a derivation of the operational state cluster. + * Instance is a class that represents an instance of a derivation of the operational state cluster. * It implements CommandHandlerInterface so it can generically handle commands for any derivation cluster id. */ -class OperationalStateServer : public CommandHandlerInterface, public AttributeAccessInterface, public Uncopyable +class Instance : public CommandHandlerInterface, public AttributeAccessInterface, public Uncopyable { public: /** - * Creates an operational state cluster instance. The Init() function needs to be called for this instance to be registered and - * called by the interaction model at the appropriate times. + * Creates an operational state cluster instance. The Init() function needs to be called for this instance + * to be registered and called by the interaction model at the appropriate times. + * It is possible to set the CurrentPhase and OperationalState via the Set... methods before calling Init(). + * @param aDelegate A pointer to the delegate to be used by this server. + * Note: the caller must ensure that the delegate lives throughout the instance's lifetime. * @param aEndpointId The endpoint on which this cluster exists. This must match the zap configuration. - * @param aClusterId The ID of the operational state aliased cluster to be instantiated. + * @param aClusterId The ID of the operational state derived cluster to be instantiated. */ - OperationalStateServer(EndpointId aEndpointId, ClusterId aClusterId) : - CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), - AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId) - { - - mEndpointId = aEndpointId; - mClusterId = aClusterId; - } + Instance(Delegate * aDelegate, EndpointId aEndpointId, ClusterId aClusterId); - ~OperationalStateServer() override {} + ~Instance() override; /** - * Init the operational state server. - * This function must be called after defining a OperationalStateServer class object. - * @param void - * @return CHIP_ERROR CHIP_NO_ERROR on success, or corresponding error code. + * Initialise the operational state server instance. + * This function must be called after defining an Instance class object. + * @return Returns an error if the given endpoint and cluster ID have not been enabled in zap or if the + * CommandHandler or AttributeHandler registration fails, else returns CHIP_NO_ERROR. */ CHIP_ERROR Init(); + // Attribute setters + /** + * Set operational phase. + * @param aPhase The operational phase that should now be the current one. + * @return CHIP_ERROR_INVALID_ARGUMENT if aPhase is an invalid value. CHIP_NO_ERROR if set was successful. + */ + CHIP_ERROR SetCurrentPhase(const app::DataModel::Nullable & aPhase); + + /** + * Set current operational state. + * NOTE: This method cannot be used to set the error state. The error state must be set via the + * OnOperationalErrorDetected method. + * @param aOpState The operational state that should now be the current one. + * @return CHIP_ERROR_INVALID_ARGUMENT if aOpState is an invalid value. CHIP_NO_ERROR if set was successful. + */ + CHIP_ERROR SetOperationalState(uint8_t aOpState); + + // Attribute getters + /** + * Get current phase. + * @return The current phase. + */ + app::DataModel::Nullable GetCurrentPhase() const; + /** - * Shut down the operational state server. - * This function must be called before destroying a OperationalStateServer class object. - * @param void + * Get the current operational state. + * @return The current operational state value. */ - void Shutdown(); + uint8_t GetCurrentOperationalState() const; + /** + * Get current operational error. + * @param error The GenericOperationalError to fill with the current operational error value + */ + void GetCurrentOperationalError(GenericOperationalError & error) const; + + // Event triggers /** * @brief Called when the Node detects a OperationalError has been raised. + * Note: This function also sets the OperationalState attribute to Error. * @param aError OperationalError which detects */ void OnOperationalErrorDetected(const Structs::ErrorStateStruct::Type & aError); @@ -93,9 +122,43 @@ class OperationalStateServer : public CommandHandlerInterface, public AttributeA */ void OnOperationCompletionDetected(uint8_t aCompletionErrorCode, const Optional> & aTotalOperationalTime = NullOptional, - const Optional> & aPausedTime = NullOptional); + const Optional> & aPausedTime = NullOptional) const; + + // List change reporting + /** + * Reports that the contents of the operational state list has changed. + * The device SHALL call this method whenever it changes the operational state list. + */ + void ReportOperationalStateListChange(); + + /** + * Reports that the contents of the phase list has changed. + * The device SHALL call this method whenever it changes the phase list. + */ + void ReportPhaseListChange(); + + /** + * This function returns true if the phase value given exists in the PhaseList attribute, otherwise it returns false. + */ + bool IsSupportedPhase(uint8_t aPhase); + + /** + * This function returns true if the operational state value given exists in the OperationalStateList attribute, + * otherwise it returns false. + */ + bool IsSupportedOperationalState(uint8_t aState); private: + Delegate * mDelegate; + + EndpointId mEndpointId; + ClusterId mClusterId; + + // Attribute Data Store + app::DataModel::Nullable mCurrentPhase; + uint8_t mOperationalState = 0; // assume 0 for now. + GenericOperationalError mOperationalError = to_underlying(ErrorStateEnum::kNoError); + // Inherited from CommandHandlerInterface template void HandleCommand(HandlerContext & handlerContext, FuncT func); @@ -103,9 +166,10 @@ class OperationalStateServer : public CommandHandlerInterface, public AttributeA // Inherited from CommandHandlerInterface void InvokeCommand(HandlerContext & ctx) override; - /// IM-level implementation of read - /// - /// Returns appropriately mapped CHIP_ERROR if applicable (may return CHIP_IM_GLOBAL_STATUS errors) + /** + * IM-level implementation of read + * @return appropriately mapped CHIP_ERROR if applicable (may return CHIP_IM_GLOBAL_STATUS errors) + */ CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; /** @@ -114,9 +178,9 @@ class OperationalStateServer : public CommandHandlerInterface, public AttributeA void HandlePauseState(HandlerContext & ctx, const Commands::Pause::DecodableType & req); /** - * Handle Command: Resume. + * Handle Command: Stop. */ - void HandleResumeState(HandlerContext & ctx, const Commands::Resume::DecodableType & req); + void HandleStopState(HandlerContext & ctx, const Commands::Stop::DecodableType & req); /** * Handle Command: Start. @@ -124,12 +188,9 @@ class OperationalStateServer : public CommandHandlerInterface, public AttributeA void HandleStartState(HandlerContext & ctx, const Commands::Start::DecodableType & req); /** - * Handle Command: Stop. + * Handle Command: Resume. */ - void HandleStopState(HandlerContext & ctx, const Commands::Stop::DecodableType & req); - - EndpointId mEndpointId; - ClusterId mClusterId; + void HandleResumeState(HandlerContext & ctx, const Commands::Resume::DecodableType & req); }; /** @@ -141,109 +202,77 @@ class OperationalStateServer : public CommandHandlerInterface, public AttributeA class Delegate { public: + Delegate() = default; + + virtual ~Delegate() = default; + /** - * Get the current operational state. - * @return The current operational state value + * Get the countdown time. + * NOTE: Changes to this attribute should not be reported. + * From the spec: Changes to this value SHALL NOT be reported in a subscription. + * @return The current countdown time. */ - virtual uint8_t GetCurrentOperationalState() = 0; + virtual app::DataModel::Nullable GetCountdownTime() = 0; /** - * Get the list of supported operational states. * Fills in the provided GenericOperationalState with the state at index `index` if there is one, * or returns CHIP_ERROR_NOT_FOUND if the index is out of range for the list of states. + * Note: This is used by the SDK to populate the operational state list attribute. If the contents of this list changes, + * the device SHALL call the Instance's ReportOperationalStateListChange method to report that this attribute has changed. * @param index The index of the state, with 0 representing the first state. * @param operationalState The GenericOperationalState is filled. */ virtual CHIP_ERROR GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) = 0; /** - * Get the list of supported operational phases. * Fills in the provided GenericOperationalPhase with the phase at index `index` if there is one, * or returns CHIP_ERROR_NOT_FOUND if the index is out of range for the list of phases. + * Note: This is used by the SDK to populate the phase list attribute. If the contents of this list changes, the + * device SHALL call the Instance's ReportPhaseListChange method to report that this attribute has changed. * @param index The index of the phase, with 0 representing the first phase. * @param operationalPhase The GenericOperationalPhase is filled. */ virtual CHIP_ERROR GetOperationalPhaseAtIndex(size_t index, GenericOperationalPhase & operationalPhase) = 0; - /** - * Get current operational error. - * @param error The GenericOperationalError to fill with the current operational error value - */ - virtual void GetCurrentOperationalError(GenericOperationalError & error) = 0; - - /** - * Get current phase - * @param phase The app::DataModel::Nullable to fill with the current phase value - */ - virtual void GetCurrentPhase(app::DataModel::Nullable & phase) = 0; - - /** - * Get countdown time - * @param time The app::DataModel::Nullable to fill with the coutdown time value - */ - virtual void GetCountdownTime(app::DataModel::Nullable & time) = 0; - - /** - * Set current operational state. - * @param opState The operational state that should now be the current one. - */ - virtual CHIP_ERROR SetOperationalState(uint8_t opState) = 0; - - /** - * Set operational error. - * @param opErrState The new operational error. - */ - virtual CHIP_ERROR SetOperationalError(const GenericOperationalError & opErrState) = 0; - - /** - * Set operational phase. - * @param phase The operational phase that should now be the current one. - */ - virtual CHIP_ERROR SetPhase(const app::DataModel::Nullable & phase) = 0; - - /** - * Set coutdown time. - * @param time The coutdown time that should now be the current one. - */ - virtual CHIP_ERROR SetCountdownTime(const app::DataModel::Nullable & time) = 0; - // command callback /** * Handle Command Callback in application: Pause - * @param[out] get operational error after callback. + * @param[out] err operational error after callback. */ virtual void HandlePauseStateCallback(GenericOperationalError & err) = 0; /** * Handle Command Callback in application: Resume - * @param[out] get operational error after callback. + * @param[out] err operational error after callback. */ virtual void HandleResumeStateCallback(GenericOperationalError & err) = 0; /** * Handle Command Callback in application: Start - * @param[out] get operational error after callback. + * @param[out] err operational error after callback. */ virtual void HandleStartStateCallback(GenericOperationalError & err) = 0; /** * Handle Command Callback in application: Stop - * @param[out] get operational error after callback. + * @param[out] err operational error after callback. */ virtual void HandleStopStateCallback(GenericOperationalError & err) = 0; - Delegate() = default; +private: + friend class Instance; - virtual ~Delegate() = default; -}; + Instance * mInstance = nullptr; -// @brief Instance getter for the delegate for the given operational state alias cluster on the given endpoint. -// The delegate API assumes there will be separate delegate objects for each cluster instance. -// (i.e. each separate operational state cluster derivation, on each separate endpoint) -// @note This API should always be called prior to using the delegate and the return pointer should never be cached. -// This should be implemented by the application. -// @return Default global delegate instance. -Delegate * GetOperationalStateDelegate(EndpointId endpointId, ClusterId clusterId); + /** + * This method is used by the SDK to set the instance pointer. This is done during the instantiation of a Instance object. + * @param aInstance A pointer to the Instance object related to this delegate object. + */ + void SetInstance(Instance * aInstance) { mInstance = aInstance; } + +protected: + Instance * GetInstance() const { return mInstance; } +}; } // namespace OperationalState } // namespace Clusters diff --git a/src/app/clusters/scenes-server/scenes-server.cpp b/src/app/clusters/scenes-server/scenes-server.cpp index e0398563982352..1c89884f687246 100644 --- a/src/app/clusters/scenes-server/scenes-server.cpp +++ b/src/app/clusters/scenes-server/scenes-server.cpp @@ -510,7 +510,15 @@ void ScenesServer::GroupWillBeRemoved(FabricIndex aFabricIx, EndpointId aEndpoin SceneTable * sceneTable = scenes::GetSceneTableImpl(aEndpointId); VerifyOrReturn(nullptr != sceneTable); - MakeSceneInvalid(aEndpointId); + chip::GroupId currentGroup; + Attributes::CurrentGroup::Get(aEndpointId, ¤tGroup); + + // If currentGroup is what is being removed, we can't possibly still have a valid scene, + // because the scene we have (if any) will also be removed. + if (aGroupId == currentGroup) + { + MakeSceneInvalid(aEndpointId); + } VerifyOrReturn(nullptr != mGroupProvider); if (0 != aGroupId && !mGroupProvider->HasEndpoint(aFabricIx, aGroupId, aEndpointId)) diff --git a/src/app/clusters/time-synchronization-server/time-synchronization-server.cpp b/src/app/clusters/time-synchronization-server/time-synchronization-server.cpp index 9a1b2aa408bd59..f3a2d203c824fe 100644 --- a/src/app/clusters/time-synchronization-server/time-synchronization-server.cpp +++ b/src/app/clusters/time-synchronization-server/time-synchronization-server.cpp @@ -925,12 +925,6 @@ bool emberAfTimeSynchronizationClusterSetTimeZoneCallback( } else { - TimeState dstState = TimeSynchronizationServer::Instance().UpdateDSTOffsetState(); - TimeSynchronizationServer::Instance().ClearDSTOffset(); - if (dstState == TimeState::kActive || dstState == TimeState::kChanged) - { - emitDSTStatusEvent(commandPath.mEndpointId, false); - } response.DSTOffsetRequired = true; } } @@ -938,6 +932,17 @@ bool emberAfTimeSynchronizationClusterSetTimeZoneCallback( { response.DSTOffsetRequired = true; } + + if (response.DSTOffsetRequired) + { + TimeState dstState = TimeSynchronizationServer::Instance().UpdateDSTOffsetState(); + TimeSynchronizationServer::Instance().ClearDSTOffset(); + if (dstState == TimeState::kActive || dstState == TimeState::kChanged) + { + emitDSTStatusEvent(commandPath.mEndpointId, false); + } + } + commandObj->AddResponse(commandPath, response); return true; } diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index a1eae3abe0d1b0..0a3eedd4ad767c 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -638,7 +638,7 @@ void Engine::Run() ReadHandler * readHandler = imEngine->ActiveHandlerAt(mCurReadHandlerIdx % (uint32_t) imEngine->mReadHandlers.Allocated()); VerifyOrDie(readHandler != nullptr); - if (imEngine->GetReportScheduler()->IsReportableNow(readHandler)) + if (readHandler->ShouldReportUnscheduled() || imEngine->GetReportScheduler()->IsReportableNow(readHandler)) { mRunningReadHandler = readHandler; CHIP_ERROR err = BuildAndSendSingleReportData(readHandler); @@ -831,7 +831,7 @@ CHIP_ERROR Engine::SetDirty(AttributePathParams & aAttributePath) // We call AttributePathIsDirty for both read interactions and subscribe interactions, since we may send inconsistent // attribute data between two chunks. AttributePathIsDirty will not schedule a new run for read handlers which are // waiting for a response to the last message chunk for read interactions. - if (handler->IsGeneratingReports() || handler->IsAwaitingReportResponse()) + if (handler->CanStartReporting() || handler->IsAwaitingReportResponse()) { for (auto object = handler->GetAttributePathList(); object != nullptr; object = object->mpNext) { diff --git a/src/app/reporting/ReportScheduler.h b/src/app/reporting/ReportScheduler.h index 068237780b86a0..ae657fa51d0404 100644 --- a/src/app/reporting/ReportScheduler.h +++ b/src/app/reporting/ReportScheduler.h @@ -30,8 +30,6 @@ namespace reporting { // Forward declaration of TestReportScheduler to allow it to be friend with ReportScheduler class TestReportScheduler; -using Timestamp = System::Clock::Timestamp; - class TimerContext { public: @@ -42,6 +40,8 @@ class TimerContext class ReportScheduler : public ReadHandler::Observer, public ICDStateObserver { public: + using Timestamp = System::Clock::Timestamp; + /// @brief This class acts as an interface between the report scheduler and the system timer to reduce dependencies on the /// system layer. class TimerDelegate @@ -63,40 +63,53 @@ class ReportScheduler : public ReadHandler::Observer, public ICDStateObserver class ReadHandlerNode : public TimerContext { public: - ReadHandlerNode(ReadHandler * aReadHandler, TimerDelegate * aTimerDelegate, ReportScheduler * aScheduler) : - mTimerDelegate(aTimerDelegate), mScheduler(aScheduler) + enum class ReadHandlerNodeFlags : uint8_t + { + // Flag to indicate if the engine run is already scheduled so the scheduler can ignore + // it when calculating the next run time + EngineRunScheduled = (1 << 0), + // Flag to allow the read handler to be synced with other handlers that have an earlier max timestamp + CanBeSynced = (1 << 1), + }; + + ReadHandlerNode(ReadHandler * aReadHandler, ReportScheduler * aScheduler, const Timestamp & now) : mScheduler(aScheduler) { VerifyOrDie(aReadHandler != nullptr); - VerifyOrDie(aTimerDelegate != nullptr); VerifyOrDie(aScheduler != nullptr); mReadHandler = aReadHandler; - SetIntervalTimeStamps(aReadHandler); + SetIntervalTimeStamps(aReadHandler, now); } ReadHandler * GetReadHandler() const { return mReadHandler; } /// @brief Check if the Node is reportable now, meaning its readhandler was made reportable by attribute dirtying and /// handler state, and minimal time interval since last report has elapsed, or the maximal time interval since last /// report has elapsed - bool IsReportableNow() const + /// @param now current time to use for the check, user must ensure to provide a valid time for this to be reliable + bool IsReportableNow(const Timestamp & now) const { - Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); - - return (mReadHandler->IsGeneratingReports() && - (now >= mMinTimestamp && (mReadHandler->IsDirty() || now >= mMaxTimestamp || now >= mSyncTimestamp))); + return (mReadHandler->CanStartReporting() && + (now >= mMinTimestamp && (mReadHandler->IsDirty() || now >= mMaxTimestamp || CanBeSynced()))); } - bool IsEngineRunScheduled() const { return mEngineRunScheduled; } - void SetEngineRunScheduled(bool aEngineRunScheduled) { mEngineRunScheduled = aEngineRunScheduled; } - - void SetIntervalTimeStamps(ReadHandler * aReadHandler) + bool IsEngineRunScheduled() const { return mFlags.Has(ReadHandlerNodeFlags::EngineRunScheduled); } + void SetEngineRunScheduled(bool aEngineRunScheduled) + { + mFlags.Set(ReadHandlerNodeFlags::EngineRunScheduled, aEngineRunScheduled); + } + bool CanBeSynced() const { return mFlags.Has(ReadHandlerNodeFlags::CanBeSynced); } + void SetCanBeSynced(bool aCanBeSynced) { mFlags.Set(ReadHandlerNodeFlags::CanBeSynced, aCanBeSynced); } + + /// @brief Set the interval timestamps for the node based on the read handler reporting intervals + /// @param aReadHandler read handler to get the intervals from + /// @param now current time to calculate the mMin and mMax timestamps, user must ensure to provide a valid time for this to + /// be reliable + void SetIntervalTimeStamps(ReadHandler * aReadHandler, const Timestamp & now) { uint16_t minInterval, maxInterval; aReadHandler->GetReportingIntervals(minInterval, maxInterval); - Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); - mMinTimestamp = now + System::Clock::Seconds16(minInterval); - mMaxTimestamp = now + System::Clock::Seconds16(maxInterval); - mSyncTimestamp = mMaxTimestamp; + mMinTimestamp = now + System::Clock::Seconds16(minInterval); + mMaxTimestamp = now + System::Clock::Seconds16(maxInterval); } void TimerFired() override @@ -105,28 +118,16 @@ class ReportScheduler : public ReadHandler::Observer, public ICDStateObserver SetEngineRunScheduled(true); } - void SetSyncTimestamp(System::Clock::Timestamp aSyncTimestamp) - { - // Prevents the sync timestamp being set to a value lower than the min timestamp to prevent it to appear as reportable - // on the next timeout calculation and cause the scheduler to run the engine too early - VerifyOrReturn(aSyncTimestamp >= mMinTimestamp); - mSyncTimestamp = aSyncTimestamp; - } - System::Clock::Timestamp GetMinTimestamp() const { return mMinTimestamp; } System::Clock::Timestamp GetMaxTimestamp() const { return mMaxTimestamp; } - System::Clock::Timestamp GetSyncTimestamp() const { return mSyncTimestamp; } private: - TimerDelegate * mTimerDelegate; ReadHandler * mReadHandler; ReportScheduler * mScheduler; Timestamp mMinTimestamp; Timestamp mMaxTimestamp; - Timestamp mSyncTimestamp; // Timestamp at which the read handler will be allowed to emit a report so it can be synced with - // other handlers that have an earlier max timestamp - bool mEngineRunScheduled = false; // Flag to indicate if the engine run is already scheduled so the scheduler can ignore - // it when calculating the next run time + + BitFlags mFlags; }; ReportScheduler(TimerDelegate * aTimerDelegate) : mTimerDelegate(aTimerDelegate) {} @@ -139,9 +140,16 @@ class ReportScheduler : public ReadHandler::Observer, public ICDStateObserver /// @brief Check whether a ReadHandler is reportable right now, taking into account its minimum and maximum intervals. /// @param aReadHandler read handler to check - bool IsReportableNow(ReadHandler * aReadHandler) { return FindReadHandlerNode(aReadHandler)->IsReportableNow(); } + bool IsReportableNow(ReadHandler * aReadHandler) + { + // Update the now timestamp to ensure external calls to IsReportableNow are always comparing to the current time + Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); + ReadHandlerNode * node = FindReadHandlerNode(aReadHandler); + return (nullptr != node) ? node->IsReportableNow(now) : false; + } + /// @brief Check if a ReadHandler is reportable without considering the timing - bool IsReadHandlerReportable(ReadHandler * aReadHandler) const { return aReadHandler->IsReportable(); } + bool IsReadHandlerReportable(ReadHandler * aReadHandler) const { return aReadHandler->ShouldStartReporting(); } /// @brief Sets the ForceDirty flag of a ReadHandler void HandlerForceDirtyState(ReadHandler * aReadHandler) { aReadHandler->ForceDirtyState(); } diff --git a/src/app/reporting/ReportSchedulerImpl.cpp b/src/app/reporting/ReportSchedulerImpl.cpp index 74f75a663277aa..41d80cc7114ae6 100644 --- a/src/app/reporting/ReportSchedulerImpl.cpp +++ b/src/app/reporting/ReportSchedulerImpl.cpp @@ -43,7 +43,7 @@ void ReportSchedulerImpl::OnEnterActiveMode() { #if ICD_REPORT_ON_ENTER_ACTIVE_MODE Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); - mNodesPool.ForEachActiveObject([now, this](ReadHandlerNode * node) { + mNodesPool.ForEachActiveObject([now](ReadHandlerNode * node) { if (now >= node->GetMinTimestamp()) { this->HandlerForceDirtyState(node->GetReadHandler()); @@ -54,25 +54,25 @@ void ReportSchedulerImpl::OnEnterActiveMode() #endif } -/// @brief When a ReadHandler is added, register it, which will schedule an engine run -void ReportSchedulerImpl::OnReadHandlerCreated(ReadHandler * aReadHandler) +/// @brief When a ReadHandler is added, register it in the scheduler node pool. Scheduling the report here is un-necessary since the +/// ReadHandler will call MoveToState(HandlerState::CanStartReporting);, which will call OnBecameReportable() and schedule the +/// report. +void ReportSchedulerImpl::OnSubscriptionEstablished(ReadHandler * aReadHandler) { ReadHandlerNode * newNode = FindReadHandlerNode(aReadHandler); // Handler must not be registered yet; it's just being constructed. VerifyOrDie(nullptr == newNode); + + Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); + // The NodePool is the same size as the ReadHandler pool from the IM Engine, so we don't need a check for size here since if a // ReadHandler was created, space should be available. - newNode = mNodesPool.CreateObject(aReadHandler, mTimerDelegate, this); + newNode = mNodesPool.CreateObject(aReadHandler, this, now); ChipLogProgress(DataManagement, "Registered a ReadHandler that will schedule a report between system Timestamp: %" PRIu64 " and system Timestamp %" PRIu64 ".", newNode->GetMinTimestamp().count(), newNode->GetMaxTimestamp().count()); - - Milliseconds32 newTimeout; - // No need to check for error here, since the node is already in the list otherwise we would have Died - CalculateNextReportTimeout(newTimeout, newNode); - ScheduleReport(newTimeout, newNode); } /// @brief When a ReadHandler becomes reportable, schedule, recalculate and reschedule the report. @@ -80,19 +80,26 @@ void ReportSchedulerImpl::OnBecameReportable(ReadHandler * aReadHandler) { ReadHandlerNode * node = FindReadHandlerNode(aReadHandler); VerifyOrReturn(nullptr != node); + + Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); + Milliseconds32 newTimeout; - CalculateNextReportTimeout(newTimeout, node); - ScheduleReport(newTimeout, node); + CalculateNextReportTimeout(newTimeout, node, now); + ScheduleReport(newTimeout, node, now); } -void ReportSchedulerImpl::OnSubscriptionAction(ReadHandler * aReadHandler) +void ReportSchedulerImpl::OnSubscriptionReportSent(ReadHandler * aReadHandler) { ReadHandlerNode * node = FindReadHandlerNode(aReadHandler); VerifyOrReturn(nullptr != node); - node->SetIntervalTimeStamps(aReadHandler); + + Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); + + node->SetCanBeSynced(false); + node->SetIntervalTimeStamps(aReadHandler, now); Milliseconds32 newTimeout; - CalculateNextReportTimeout(newTimeout, node); - ScheduleReport(newTimeout, node); + CalculateNextReportTimeout(newTimeout, node, now); + ScheduleReport(newTimeout, node, now); node->SetEngineRunScheduled(false); } @@ -108,7 +115,7 @@ void ReportSchedulerImpl::OnReadHandlerDestroyed(ReadHandler * aReadHandler) mNodesPool.ReleaseObject(removeNode); } -CHIP_ERROR ReportSchedulerImpl::ScheduleReport(Timeout timeout, ReadHandlerNode * node) +CHIP_ERROR ReportSchedulerImpl::ScheduleReport(Timeout timeout, ReadHandlerNode * node, const Timestamp & now) { // Cancel Report if it is currently scheduled mTimerDelegate->CancelTimer(node); @@ -144,13 +151,12 @@ bool ReportSchedulerImpl::IsReportScheduled(ReadHandler * aReadHandler) return mTimerDelegate->IsTimerActive(node); } -CHIP_ERROR ReportSchedulerImpl::CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode) +CHIP_ERROR ReportSchedulerImpl::CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode, const Timestamp & now) { VerifyOrReturnError(nullptr != FindReadHandlerNode(aNode->GetReadHandler()), CHIP_ERROR_INVALID_ARGUMENT); - Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); // If the handler is reportable now, just schedule a report immediately - if (aNode->IsReportableNow()) + if (aNode->IsReportableNow(now)) { // If the handler is reportable now, just schedule a report immediately timeout = Milliseconds32(0); diff --git a/src/app/reporting/ReportSchedulerImpl.h b/src/app/reporting/ReportSchedulerImpl.h index 573184ada02d5a..f3870192c4b1f6 100644 --- a/src/app/reporting/ReportSchedulerImpl.h +++ b/src/app/reporting/ReportSchedulerImpl.h @@ -36,9 +36,9 @@ class ReportSchedulerImpl : public ReportScheduler void OnEnterActiveMode() override; // ReadHandlerObserver - void OnReadHandlerCreated(ReadHandler * aReadHandler) final; + void OnSubscriptionEstablished(ReadHandler * aReadHandler) final; void OnBecameReportable(ReadHandler * aReadHandler) final; - void OnSubscriptionAction(ReadHandler * aReadHandler) final; + void OnSubscriptionReportSent(ReadHandler * aReadHandler) final; void OnReadHandlerDestroyed(ReadHandler * aReadHandler) override; bool IsReportScheduled(ReadHandler * aReadHandler); @@ -46,14 +46,14 @@ class ReportSchedulerImpl : public ReportScheduler void ReportTimerCallback() override; protected: - virtual CHIP_ERROR ScheduleReport(Timeout timeout, ReadHandlerNode * node); + virtual CHIP_ERROR ScheduleReport(Timeout timeout, ReadHandlerNode * node, const Timestamp & now); void CancelReport(ReadHandler * aReadHandler); virtual void UnregisterAllHandlers(); private: friend class chip::app::reporting::TestReportScheduler; - virtual CHIP_ERROR CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode); + virtual CHIP_ERROR CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode, const Timestamp & now); }; } // namespace reporting diff --git a/src/app/reporting/SynchronizedReportSchedulerImpl.cpp b/src/app/reporting/SynchronizedReportSchedulerImpl.cpp index b3f700b8cbcc0f..ddb8bb7b1c4149 100644 --- a/src/app/reporting/SynchronizedReportSchedulerImpl.cpp +++ b/src/app/reporting/SynchronizedReportSchedulerImpl.cpp @@ -44,17 +44,17 @@ void SynchronizedReportSchedulerImpl::OnReadHandlerDestroyed(ReadHandler * aRead } } -CHIP_ERROR SynchronizedReportSchedulerImpl::ScheduleReport(Timeout timeout, ReadHandlerNode * node) +CHIP_ERROR SynchronizedReportSchedulerImpl::ScheduleReport(Timeout timeout, ReadHandlerNode * node, const Timestamp & now) { // Cancel Report if it is currently scheduled mTimerDelegate->CancelTimer(this); if (timeout == Milliseconds32(0)) { - ReportTimerCallback(); + TimerFired(); return CHIP_NO_ERROR; } ReturnErrorOnFailure(mTimerDelegate->StartTimer(this, timeout)); - mTestNextReportTimestamp = mTimerDelegate->GetCurrentMonotonicTimestamp() + timeout; + mTestNextReportTimestamp = now + timeout; return CHIP_NO_ERROR; } @@ -73,10 +73,9 @@ bool SynchronizedReportSchedulerImpl::IsReportScheduled() /// @brief Find the smallest maximum interval possible and set it as the common maximum /// @return NO_ERROR if the smallest maximum interval was found, error otherwise, INVALID LIST LENGTH if the list is empty -CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMaxInterval() +CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMaxInterval(const Timestamp & now) { VerifyOrReturnError(mNodesPool.Allocated(), CHIP_ERROR_INVALID_LIST_LENGTH); - System::Clock::Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); System::Clock::Timestamp earliest = now + Seconds16::max(); mNodesPool.ForEachActiveObject([&earliest, now](ReadHandlerNode * node) { @@ -97,10 +96,10 @@ CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMaxInterval() /// minimum. If the max timestamp has not been updated and is in the past, or if no min timestamp is lower than the current max /// timestamp, this will set now as the common minimum timestamp, thus allowing the report to be sent immediately. /// @return NO_ERROR if the highest minimum timestamp was found, error otherwise, INVALID LIST LENGTH if the list is empty -CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMinInterval() +CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMinInterval(const Timestamp & now) { VerifyOrReturnError(mNodesPool.Allocated(), CHIP_ERROR_INVALID_LIST_LENGTH); - System::Clock::Timestamp latest = mTimerDelegate->GetCurrentMonotonicTimestamp(); + System::Clock::Timestamp latest = now; mNodesPool.ForEachActiveObject([&latest, this](ReadHandlerNode * node) { if (node->GetMinTimestamp() > latest && this->IsReadHandlerReportable(node->GetReadHandler()) && @@ -118,20 +117,19 @@ CHIP_ERROR SynchronizedReportSchedulerImpl::FindNextMinInterval() return CHIP_NO_ERROR; } -CHIP_ERROR SynchronizedReportSchedulerImpl::CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode) +CHIP_ERROR SynchronizedReportSchedulerImpl::CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aNode, + const Timestamp & now) { VerifyOrReturnError(nullptr != FindReadHandlerNode(aNode->GetReadHandler()), CHIP_ERROR_INVALID_ARGUMENT); - ReturnErrorOnFailure(FindNextMaxInterval()); - ReturnErrorOnFailure(FindNextMinInterval()); + ReturnErrorOnFailure(FindNextMaxInterval(now)); + ReturnErrorOnFailure(FindNextMinInterval(now)); bool reportableNow = false; bool reportableAtMin = false; - Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); - - mNodesPool.ForEachActiveObject([&reportableNow, &reportableAtMin, this](ReadHandlerNode * node) { + mNodesPool.ForEachActiveObject([&reportableNow, &reportableAtMin, this, now](ReadHandlerNode * node) { if (!node->IsEngineRunScheduled()) { - if (node->IsReportableNow()) + if (node->IsReportableNow(now)) { reportableNow = true; return Loop::Break; @@ -162,18 +160,6 @@ CHIP_ERROR SynchronizedReportSchedulerImpl::CalculateNextReportTimeout(Timeout & timeout = mNextMaxTimestamp - now; } - // Updates the synching time of each handler - mNodesPool.ForEachActiveObject([now, timeout](ReadHandlerNode * node) { - // Prevent modifying the sync if the handler is currently reportable, sync's purpose is to allow handler to become - // reportable earlier than their max interval - if (!node->IsReportableNow()) - { - node->SetSyncTimestamp(Milliseconds64(now + timeout)); - } - - return Loop::Continue; - }); - return CHIP_NO_ERROR; } @@ -181,14 +167,21 @@ CHIP_ERROR SynchronizedReportSchedulerImpl::CalculateNextReportTimeout(Timeout & /// the engine already verifies that read handlers are reportable before sending a report void SynchronizedReportSchedulerImpl::TimerFired() { + Timestamp now = mTimerDelegate->GetCurrentMonotonicTimestamp(); + InteractionModelEngine::GetInstance()->GetReportingEngine().ScheduleRun(); - mNodesPool.ForEachActiveObject([](ReadHandlerNode * node) { - if (node->IsReportableNow()) + mNodesPool.ForEachActiveObject([now](ReadHandlerNode * node) { + if (node->GetMinTimestamp() <= now) + { + node->SetCanBeSynced(true); + } + + if (node->IsReportableNow(now)) { node->SetEngineRunScheduled(true); - ChipLogProgress(DataManagement, "Handler: %p with min: %" PRIu64 " and max: %" PRIu64 " and sync: %" PRIu64, (node), - node->GetMinTimestamp().count(), node->GetMaxTimestamp().count(), node->GetSyncTimestamp().count()); + ChipLogProgress(DataManagement, "Handler: %p with min: %" PRIu64 " and max: %" PRIu64 "", (node), + node->GetMinTimestamp().count(), node->GetMaxTimestamp().count()); } return Loop::Continue; diff --git a/src/app/reporting/SynchronizedReportSchedulerImpl.h b/src/app/reporting/SynchronizedReportSchedulerImpl.h index 9fd4a8ca0aa684..9e3689d144194a 100644 --- a/src/app/reporting/SynchronizedReportSchedulerImpl.h +++ b/src/app/reporting/SynchronizedReportSchedulerImpl.h @@ -43,15 +43,15 @@ class SynchronizedReportSchedulerImpl : public ReportSchedulerImpl, public Timer void TimerFired() override; protected: - CHIP_ERROR ScheduleReport(System::Clock::Timeout timeout, ReadHandlerNode * node) override; + CHIP_ERROR ScheduleReport(System::Clock::Timeout timeout, ReadHandlerNode * node, const Timestamp & now) override; void CancelReport(); private: friend class chip::app::reporting::TestReportScheduler; - CHIP_ERROR FindNextMinInterval(); - CHIP_ERROR FindNextMaxInterval(); - CHIP_ERROR CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aReadHandlerNode) override; + CHIP_ERROR FindNextMinInterval(const Timestamp & now); + CHIP_ERROR FindNextMaxInterval(const Timestamp & now); + CHIP_ERROR CalculateNextReportTimeout(Timeout & timeout, ReadHandlerNode * aReadHandlerNode, const Timestamp & now) override; Timestamp mNextMaxTimestamp = Milliseconds64(0); Timestamp mNextMinTimestamp = Milliseconds64(0); diff --git a/src/app/server/Server.h b/src/app/server/Server.h index e5b5585be19f44..e2bcbe83d363a8 100644 --- a/src/app/server/Server.h +++ b/src/app/server/Server.h @@ -542,9 +542,9 @@ class Server case Credentials::CertificateValidityResult::kExpired: case Credentials::CertificateValidityResult::kExpiredAtLastKnownGoodTime: case Credentials::CertificateValidityResult::kTimeUnknown: { - uint8_t certType; + Credentials::CertType certType; ReturnErrorOnFailure(cert->mSubjectDN.GetCertType(certType)); - if (certType == Credentials::kCertType_Root) + if (certType == Credentials::CertType::kRoot) { return CHIP_NO_ERROR; } diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp index 0f907567ee44f4..ea464c3d9471b0 100644 --- a/src/app/tests/TestReadInteraction.cpp +++ b/src/app/tests/TestReadInteraction.cpp @@ -2234,7 +2234,7 @@ void TestReadInteraction::TestSubscribeUrgentWildcardEvent(nlTestSuite * apSuite reportScheduler->GetMinTimestampForHandler(delegate.mpReadHandler) < System::SystemClock().GetMonotonicTimestamp()); NL_TEST_ASSERT(apSuite, !delegate.mpReadHandler->IsDirty()); - NL_TEST_ASSERT(apSuite, !delegate.mpReadHandler->IsReportable()); + NL_TEST_ASSERT(apSuite, !delegate.mpReadHandler->ShouldStartReporting()); // And the non-urgent one should not have changed state either, since // it's waiting for the max-interval. @@ -2245,7 +2245,7 @@ void TestReadInteraction::TestSubscribeUrgentWildcardEvent(nlTestSuite * apSuite reportScheduler->GetMaxTimestampForHandler(nonUrgentDelegate.mpReadHandler) > System::SystemClock().GetMonotonicTimestamp()); NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->IsDirty()); - NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->IsReportable()); + NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->ShouldStartReporting()); // There should be no reporting run scheduled. This is very important; // otherwise we can get a false-positive pass below because the run was @@ -2257,12 +2257,12 @@ void TestReadInteraction::TestSubscribeUrgentWildcardEvent(nlTestSuite * apSuite // Urgent read handler should now be dirty, and reportable. NL_TEST_ASSERT(apSuite, delegate.mpReadHandler->IsDirty()); - NL_TEST_ASSERT(apSuite, delegate.mpReadHandler->IsReportable()); + NL_TEST_ASSERT(apSuite, delegate.mpReadHandler->ShouldStartReporting()); NL_TEST_ASSERT(apSuite, reportScheduler->IsReadHandlerReportable(delegate.mpReadHandler)); // Non-urgent read handler should not be reportable. NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->IsDirty()); - NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->IsReportable()); + NL_TEST_ASSERT(apSuite, !nonUrgentDelegate.mpReadHandler->ShouldStartReporting()); // Still no reporting should have happened. NL_TEST_ASSERT(apSuite, !delegate.mGotEventResponse); diff --git a/src/app/tests/TestReportScheduler.cpp b/src/app/tests/TestReportScheduler.cpp index 9d19f85636e15e..c626202f82f629 100644 --- a/src/app/tests/TestReportScheduler.cpp +++ b/src/app/tests/TestReportScheduler.cpp @@ -135,9 +135,6 @@ class TestTimerDelegate : public ReportScheduler::TimerDelegate static void TimerCallbackInterface(System::Layer * aLayer, void * aAppState) { - // Normaly we would call the callback here, thus scheduling an engine run, but we don't need it for this test as we simulate - // all the callbacks related to report emissions. The actual callback should look like this: - // TimerContext * context = static_cast(aAppState); context->TimerFired(); ChipLogProgress(DataManagement, "Simluating engine run for Handler: %p", aAppState); @@ -249,6 +246,23 @@ SynchronizedReportSchedulerImpl syncScheduler(&sTestTimerSynchronizedDelegate); class TestReportScheduler { public: + /// @brief Mimicks the various operations that happen on a subscription transaction after a read handler was created so that + /// readhandlers are in the expected state for further tests. + /// @param readHandler + /// @param scheduler + static CHIP_ERROR MockReadHandlerSubscriptionTransaction(ReadHandler * readHandler, ReportScheduler * scheduler, + uint8_t min_interval_seconds, uint8_t max_interval_seconds) + { + ReturnErrorOnFailure(readHandler->SetMaxReportingInterval(max_interval_seconds)); + ReturnErrorOnFailure(readHandler->SetMinReportingIntervalForTests(min_interval_seconds)); + readHandler->ClearStateFlag(ReadHandler::ReadHandlerFlags::PrimingReports); + readHandler->SetStateFlag(ReadHandler::ReadHandlerFlags::ActiveSubscription); + scheduler->OnSubscriptionEstablished(readHandler); + readHandler->MoveToState(ReadHandler::HandlerState::CanStartReporting); + + return CHIP_NO_ERROR; + } + static ReadHandler * GetReadHandlerFromPool(ReportScheduler * scheduler, uint32_t target) { uint32_t i = 0; @@ -285,6 +299,7 @@ class TestReportScheduler { ReadHandler * readHandler = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + sScheduler.OnSubscriptionEstablished(readHandler); NL_TEST_ASSERT(aSuite, nullptr != readHandler); VerifyOrReturn(nullptr != readHandler); NL_TEST_ASSERT(aSuite, nullptr != sScheduler.FindReadHandlerNode(readHandler)); @@ -349,31 +364,18 @@ class TestReportScheduler // Test OnReadHandler created ReadHandler * readHandler1 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); - - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMaxReportingInterval(2)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMinReportingIntervalForTests(1)); - ReadHandlerNode * node = sScheduler.FindReadHandlerNode(readHandler1); - node->SetIntervalTimeStamps(readHandler1); - readHandler1->MoveToState(ReadHandler::HandlerState::GeneratingReports); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler1, &sScheduler, 1, 2)); readHandler1->ForceDirtyState(); // Clean read handler, will be triggered at max interval ReadHandler * readHandler2 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMaxReportingInterval(3)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMinReportingIntervalForTests(0)); - node = sScheduler.FindReadHandlerNode(readHandler2); - node->SetIntervalTimeStamps(readHandler2); - readHandler2->MoveToState(ReadHandler::HandlerState::GeneratingReports); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler2, &sScheduler, 0, 3)); // Clean read handler, will be triggered at max interval, but will be cancelled before ReadHandler * readHandler3 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler3->SetMaxReportingInterval(3)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler3->SetMinReportingIntervalForTests(0)); - node = sScheduler.FindReadHandlerNode(readHandler3); - node->SetIntervalTimeStamps(readHandler3); - readHandler3->MoveToState(ReadHandler::HandlerState::GeneratingReports); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler3, &sScheduler, 0, 3)); // Confirms that none of the ReadHandlers are currently reportable NL_TEST_ASSERT(aSuite, !sScheduler.IsReportableNow(readHandler1)); @@ -427,22 +429,20 @@ class TestReportScheduler ReadHandler * readHandler = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); - // Test OnReadHandler created registered the ReadHandler in the scheduler + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler, &sScheduler, 1, 2)); + + // Verifies OnSubscriptionEstablished registered the ReadHandler in the scheduler NL_TEST_ASSERT(aSuite, nullptr != sScheduler.FindReadHandlerNode(readHandler)); // Should have registered the read handler in the scheduler and scheduled a report NL_TEST_ASSERT(aSuite, sScheduler.GetNumReadHandlers() == 1); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler->SetMaxReportingInterval(2)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler->SetMinReportingIntervalForTests(1)); + ReadHandlerNode * node = sScheduler.FindReadHandlerNode(readHandler); - node->SetIntervalTimeStamps(readHandler); // Test OnReportingIntervalsChanged modified the intervals and re-scheduled a report NL_TEST_ASSERT(aSuite, node->GetMinTimestamp().count() == 1000); NL_TEST_ASSERT(aSuite, node->GetMaxTimestamp().count() == 2000); - // Do those manually to avoid scheduling an engine run - readHandler->MoveToState(ReadHandler::HandlerState::GeneratingReports); NL_TEST_ASSERT(aSuite, sScheduler.IsReportScheduled(readHandler)); NL_TEST_ASSERT(aSuite, nullptr != node); @@ -459,9 +459,9 @@ class TestReportScheduler // Check that no report is scheduled since the min interval has expired, the timer should now be stopped NL_TEST_ASSERT(aSuite, !sScheduler.IsReportScheduled(readHandler)); - // Test OnSubscriptionAction + // Test OnSubscriptionReportSent readHandler->ClearForceDirtyFlag(); - readHandler->mObserver->OnSubscriptionAction(readHandler); + readHandler->mObserver->OnSubscriptionReportSent(readHandler); // Should have changed the scheduled timeout to the handlers max interval, to check, we wait for the min interval to // confirm it is not expired yet so the report should still be scheduled @@ -505,19 +505,13 @@ class TestReportScheduler ReadHandler * readHandler1 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMaxReportingInterval(2)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMinReportingIntervalForTests(0)); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler1, &syncScheduler, 0, 2)); ReadHandlerNode * node1 = syncScheduler.FindReadHandlerNode(readHandler1); - node1->SetIntervalTimeStamps(readHandler1); - readHandler1->MoveToState(ReadHandler::HandlerState::GeneratingReports); ReadHandler * readHandler2 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMaxReportingInterval(3)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMinReportingIntervalForTests(1)); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler2, &syncScheduler, 1, 3)); ReadHandlerNode * node2 = syncScheduler.FindReadHandlerNode(readHandler2); - node2->SetIntervalTimeStamps(readHandler2); - readHandler2->MoveToState(ReadHandler::HandlerState::GeneratingReports); // Confirm all handler are currently registered in the scheduler NL_TEST_ASSERT(aSuite, syncScheduler.GetNumReadHandlers() == 2); @@ -544,9 +538,9 @@ class TestReportScheduler NL_TEST_ASSERT(aSuite, !sScheduler.IsReportScheduled(readHandler2)); // Simulate a report emission for readHandler1 - readHandler1->mObserver->OnSubscriptionAction(readHandler1); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); // Simulate a report emission for readHandler2 - readHandler2->mObserver->OnSubscriptionAction(readHandler2); + readHandler2->mObserver->OnSubscriptionReportSent(readHandler2); // Validate that the max timestamp for both readhandlers got updated and that the next report emission is scheduled on // the new max timestamp for readhandler1 @@ -564,28 +558,51 @@ class TestReportScheduler NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); - // confirm report scheduled now - NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node2->GetMinTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node2->GetMinTimestamp()); - - // Confirm that the next report emission is scheduled on the min timestamp of readHandler2 as it is the highest reportable + // Confirm that the next report emission is scheduled on the min timestamp of readHandler2 (now) as it is the highest + // reportable NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node2->GetMinTimestamp()); + NL_TEST_ASSERT(aSuite, node1->CanBeSynced() == true); // Simulate a report emission for readHandler1 - readHandler1->mObserver->OnSubscriptionAction(readHandler1); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); // ReadHandler 2 should still be reportable since it hasn't emitted a report yet NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); readHandler2->ClearForceDirtyFlag(); - readHandler2->mObserver->OnSubscriptionAction(readHandler2); + readHandler2->mObserver->OnSubscriptionReportSent(readHandler2); + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); + + // Simulate ReadHandler 1 becoming dirty after ReadHandler 2 past min will trigger a report emission for both + + // Wait past ReadHandler 2 min + sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(1100)); + // No handler should be reportable yet NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); + readHandler1->ForceDirtyState(); + + // Both read handlers should now be reportable since the ForceDirty should immediately trigger the timer expiration callback + NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); + NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); + + // Simulate a report emission for readHandler1 + readHandler1->ClearForceDirtyFlag(); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); + + readHandler2->mObserver->OnSubscriptionReportSent(readHandler2); + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); + + // Confirm both handlers are not reportable anymore + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); + NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); // Validate next report scheduled on the max timestamp of readHandler1 NL_TEST_ASSERT(aSuite, node1->GetMaxTimestamp() > sTestTimerSynchronizedDelegate.GetCurrentMonotonicTimestamp()); NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); - // Simulate readHandler1 becoming dirty after less than 1 seconds, since it is reportable now, this will Schedule an Engin + // Simulate readHandler1 becoming dirty after less than 1 seconds, since it is reportable now, this will Schedule an Engine // run immediately sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(900)); readHandler1->ForceDirtyState(); @@ -594,19 +611,21 @@ class TestReportScheduler // Simulate a report emission for readHandler1 readHandler1->ClearForceDirtyFlag(); - readHandler1->mObserver->OnSubscriptionAction(readHandler1); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); - // The next report should be scheduler on the max timestamp of readHandler1 and readHandler2 should be synced + // The next report should be scheduler on the max timestamp of readHandler1 NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node1->GetMaxTimestamp()); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(2000)); + // Confirm node 2 can now be synced since the scheduler timer has fired on the max timestamp of readHandler1 + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == true); + NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); - readHandler1->mObserver->OnSubscriptionAction(readHandler1); - readHandler2->mObserver->OnSubscriptionAction(readHandler2); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); + readHandler2->mObserver->OnSubscriptionReportSent(readHandler2); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); @@ -618,11 +637,8 @@ class TestReportScheduler ReadHandler * readHandler3 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler3->SetMaxReportingInterval(3)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler3->SetMinReportingIntervalForTests(2)); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler3, &syncScheduler, 2, 3)); ReadHandlerNode * node3 = syncScheduler.FindReadHandlerNode(readHandler3); - node3->SetIntervalTimeStamps(readHandler3); - readHandler3->MoveToState(ReadHandler::HandlerState::GeneratingReports); // Confirm all handler are currently registered in the scheduler NL_TEST_ASSERT(aSuite, syncScheduler.GetNumReadHandlers() == 3); @@ -643,17 +659,18 @@ class TestReportScheduler readHandler2->mObserver->OnBecameReportable(readHandler2); // Simulate a report emission for readHandler1 and readHandler2 - readHandler1->mObserver->OnSubscriptionAction(readHandler1); - readHandler1->mObserver->OnSubscriptionAction(readHandler2); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler2); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); // Confirm that next report is scheduled on the max timestamp of readHandler3 and other 2 readHandlers are synced NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node3->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node3->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node3->GetMaxTimestamp()); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(2000)); + // Confirm nodes 1 and 2 can now be synced since the scheduler timer has fired on the max timestamp of readHandler1 + NL_TEST_ASSERT(aSuite, node1->CanBeSynced() == true); + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == true); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); @@ -662,37 +679,32 @@ class TestReportScheduler readHandler2->mObserver->OnBecameReportable(readHandler2); readHandler3->mObserver->OnBecameReportable(readHandler3); // Engine run should happen here and send all reports - readHandler1->mObserver->OnSubscriptionAction(readHandler1); - readHandler2->mObserver->OnSubscriptionAction(readHandler2); - readHandler3->mObserver->OnSubscriptionAction(readHandler3); + readHandler1->mObserver->OnSubscriptionReportSent(readHandler1); + readHandler2->mObserver->OnSubscriptionReportSent(readHandler2); + readHandler3->mObserver->OnSubscriptionReportSent(readHandler3); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler3)); NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node1->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node1->GetMaxTimestamp()); // Now simulate a new readHandler being added with a max forcing a conflict ReadHandler * readHandler4 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler4->SetMaxReportingInterval(1)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler4->SetMinReportingIntervalForTests(0)); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler4, &syncScheduler, 0, 1)); ReadHandlerNode * node4 = syncScheduler.FindReadHandlerNode(readHandler4); - node4->SetIntervalTimeStamps(readHandler4); - readHandler4->MoveToState(ReadHandler::HandlerState::GeneratingReports); // Confirm all handler are currently registered in the scheduler NL_TEST_ASSERT(aSuite, syncScheduler.GetNumReadHandlers() == 4); - // Confirm next report is scheduled on the max timestamp of readHandler4 and other handlers 1 and 2 are synced + // Confirm next report is scheduled on the max timestamp of readHandler4 NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node4->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node4->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node4->GetMaxTimestamp()); - - // Confirm handler 3 is synched on a later timestamp since its min is higher than the max of readHandler4 - NL_TEST_ASSERT(aSuite, node3->GetSyncTimestamp() == node1->GetMaxTimestamp()); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(1100)); + // Confirm node 1 and 2 can now be synced since the scheduler timer has fired on the max timestamp of readHandler4 + NL_TEST_ASSERT(aSuite, node1->CanBeSynced() == true); + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == true); + // Confirm handler 3 cannot be synched on a later timestamp since its min is higher than the max of readHandler4 + NL_TEST_ASSERT(aSuite, node3->CanBeSynced() == false); // Confirm readHandler1, 2 and 4 are reportable NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); @@ -704,9 +716,9 @@ class TestReportScheduler readHandler4->mObserver->OnBecameReportable(readHandler1); readHandler4->mObserver->OnBecameReportable(readHandler2); readHandler4->mObserver->OnBecameReportable(readHandler4); - readHandler4->mObserver->OnSubscriptionAction(readHandler1); - readHandler4->mObserver->OnSubscriptionAction(readHandler2); - readHandler4->mObserver->OnSubscriptionAction(readHandler4); + readHandler4->mObserver->OnSubscriptionReportSent(readHandler1); + readHandler4->mObserver->OnSubscriptionReportSent(readHandler2); + readHandler4->mObserver->OnSubscriptionReportSent(readHandler4); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler4)); @@ -722,24 +734,24 @@ class TestReportScheduler syncScheduler.OnBecameReportable(readHandler2); syncScheduler.OnBecameReportable(readHandler3); syncScheduler.OnBecameReportable(readHandler4); - syncScheduler.OnSubscriptionAction(readHandler1); - syncScheduler.OnSubscriptionAction(readHandler2); - syncScheduler.OnSubscriptionAction(readHandler3); - syncScheduler.OnSubscriptionAction(readHandler4); + syncScheduler.OnSubscriptionReportSent(readHandler1); + syncScheduler.OnSubscriptionReportSent(readHandler2); + syncScheduler.OnSubscriptionReportSent(readHandler3); + syncScheduler.OnSubscriptionReportSent(readHandler4); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler3)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler4)); - // Next emission should be scheduled on the max timestamp of readHandler4 as it is the most restrictive, and handlers 1 and - // 2 should be synced to handler 4 + // Next emission should be scheduled on the max timestamp of readHandler4 as it is the most restrictive NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node4->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node4->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node4->GetMaxTimestamp()); - // handler 3 should have a sync on a different point as its min is higher, in this case it is the max timestamp of handler 1 - NL_TEST_ASSERT(aSuite, node3->GetSyncTimestamp() == node1->GetMaxTimestamp()); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(1000)); + // Confirm node 1 and 2 can now be synced since the scheduler timer has fired on the max timestamp of readHandler4 + NL_TEST_ASSERT(aSuite, node1->CanBeSynced() == true); + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == true); + // Confirm node 3 still cannot sync + NL_TEST_ASSERT(aSuite, node3->CanBeSynced() == false); // Confirm readHandler 1-2-4 are reportable NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); @@ -759,19 +771,14 @@ class TestReportScheduler NL_TEST_ASSERT(aSuite, syncScheduler.GetNumReadHandlers() == 0); readHandler1->MoveToState(ReadHandler::HandlerState::Idle); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMaxReportingInterval(2)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler1->SetMinReportingIntervalForTests(0)); - readHandler1->MoveToState(ReadHandler::HandlerState::GeneratingReports); - syncScheduler.OnReadHandlerCreated(readHandler1); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler1, &syncScheduler, 0, 2)); + // Forcing the dirty flag to make the scheduler call Engine::ScheduleRun() immediately readHandler1->ForceDirtyState(); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); readHandler2->MoveToState(ReadHandler::HandlerState::Idle); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMaxReportingInterval(4)); - NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == readHandler2->SetMinReportingIntervalForTests(3)); - readHandler2->MoveToState(ReadHandler::HandlerState::GeneratingReports); - syncScheduler.OnReadHandlerCreated(readHandler2); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == MockReadHandlerSubscriptionTransaction(readHandler2, &syncScheduler, 3, 4)); readHandler2->ForceDirtyState(); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); @@ -779,14 +786,14 @@ class TestReportScheduler node2 = syncScheduler.FindReadHandlerNode(readHandler2); readHandler1->ClearForceDirtyFlag(); // report got emited so clear dirty flag - syncScheduler.OnSubscriptionAction(readHandler1); + syncScheduler.OnSubscriptionReportSent(readHandler1); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); // Confirm next report is scheduled on the max timestamp of readHandler1 and readhandler2 is not synced NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); // Node 2's sync timestamp should have remained unaffected since its min is higher - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node2->GetMaxTimestamp()); + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == false); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(2000)); // Verify handler 1 became reportable @@ -795,22 +802,22 @@ class TestReportScheduler syncScheduler.OnBecameReportable(readHandler1); // simulate run with only readhandler1 reportable - syncScheduler.OnSubscriptionAction(readHandler1); + syncScheduler.OnSubscriptionReportSent(readHandler1); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, !syncScheduler.IsReportableNow(readHandler2)); NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node2->GetMinTimestamp()); - NL_TEST_ASSERT(aSuite, node1->GetSyncTimestamp() == node2->GetMinTimestamp()); sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(1000)); + NL_TEST_ASSERT(aSuite, node1->CanBeSynced() == true); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler1)); NL_TEST_ASSERT(aSuite, syncScheduler.IsReportableNow(readHandler2)); readHandler2->ClearForceDirtyFlag(); - syncScheduler.OnSubscriptionAction(readHandler1); - syncScheduler.OnSubscriptionAction(readHandler2); + syncScheduler.OnSubscriptionReportSent(readHandler1); + syncScheduler.OnSubscriptionReportSent(readHandler2); NL_TEST_ASSERT(aSuite, syncScheduler.mTestNextReportTimestamp == node1->GetMaxTimestamp()); - NL_TEST_ASSERT(aSuite, node2->GetSyncTimestamp() == node2->GetMaxTimestamp()); + NL_TEST_ASSERT(aSuite, node2->CanBeSynced() == false); syncScheduler.UnregisterAllHandlers(); readHandlerPool.ReleaseAll(); diff --git a/src/app/tests/suites/TestCASERecovery.yaml b/src/app/tests/suites/TestCASERecovery.yaml index 69ecf23a9f50fe..ef72e4dff7e512 100644 --- a/src/app/tests/suites/TestCASERecovery.yaml +++ b/src/app/tests/suites/TestCASERecovery.yaml @@ -33,7 +33,7 @@ tests: command: "readAttribute" attribute: "DataModelRevision" response: - value: 1 + value: 17 - label: "Reboot the server" cluster: "SystemCommands" @@ -72,4 +72,4 @@ tests: command: "readAttribute" attribute: "DataModelRevision" response: - value: 1 + value: 17 diff --git a/src/app/tests/suites/TestDescriptorCluster.yaml b/src/app/tests/suites/TestDescriptorCluster.yaml index 236b16a16103eb..03bf2319f493d9 100644 --- a/src/app/tests/suites/TestDescriptorCluster.yaml +++ b/src/app/tests/suites/TestDescriptorCluster.yaml @@ -32,7 +32,8 @@ tests: command: "readAttribute" attribute: "DeviceTypeList" response: - value: [{ DeviceType: 22, Revision: 1 }] + value: + [{ DeviceType: 17, Revision: 1 }, { DeviceType: 22, Revision: 1 }] - label: "Read attribute Server list" command: "readAttribute" diff --git a/src/app/tests/suites/TestGroupKeyManagementCluster.yaml b/src/app/tests/suites/TestGroupKeyManagementCluster.yaml index 11d190c78738d6..82e10bc2120374 100644 --- a/src/app/tests/suites/TestGroupKeyManagementCluster.yaml +++ b/src/app/tests/suites/TestGroupKeyManagementCluster.yaml @@ -556,6 +556,15 @@ tests: response: error: RESOURCE_EXHAUSTED + - label: "Try to remove KeySet index 0 should fail" + command: "KeySetRemove" + arguments: + values: + - name: "GroupKeySetID" + value: 0 + response: + error: INVALID_COMMAND + - label: "Write Group Keys (invalid)" command: "writeAttribute" attribute: "GroupKeyMap" diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml index 6afdb3f929d185..2785ad6e7f8bc5 100644 --- a/src/app/tests/suites/certification/PICS.yaml +++ b/src/app/tests/suites/certification/PICS.yaml @@ -710,26 +710,6 @@ PICS: - label: "Does the device implement the Access Control Cluster as a client?" id: ACL.C - #ACL -- Global Attributes - - label: "Does the device implement the ClusterRevision(ACL) attribute?" - id: ACL.S.Afffd - - - label: "Does the device implement the FeatureMap(ACL) attribute?" - id: ACL.S.Afffc - - - label: "Does the device implement the AttributeList(ACL) attribute?" - id: ACL.S.Afffb - - - label: "Does the device implement the EventList(ACL) attribute?" - id: ACL.S.Afffa - - - label: "Does the device implement the AcceptedCommandList(ACL) attribute?" - id: ACL.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(ACL) attribute?" - id: ACL.S.Afff8 - # # server / attributes # @@ -880,27 +860,6 @@ PICS: - label: "Does the device implement the Binding Cluster as a client?" id: BIND.C - #BIND -- Global Attributes - - label: "Does the device implement the ClusterRevision(BIND) attribute?" - id: BIND.S.Afffd - - - label: "Does the device implement the FeatureMap(BIND) attribute?" - id: BIND.S.Afffc - - - label: "Does the device implement the AttributeList(BIND) attribute?" - id: BIND.S.Afffb - - - label: "Does the device implement the EventList(BIND) attribute?" - id: BIND.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(BIND) attribute?" - id: BIND.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(BIND) attribute?" - id: BIND.S.Afff8 - # # server / attributes # @@ -960,27 +919,6 @@ PICS: Cluster as a client?" id: BRBINFO.C - #BINFO -- Global Attributes - - label: "Does the device implement the ClusterRevision(BINFO) attribute?" - id: BINFO.S.Afffd - - - label: "Does the device implement the FeatureMap(BINFO) attribute?" - id: BINFO.S.Afffc - - - label: "Does the device implement the AttributeList(BINFO) attribute?" - id: BINFO.S.Afffb - - - label: "Does the device implement the EventList(BINFO) attribute?" - id: BINFO.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(BINFO) attribute?" - id: BINFO.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(BINFO) attribute?" - id: BINFO.S.Afff8 - # # server / attributes # @@ -1970,27 +1908,6 @@ PICS: a client?" id: CNET.C - #CNET -- Global Attributes - - label: "Does the device implement the ClusterRevision(CNET) attribute?" - id: CNET.S.Afffd - - - label: "Does the device implement the FeatureMap(CNET) attribute?" - id: CNET.S.Afffc - - - label: "Does the device implement the AttributeList(CNET) attribute?" - id: CNET.S.Afffb - - - label: "Does the device implement the EventList(CNET) attribute?" - id: CNET.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(CNET) attribute?" - id: CNET.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(CNET) attribute?" - id: CNET.S.Afff8 - # # server / attributes # @@ -2102,28 +2019,6 @@ PICS: - label: "Does the DUT(Server) support LastConnectErrorValue attribute?" id: CNET.S.A0007 - #OPCREDS -- Global Attributes - - label: "Does the device implement the ClusterRevision(OPCREDS) attribute?" - id: OPCREDS.S.Afffd - - - label: "Does the device implement the FeatureMap(OPCREDS) attribute?" - id: OPCREDS.S.Afffc - - - label: "Does the device implement the AttributeList(OPCREDS) attribute?" - id: OPCREDS.S.Afffb - - - label: "Does the device implement the EventList(OPCREDS) attribute?" - id: OPCREDS.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(OPCREDS) attribute?" - id: OPCREDS.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(OPCREDS) - attribute?" - id: OPCREDS.S.Afff8 - # # server / commandsReceived # @@ -2547,27 +2442,6 @@ PICS: "Does the device implement the Diagnostic Logs cluster as a client?" id: DLOG.C - #DLOG -- Global Attributes - - label: "Does the device implement the ClusterRevision(DLOG) attribute?" - id: DLOG.S.Afffd - - - label: "Does the device implement the FeatureMap(DLOG) attribute?" - id: DLOG.S.Afffc - - - label: "Does the device implement the AttributeList(DLOG) attribute?" - id: DLOG.S.Afffb - - - label: "Does the device implement the EventList(DLOG) attribute?" - id: DLOG.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(DLOG) attribute?" - id: DLOG.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(DLOG) attribute?" - id: DLOG.S.Afff8 - # # server / commandsReceived # @@ -3345,27 +3219,6 @@ PICS: a client?" id: DGETH.C - #DGETH -- Global Attributes - - label: "Does the device implement the ClusterRevision(DGETH) attribute?" - id: DGETH.S.Afffd - - - label: "Does the device implement the FeatureMap(DGETH) attribute?" - id: DGETH.S.Afffc - - - label: "Does the device implement the AttributeList(DGETH) attribute?" - id: DGETH.S.Afffb - - - label: "Does the device implement the EventList(DGETH) attribute?" - id: DGETH.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(DGETH) attribute?" - id: DGETH.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(DGETH) attribute?" - id: DGETH.S.Afff8 - # # server / attributes # @@ -3476,27 +3329,6 @@ PICS: - label: "Does the device implement the Fixed Label cluster as a client?" id: FLABEL.C - #FLABEL -- Global Attributes - - label: "Does the device implement the ClusterRevision(FLABEL) attribute?" - id: FLABEL.S.Afffd - - - label: "Does the device implement the FeatureMap(FLABEL) attribute?" - id: FLABEL.S.Afffc - - - label: "Does the device implement the AttributeList(FLABEL) attribute?" - id: FLABEL.S.Afffb - - - label: "Does the device implement the EventList(FLABEL) attribute?" - id: FLABEL.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(FLABEL) attribute?" - id: FLABEL.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(FLABEL) attribute?" - id: FLABEL.S.Afff8 - # # server / attributes # @@ -3520,26 +3352,6 @@ PICS: "Does the device implement the Flow Measurement cluster as a client?" id: FLW.C - #FLW -- Global Attributes - - label: "Does the device implement the ClusterRevision(FLW) attribute?" - id: FLW.S.Afffd - - - label: "Does the device implement the FeatureMap(FLW) attribute?" - id: FLW.S.Afffc - - - label: "Does the device implement the AttributeList(FLW) attribute?" - id: FLW.S.Afffb - - - label: "Does the device implement the EventList(FLW) attribute?" - id: FLW.S.Afffa - - - label: "Does the device implement the AcceptedCommandList(FLW) attribute?" - id: FLW.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(FLW) attribute?" - id: FLW.S.Afff8 - # # server / attributes # @@ -3655,27 +3467,6 @@ PICS: client?" id: DGGEN.C - #DGGEN -- Global Attributes - - label: "Does the device implement the ClusterRevision(DGGEN) attribute?" - id: DGGEN.S.Afffd - - - label: "Does the device implement the FeatureMap(DGGEN) attribute?" - id: DGGEN.S.Afffc - - - label: "Does the device implement the AttributeList(DGGEN) attribute?" - id: DGGEN.S.Afffb - - - label: "Does the device implement the EventList(DGGEN) attribute?" - id: DGGEN.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(DGGEN) attribute?" - id: DGGEN.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(DGGEN) attribute?" - id: DGGEN.S.Afff8 - # # server / attributes # @@ -5539,26 +5330,6 @@ PICS: client?" id: PRS.C - #PRS -- Global Attributes - - label: "Does the device implement the ClusterRevision(PRS) attribute?" - id: PRS.S.Afffd - - - label: "Does the device implement the FeatureMap(PRS) attribute?" - id: PRS.S.Afffc - - - label: "Does the device implement the AttributeList(PRS) attribute?" - id: PRS.S.Afffb - - - label: "Does the device implement the EventList(PRS) attribute?" - id: PRS.S.Afffa - - - label: "Does the device implement the AcceptedCommandList(PRS) attribute?" - id: PRS.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(PRS) attribute?" - id: PRS.S.Afff8 - # # server / attributes # @@ -5629,26 +5400,6 @@ PICS: as a client?" id: PCC.C - #PCC -- Global Attributes - - label: "Does the device implement the ClusterRevision(PCC) attribute?" - id: PCC.S.Afffd - - - label: "Does the device implement the FeatureMap(PCC) attribute?" - id: PCC.S.Afffc - - - label: "Does the device implement the AttributeList(PCC) attribute?" - id: PCC.S.Afffb - - - label: "Does the device implement the EventList(PCC) attribute?" - id: PCC.S.Afffa - - - label: "Does the device implement the AcceptedCommandList(PCC) attribute?" - id: PCC.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(PCC) attribute?" - id: PCC.S.Afff8 - # # server / attributes # @@ -6133,27 +5884,6 @@ PICS: client?" id: DGSW.C - #DGSW -- Global Attributes - - label: "Does the device implement the ClusterRevision(DGSW) attribute?" - id: DGSW.S.Afffd - - - label: "Does the device implement the FeatureMap(DGSW) attribute?" - id: DGSW.S.Afffc - - - label: "Does the device implement the AttributeList(DGSW) attribute?" - id: DGSW.S.Afffb - - - label: "Does the device implement the EventList(DGSW) attribute?" - id: DGSW.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(DGSW) attribute?" - id: DGSW.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(DGSW) attribute?" - id: DGSW.S.Afff8 - # # server / attributes # @@ -7281,29 +7011,6 @@ PICS: - label: "Does the device implement the SupportedCalendarTypes attribute ?" id: LTIME.S.A0002 - - label: - "Does the device implement the (0xFFF8) GeneratedCommandList attribute - ?" - id: LTIME.S.Afff8 - - - label: - "Does the device implement the (0xFFF9) AcceptedCommandList attribute - ?" - id: LTIME.S.Afff9 - - - label: "Does the device implement the (0xFFFA) EventList attribute ?" - id: LTIME.S.Afffa - - - label: "Does the device implement the (0xFFFB) AttributeList attribute ?" - id: LTIME.S.Afffb - - - label: "Does the device implement the (0xFFFC) FeatureMap attribute ?" - id: LTIME.S.Afffc - - - label: - "Does the device implement the (0xFFFD) ClusterRevision attribute ?" - id: LTIME.S.Afffd - - label: "Does the DUT (Server) support 12 Hr Hour Format ?" id: LTIME.S.A0000.12HR @@ -7377,29 +7084,6 @@ PICS: - label: "Does the device support the TemperatureUnit attribute ?" id: LUNIT.S.A0000 - - label: - "Does the device implement the (0xFFF8) GeneratedCommandList attribute - ?" - id: LUNIT.S.Afff8 - - - label: - "Does the device implement the (0xFFF9) AcceptedCommandList attribute - ?" - id: LUNIT.S.Afff9 - - - label: "Does the device implement the (0xFFFA) EventList attribute ?" - id: LUNIT.S.Afffa - - - label: "Does the device implement the (0xFFFB) AttributeList attribute ?" - id: LUNIT.S.Afffb - - - label: "Does the device implement the (0xFFFC) FeatureMap attribute ?" - id: LUNIT.S.Afffc - - - label: - "Does the device implement the (0xFFFD) ClusterRevision attribute ?" - id: LUNIT.S.Afffd - # # server / features # @@ -7463,27 +7147,6 @@ PICS: - label: "Does the device implement the User Label cluster as a client?" id: ULABEL.C - #ULABEL -- Global Attributes - - label: "Does the device implement the ClusterRevision(ULABEL) attribute?" - id: ULABEL.S.Afffd - - - label: "Does the device implement the FeatureMap(ULABEL) attribute?" - id: ULABEL.S.Afffc - - - label: "Does the device implement the AttributeList(ULABEL) attribute?" - id: ULABEL.S.Afffb - - - label: "Does the device implement the EventList(ULABEL) attribute?" - id: ULABEL.S.Afffa - - - label: - "Does the device implement the AcceptedCommandList(ULABEL) attribute?" - id: ULABEL.S.Afff9 - - - label: - "Does the device implement the GeneratedCommandList(ULABEL) attribute?" - id: ULABEL.S.Afff8 - # # server / attributes # @@ -7792,29 +7455,6 @@ PICS: - label: "Does the device implement the SafetyStatus attribute ?" id: WNCV.S.A001a - - label: - "Does the device implement the (0xFFF8) GeneratedCommandList attribute - ?" - id: WNCV.S.Afff8 - - - label: - "Does the device implement the (0xFFF9) AcceptedCommandList attribute - ?" - id: WNCV.S.Afff9 - - - label: "Does the device implement the (0xFFFA) EventList attribute ?" - id: WNCV.S.Afffa - - - label: "Does the device implement the (0xFFFB) AttributeList attribute ?" - id: WNCV.S.Afffb - - - label: "Does the device implement the (0xFFFC) FeatureMap attribute ?" - id: WNCV.S.Afffc - - - label: - "Does the device implement the (0xFFFD) ClusterRevision attribute ?" - id: WNCV.S.Afffd - - label: "Does the device support scene via the TargetPositionLiftPercent100ths attribute ?" @@ -9073,6 +8713,38 @@ PICS: "Does the device implement the Operational State cluster as a client?" id: OPSTATE.C + # ManuallyControlled + + - label: "Does the DUT support testing the Stopped(0x00) operational state" + id: OPSTATE.S.M.ST_STOPPED + + - label: "Does the DUT support testing the Running(0x01) operational state" + id: OPSTATE.S.M.ST_RUNNING + + - label: "Does the DUT support testing the Paused(0x02) operational state" + id: OPSTATE.S.M.ST_PAUSED + + - label: "Does the DUT support testing the Error(0x03) operational state?" + id: OPSTATE.S.M.ST_ERROR + + - label: "Does the DUT support testing the NoError(0x00) error state?" + id: OPSTATE.S.M.ERR_NO_ERROR + + - label: + "Does the DUT support testing the UnableToStartOrResume(0x01) error + state?" + id: OPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME + + - label: + "Does the DUT support testing the UnableToCompleteOperation(0x02) + error state?" + id: OPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION + + - label: + "Does the DUT support testing the CommandInvalidInState(0x03) error + state?" + id: OPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE + #Server Attributes - label: "Does the device implement the PhaseList attribute?" id: OPSTATE.S.A0000 @@ -9312,9 +8984,6 @@ PICS: the same endpoint?" id: RVCCLEANM.S.F00 - - label: "Does the device read the global attribute: EventList from the DUT" - id: RVCCLEANM.S.Afffa - # # server / attributes # @@ -9503,9 +9172,6 @@ PICS: the same endpoint?" id: RVCRUNM.S.F00 - - label: "Does the device read the global attribute: EventList from the DUT" - id: RVCRUNM.S.Afffa - #Attributes - label: "Does the device implement the SupportedModes attribute?" id: RVCRUNM.S.A0000 @@ -9577,6 +9243,82 @@ PICS: client?" id: RVCOPSTATE.C + # ManuallyControlled + + - label: "Does the DUT support testing the Stopped(0x00) operational state?" + id: RVCOPSTATE.S.M.ST_STOPPED + + - label: "Does the DUT support testing the Running(0x01) operational state?" + id: RVCOPSTATE.S.M.ST_RUNNING + + - label: "Does the DUT support testing the Paused(0x02) operational state?" + id: RVCOPSTATE.S.M.ST_PAUSED + + - label: "Does the DUT support testing the Error(0x03) operational state?" + id: RVCOPSTATE.S.M.ST_ERROR + + - label: + "Does the DUT support testing the SeekingCharger(0x40) operational + state?" + id: RVCOPSTATE.S.M.ST_SEEKING_CHARGER + + - label: + "Does the DUT support testing the Charging(0x41) operational state?" + id: RVCOPSTATE.S.M.ST_CHARGING + + - label: "Does the DUT support testing the Docked(0x42) operational state?" + id: RVCOPSTATE.S.M.ST_DOCKED + + - label: "Does the DUT support testing the NoError(0x00) error state?" + id: RVCOPSTATE.S.M.ERR_NO_ERROR + + - label: + "Does the DUT support testing the UnableToStartOrResume(0x01) error + state?" + id: RVCOPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME + + - label: + "Does the DUT support testing the UnableToCompleteOperation(0x02) + error state?" + id: RVCOPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION + + - label: + "Does the DUT support testing the CommandInvalidInState(0x03) error + state?" + id: RVCOPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE + + - label: + "Does the DUT support testing the FailedToFindChargingDock(0x40) error + state?" + id: RVCOPSTATE.S.M.ERR_FAILED_TO_FIND_CHARGING_DOCK + + - label: "Does the DUT support testing the Stuck(0x41) error state?" + id: RVCOPSTATE.S.M.ERR_STUCK + + - label: + "Does the DUT support testing the DustBinMissing(0x42) error state?" + id: RVCOPSTATE.S.M.ERR_DUST_BIN_MISSING + + - label: "Does the DUT support testing the DustBinFull(0x43) error state?" + id: RVCOPSTATE.S.M.ERR_DUST_BIN_FULL + + - label: + "Does the DUT support testing the WaterTankEmpty(0x44) error state?" + id: RVCOPSTATE.S.M.ERR_WATER_TANK_EMPTY + + - label: + "Does the DUT support testing the WaterTankMissing(0x45) error state?" + id: RVCOPSTATE.S.M.ERR_WATER_TANK_MISSING + + - label: + "Does the DUT support testing the WaterTankLidOpen(0x46) error state?" + id: RVCOPSTATE.S.M.ERR_WATER_TANK_LID_OPEN + + - label: + "Does the DUT support testing the MopCleaningPadMissing(0x47) error + state?" + id: RVCOPSTATE.S.M.ERR_MOP_CLEANING_PAD_MISSING + #Attributes - label: "Does the device implement the PhaseList attribute?" id: RVCOPSTATE.S.A0000 diff --git a/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml index 59284c86d30d55..56cae49a569db6 100644 --- a/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml @@ -143,7 +143,51 @@ tests: type: list contains: [5] - - label: "Step 5: TH reads EventList attribute from DUT" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4f: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool activatedcarbonfiltermonitoring read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0002, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0003 + - Based on feature support:- 0x0000, 0x0001 + + [1685958590.636044][11442:11444] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0072 Attribute 0x0000_FFFB DataVersion: 403478864 + [1690179748.767756][7924:7926] CHIP:TOO: AttributeList: 12 entries + [1690179748.767825][7924:7926] CHIP:TOO: [1]: 0 + [1690179748.767885][7924:7926] CHIP:TOO: [2]: 1 + [1690179748.767943][7924:7926] CHIP:TOO: [3]: 2 + [1690179748.767999][7924:7926] CHIP:TOO: [4]: 3 + [1690179748.768056][7924:7926] CHIP:TOO: [5]: 4 + [1690179748.768112][7924:7926] CHIP:TOO: [6]: 5 + [1690179748.768170][7924:7926] CHIP:TOO: [7]: 65528 + [1690179748.768227][7924:7926] CHIP:TOO: [8]: 65529 + [1690179748.768283][7924:7926] CHIP:TOO: [9]: 65530 + [1690179748.768340][7924:7926] CHIP:TOO: [10]: 65531 + [1690179748.768397][7924:7926] CHIP:TOO: [11]: 65532 + [1690179748.768454][7924:7926] CHIP:TOO: [12]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: TH reads EventList attribute from DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" @@ -152,16 +196,46 @@ tests: constraints: type: list + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool activatedcarbonfiltermonitoring read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685958846.723249][11454:11456] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0072 Attribute 0x0000_FFFA DataVersion: 403478864 + [1685958846.723431][11454:11456] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6a: Read the global attribute: AcceptedCommandList" + PICS: "!ACFREMON.S.C00.Rsp" command: "readAttribute" attribute: "AcceptedCommandList" response: + value: [] constraints: type: list - contains: [] - label: - "Step 6b: Read the optional command (ResetCondition) in + "Step 6a: Read the optional command (ResetCondition) in AcceptedCommandList" PICS: ACFREMON.S.C00.Rsp command: "readAttribute" @@ -171,10 +245,69 @@ tests: type: list contains: [0] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads from the DUT the AcceptedCommandList attribute. + 1.The list SHALL NOT contain any additional values in the standard or + scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - + 0x0000_FFFE). 2.The list MAY contain values in the Manufacturer + Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be + ignored. 3.The list SHALL NOT contain any values in the Test Vendor or + invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), + (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool activatedcarbonfiltermonitoring read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685959114.395290][11468:11470] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0072 Attribute 0x0000_FFF9 DataVersion: 403478864 + [1685959114.395414][11468:11470] CHIP:TOO: AcceptedCommandList: 0 entries + [1690183785.805331][8169:8171] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH reads from the DUT the GeneratedCommandList attribute. + 1.The list SHALL NOT contain any additional values in the standard or + scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - + 0x0000_FFFE). 2.The list MAY contain values in the Manufacturer + Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be + ignored. 3.The list SHALL NOT contain any values in the Test Vendor or + invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), + (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool activatedcarbonfiltermonitoring read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685959192.277991][11472:11474] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0072 Attribute 0x0000_FFF8 DataVersion: 403478864 + [1685959192.278115][11472:11474] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_ACL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ACL_1_1.yaml index 58cc1a6c7aea87..f0d11108473f9a 100644 --- a/src/app/tests/suites/certification/Test_TC_ACL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ACL_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads ClusterRevision attribute from DUT" - PICS: ACL.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: TH reads FeatureMap attribute from DUT" - PICS: ACL.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList attribute from DUT" - PICS: PICS_EVENT_LIST_ENABLED && ACL.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -59,7 +57,7 @@ tests: contains: [0, 2, 3, 4, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: TH reads AttributeList attribute from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && ACL.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -68,7 +66,7 @@ tests: contains: [0, 2, 3, 4, 65528, 65529, 65531, 65532, 65533] - label: "Step 4b: TH reads optional attribute (Extension) in AttributeList" - PICS: ACL.S.A0001 && ACL.S.Afffb + PICS: ACL.S.A0001 command: "readAttribute" attribute: "AttributeList" response: @@ -108,7 +106,7 @@ tests: [1676270267.634334][20397:20399] CHIP:TOO: [11]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ACL.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -117,7 +115,7 @@ tests: value: "y" - label: "Step 5a: TH reads EventList attribute from DUT" - PICS: PICS_EVENT_LIST_ENABLED && ACL.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -138,8 +136,9 @@ tests: verification: | ./chip-tool accesscontrol read event-list 1 0 - Verify " EventList attribute " consists the list of supported events, which for this cluster should containing the following elements: - all mandatory events: AccessControlEntryChanged (0), AccessControlExtensionChanged (1) on the TH(Chip-tool) Log: + Via the TH (chip-tool), verify: + -that EventList attribute contains list of supported events. + -that list has two entries as value of 0 and 1 (if SAccessControlEntryChanged and AccessControlExtensionChanged event is supported). [1676456597.556478][24006:24008] CHIP:DMG: } [1676456597.556640][24006:24008] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_FFFA DataVersion: 3448736795 @@ -150,7 +149,7 @@ tests: [1676456597.556778][24006:24008] CHIP:IN: (S) Sending msg 55400435 on secure session with LSID: 1376 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ACL.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -158,6 +157,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1. The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -184,7 +184,7 @@ tests: [1656478328.211313][2458:2463] CHIP:IN: Prepared secure message 0xffff8a2e3958 to 0x0000000000000001 (1) of type 0x10 and protocolId (0, 0) on exchange 15270i with MessageCounter:229380798. cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ACL.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -192,6 +192,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -219,7 +220,7 @@ tests: [1656478396.324967][2467:2472] CHIP:IN: Sending encrypted msg 0xffffab7ed958 with MessageCounter:243106706 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ACL.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml index 2f423f5f58a821..f4f7fb1bb43081 100644 --- a/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml @@ -74,19 +74,20 @@ tests: type: list contains: [2] - #EventList failure https://github.com/project-chip/connectedhomeip/issues/26571 - label: "Step 5: TH reads EventList attribute from DUT" verification: | ./chip-tool actions read event-list 1 1 - On TH(chip-tool), verify that DUT responds with list of supported events as 1 entry. + Via the TH (chip-tool), verify: + -that EventList attribute contains list of supported events. + -that list has 1 entry(0) for this cluster. [1676460741.103254][37023:37025] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0025 Attribute 0x0000_FFFA DataVersion: 928273128 [1676460741.103303][37023:37025] CHIP:TOO: EventList: 1 entries [1676460741.103320][37023:37025] CHIP:TOO: [1]: 0 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_AIRQUAL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_AIRQUAL_1_1.yaml index bf8419269d26a5..7f7621b75a50d6 100644 --- a/src/app/tests/suites/certification/Test_TC_AIRQUAL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_AIRQUAL_1_1.yaml @@ -93,7 +93,7 @@ tests: type: bitmap32 hasMasksSet: [0x8] - - label: "Step 4: Read the global attribute: AttributeList" + - label: "Step 4a: Read the global attribute: AttributeList" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" @@ -102,7 +102,7 @@ tests: type: list contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - - label: "Step 4: Read the global attribute: AttributeList" + - label: "Step 4a: Read the global attribute: AttributeList" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" @@ -111,7 +111,45 @@ tests: type: list contains: [0, 65528, 65529, 65531, 65532, 65533] - - label: "Step 5: TH reads EventList attribute from DUT" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4b: TH reads from the DUT the AttributeList attribute. 1.The + list SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.The list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool airquality read attribute-list 1 1 + + Verify we are getting supported attribute list sent in the above command on TH(chip-tool) log + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1685258693.808637][110898:110900] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005B Attribute 0x0000_FFFB DataVersion: 3241788930 + [1685258693.808679][110898:110900] CHIP:TOO: AttributeList: 7 entries + [1685258693.808703][110898:110900] CHIP:TOO: [1]: 0 + [1685258693.808711][110898:110900] CHIP:TOO: [2]: 65528 + [1685258693.808718][110898:110900] CHIP:TOO: [3]: 65529 + [1685258693.808725][110898:110900] CHIP:TOO: [4]: 65530 + [1685258693.808733][110898:110900] CHIP:TOO: [5]: 65531 + [1685258693.808743][110898:110900] CHIP:TOO: [6]: 65532 + [1685258693.808752][110898:110900] CHIP:TOO: [7]: 65533 + [1685258693.808831][110898:110900] CHIP:EM: <<< [E:31713i S:23166 M:213128168 (Ack:192433969)] (S) Msg TX to 1:0000000000000001 [BFD3] --- Type 0000:10 (SecureChannel:StandaloneAck) + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: TH reads EventList attribute from DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" @@ -120,7 +158,36 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool airquality read event-list 1 1 + + On TH(Chip-tool), verify the Event-list value is 0 entries + + [1685259470.356105][111277:111279] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005B Attribute 0x0000_FFFA DataVersion: 3241788930 + [1685259470.356143][111277:111279] CHIP:TOO: EventList: 0 entries + [1685259470.356213][111277:111279] CHIP:EM: <<< [E:2990i S:55081 M:20552289 (Ack:224151602)] (S) Msg TX to 1:0000000000000001 [BFD3] --- Type 0000:10 (SecureChannel:StandaloneAck) + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -128,10 +195,72 @@ tests: type: list contains: [] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads from the DUT the AcceptedCommandList attribute. + 1.The list SHALL NOT contain any additional values in the standard or + scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - + 0x0000_FFFE). 2.The list MAY contain values in the Manufacturer + Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be + ignored. 3.The list SHALL NOT contain any values in the Test Vendor or + invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), + (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool airquality read accepted-command-list 1 1 + + ON TH(Chip-tool) verify the Accepted-command-list value is 0 entries + + + [1685259569.647040][111317:111320] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005B Attribute 0x0000_FFF9 DataVersion: 3241788930 + [1685259569.647067][111317:111320] CHIP:TOO: AcceptedCommandList: 0 entries + [1685259569.647126][111317:111320] CHIP:EM: <<< [E:53927i S:47055 M:265148451 (Ack:221551330)] (S) Msg TX to 1:0000000000000001 [BFD3] --- Type 0000:10 (SecureChannel:StandaloneAck) + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH reads from the DUT the GeneratedCommandList attribute. + 1.The list SHALL NOT contain any additional values in the standard or + scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - + 0x0000_FFFE). 2.The list MAY contain values in the Manufacturer + Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be + ignored. 3.The list SHALL NOT contain any values in the Test Vendor or + invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), + (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool airquality read accepted-command-list 1 1 + + ON TH(Chip-tool) verify the Accepted-command-list value is 0 entries + + + [1685259569.647040][111317:111320] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005B Attribute 0x0000_FFF9 DataVersion: 3241788930 + [1685259569.647067][111317:111320] CHIP:TOO: AcceptedCommandList: 0 entries + [1685259569.647126][111317:111320] CHIP:EM: <<< [E:53927i S:47055 M:265148451 (Ack:221551330)] (S) Msg TX to 1:0000000000000001 [BFD3] --- Type 0000:10 (SecureChannel:StandaloneAck) + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_BIND_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BIND_1_1.yaml index c2e06f988f0ad1..d9f3ce1c885008 100644 --- a/src/app/tests/suites/certification/Test_TC_BIND_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_BIND_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: BIND.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: BIND.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && BIND.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -58,9 +56,8 @@ tests: type: list contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && BIND.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -97,7 +94,7 @@ tests: [1676272454.138354][22525:22527] CHIP:TOO: [7]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BIND.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -106,25 +103,27 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | - ./chip-tool binding read event-list 1 1 + ./chip-tool binding read event-list 1 1 Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: - [1676456961.540195][24182:24184] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001E Attribute 0x0000_FFFA DataVersion: 2461106731 [1676456961.540229][24182:24184] CHIP:TOO: EventList: 0 entries [1676456961.540302][24182:24184] CHIP:EM: <<< [E:6972i S:40230 M:131899248 (Ack:28190068)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) [1676456961.540320][24182:24184] CHIP:IN: (S) Sending msg 131899248 on secure session with LSID: 40230 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BIND.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -132,6 +131,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -150,7 +150,7 @@ tests: [1653560851.891077][3451:3456] CHIP:TOO: AcceptedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BIND.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -158,6 +158,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -176,7 +177,7 @@ tests: [1653560872.885073][3458:3463] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BIND.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml index dde6ab9bb90979..fdf891bbc0791f 100644 --- a/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml @@ -35,7 +35,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: BINFO.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -44,7 +43,6 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: BINFO.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -53,7 +51,7 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -82,7 +80,7 @@ tests: ] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -104,7 +102,6 @@ tests: 19, 65528, 65529, - 65531, 65532, 65533, @@ -113,7 +110,7 @@ tests: - label: "Step 4b: TH reads optional attribute(ManufacturingDate) in attributeList" - PICS: BINFO.S.A000b && BINFO.S.Afffb + PICS: BINFO.S.A000b command: "readAttribute" attribute: "AttributeList" response: @@ -122,7 +119,7 @@ tests: contains: [11] - label: "Step 4c: TH reads optional attribute(PartNumber) in attributeList" - PICS: BINFO.S.A000c && BINFO.S.Afffb + PICS: BINFO.S.A000c command: "readAttribute" attribute: "AttributeList" response: @@ -131,7 +128,7 @@ tests: contains: [12] - label: "Step 4d: TH reads optional attribute(ProductURL) in attributeList" - PICS: BINFO.S.A000d && BINFO.S.Afffb + PICS: BINFO.S.A000d command: "readAttribute" attribute: "AttributeList" response: @@ -141,7 +138,7 @@ tests: - label: "Step 4e: TH reads optional attribute(ProductLabel) in attributeList" - PICS: BINFO.S.A000e && BINFO.S.Afffb + PICS: BINFO.S.A000e command: "readAttribute" attribute: "AttributeList" response: @@ -151,7 +148,7 @@ tests: - label: "Step 4f: TH reads optional attribute(SerialNumber) in attributeList" - PICS: BINFO.S.A000f && BINFO.S.Afffb + PICS: BINFO.S.A000f command: "readAttribute" attribute: "AttributeList" response: @@ -162,7 +159,7 @@ tests: - label: "Step 4g: TH reads optional attribute(LocalConfigDisabled) in attributeList" - PICS: BINFO.S.A0010 && BINFO.S.Afffb + PICS: BINFO.S.A0010 command: "readAttribute" attribute: "AttributeList" response: @@ -171,7 +168,7 @@ tests: contains: [16] - label: "Step 4h: TH reads optional attribute(Reachable) in attributeList" - PICS: BINFO.S.A0011 && BINFO.S.Afffb + PICS: BINFO.S.A0011 command: "readAttribute" attribute: "AttributeList" response: @@ -180,7 +177,7 @@ tests: contains: [17] - label: "Step 4i: TH reads optional attribute(UniqueID) in attributeList" - PICS: BINFO.S.A0012 && BINFO.S.Afffb + PICS: BINFO.S.A0012 command: "readAttribute" attribute: "AttributeList" response: @@ -236,7 +233,7 @@ tests: [1676283398.910435][6374:6376] CHIP:TOO: [26]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BINFO.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -246,8 +243,8 @@ tests: - label: "Step 5a: TH1 reads EventList from DUT" PICS: - "PICS_EVENT_LIST_ENABLED && BINFO.S.Afffa && !BINFO.S.E00 && - !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 " + " !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 && + PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "EventList" response: @@ -256,7 +253,7 @@ tests: type: list - label: "Step 5b: Read BINFO.S.E00(StartUp) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BINFO.S.E00 && BINFO.S.Afffa + PICS: BINFO.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -265,7 +262,7 @@ tests: contains: [0] - label: "Step 5c: Read BINFO.S.E01(ShutDown) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BINFO.S.E01 && BINFO.S.Afffa + PICS: BINFO.S.E01 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -274,7 +271,7 @@ tests: contains: [1] - label: "Step 5d: Read BINFO.S.E02(Leave) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BINFO.S.E02 && BINFO.S.Afffa + PICS: BINFO.S.E02 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -283,7 +280,7 @@ tests: contains: [2] - label: "Step 5e: Read (ReachableChanged) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BINFO.S.A0011 && BINFO.S.Afffa + PICS: BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -305,7 +302,6 @@ tests: ./chip-tool basicinformation read event-list 1 Verify "EventList " consists the list of supported events (0, 1, 2)on the TH(Chip-tool) Log: - [1676291718.628403][27706:27708] CHIP:DMG: } [1676291718.628931][27706:27708] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0028 Attribute 0x0000_FFFA DataVersion: 1838069172 [1676291718.628983][27706:27708] CHIP:TOO: EventList: 3 entries @@ -314,7 +310,7 @@ tests: [1676291718.629026][27706:27708] CHIP:TOO: [3]: 2 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BINFO.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -322,6 +318,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -340,7 +337,7 @@ tests: [1651214820.355673][2695:2700] CHIP:TOO: AcceptedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BINFO.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -348,6 +345,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -366,7 +364,7 @@ tests: [1651214861.208682][2702:2707] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && BINFO.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml index 3cb68be05967b2..eef7cf54c85715 100644 --- a/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml @@ -82,7 +82,7 @@ tests: type: list - label: "Step 7: Read the global attribute: EventList" - PICS: PICS_EVENT_LIST_ENABLED && BOOL.S.E00 + PICS: BOOL.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -91,7 +91,7 @@ tests: type: list - label: "Step 7: Read the global attribute: EventList" - PICS: "PICS_EVENT_LIST_ENABLED && !BOOL.S.E00 " + PICS: " !BOOL.S.E00 && PICS_EVENT_LIST_ENABLED " command: "readAttribute" attribute: "EventList" response: diff --git a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml index 563fd45a06511e..63e238f760b461 100644 --- a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml @@ -64,6 +64,16 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList from DUT" + PICS: PICS_EVENT_LIST_ENABLED + command: "readAttribute" + attribute: "AttributeList" + response: + constraints: + type: list + contains: [17, 65528, 65529, 65530, 65531, 65532, 65533] + + - label: "Step 4a: TH reads AttributeList from DUT" + PICS: " !PICS_EVENT_LIST_ENABLED " command: "readAttribute" attribute: "AttributeList" response: @@ -210,8 +220,47 @@ tests: type: list contains: [18] + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4p: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool bridgeddevicebasicinformation read attribute-list 1 3 + + Via the TH (chip-tool), verify: + - that AttributeList attribute contains list of supported attributes. + -that the list has mandatory attribute(Reachable attribute), optional attributes and Global attributes. + + [1676277997.061046][3751:3753] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFFB DataVersion: 1860081282 + [1676277997.061134][3751:3753] CHIP:TOO: AttributeList: 8 entries + [1676277997.061192][3751:3753] CHIP:TOO: [1]: 5 + [1676277997.061220][3751:3753] CHIP:TOO: [2]: 17 + [1676277997.061245][3751:3753] CHIP:TOO: [3]: 65528 + [1676277997.061274][3751:3753] CHIP:TOO: [4]: 65529 + [1676277997.061306][3751:3753] CHIP:TOO: [5]: 65530 + [1676277997.061337][3751:3753] CHIP:TOO: [6]: 65531 + [1676277997.061367][3751:3753] CHIP:TOO: [7]: 65532 + [1676277997.061399][3751:3753] CHIP:TOO: [8]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 5a: TH reads optional event(StartUp) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BRBINFO.S.E00 + PICS: BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -220,7 +269,7 @@ tests: contains: [0] - label: "Step 5b: TH reads optional attribute(ShutDown) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BRBINFO.S.E01 + PICS: BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -229,7 +278,7 @@ tests: contains: [1] - label: "Step 5c: TH reads optional attribute(Leave) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && BRBINFO.S.E02 + PICS: BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -237,21 +286,29 @@ tests: type: list contains: [2] - #EventList failure Mandatory event ReachableChanged(0x3) not in list - label: - "Step 5d: Read EventList attribute from the DUT and Verify that the - DUT response provides a list of supported events." + "Step 5d: TH reads EventList attribute from DUT. 1.The list SHALL NOT + contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the + Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool bridgeddevicebasicinformation read event-list 1 3 - On TH(chip-tool), Verify that DUT response contains list of supported events, for this cluster the list is empty(0 enties) + Via the TH (chip-tool), verify: + -that EventList attribute contains list of supported events. + -that list has empty (0 entries) for this cluster. 1676439985.362352][22002:22004] CHIP:DMG: } [1676439985.362396][22002:22004] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFFA DataVersion: 266846256 [1676439985.362407][22002:22004] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -259,7 +316,7 @@ tests: - name: "expectedValue" value: "y" - - label: "Step 6: TH1 reads AcceptedCommandList from DUT" + - label: "Step 6a: TH1 reads AcceptedCommandList from DUT" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -267,10 +324,67 @@ tests: constraints: type: list - - label: "Step 7: TH1 reads GeneratedCommandList from DUT" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool bridgeddevicebasicinformation read accepted-command-list 1 3 + + Via the TH (chip-tool), verify: + -that AcceptedCommandList attribute contains list of supported commands. + -that list has empty (0 entries) for this cluster. + + [1657696300.165081][15447:15452] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFF9 DataVersion: 2577979325 + [1657696300.165174][15447:15452] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: TH1 reads GeneratedCommandList from DUT" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY + contain values in the Manufacturer Extensible Identifier (MEI) range: + (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT + contain any values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool bridgeddevicebasicinformation read generated-command-list 1 3 + + Via the TH (chip-tool), verify: + -that GeneratedCommandList attribute contains list of supported commands. + -that list has empty (0 entries) for this cluster. + + [1657696328.889936][15454:15459] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFF8 DataVersion: 2577979325 + [1657696328.890017][15454:15459] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_CC_6_5.yaml b/src/app/tests/suites/certification/Test_TC_CC_6_5.yaml old mode 100644 new mode 100755 index 888e99827c5922..3bab44386e2181 --- a/src/app/tests/suites/certification/Test_TC_CC_6_5.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_6_5.yaml @@ -91,8 +91,8 @@ tests: maxValue: 65279 - label: - "TH writes to StartUpColorTemperatureMireds attribute with value - StartUpColorTemperatureMireds" + "Step 2a: TH writes to StartUpColorTemperatureMireds attribute with + value StartUpColorTemperatureMireds" verification: | ./chip-tool colorcontrol write start-up-color-temperature-mireds 32639 1 1 @@ -133,7 +133,7 @@ tests: value: "y" - label: - "Step 2a: TH reads StartUpColorTemperatureMireds attribute from DUT" + "Step 2b: TH reads StartUpColorTemperatureMireds attribute from DUT" PICS: CC.S.A4010 && CC.S.F04 command: "readAttribute" attribute: "StartUpColorTemperatureMireds" diff --git a/src/app/tests/suites/certification/Test_TC_CDOCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_CDOCONC_1_1.yaml index 097b390ed16acc..4f020eaecd679e 100644 --- a/src/app/tests/suites/certification/Test_TC_CDOCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_CDOCONC_1_1.yaml @@ -185,18 +185,18 @@ tests: hasMasksClear: [0x20, 0x1] - label: "Step 4a: Read the global attribute: AttributeList" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" - PICS: PICS_EVENT_LIST_ENABLED response: constraints: type: list contains: [9, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" + PICS: " !PICS_EVENT_LIST_ENABLED " command: "readAttribute" attribute: "AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED" response: constraints: type: list @@ -313,16 +313,92 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbondioxideconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009,0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000,0x0001.0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x000a + + [1685960397.210408][11541:11543] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040D Attribute 0x0000_FFFB DataVersion: 832916414 + [1685960397.210558][11541:11543] CHIP:TOO: AttributeList: 17 entries + [1685960397.210606][11541:11543] CHIP:TOO: [1]: 0 + [1685960397.210646][11541:11543] CHIP:TOO: [2]: 1 + [1685960397.210684][11541:11543] CHIP:TOO: [3]: 2 + [1685960397.210721][11541:11543] CHIP:TOO: [4]: 3 + [1685960397.210760][11541:11543] CHIP:TOO: [5]: 4 + [1685960397.210797][11541:11543] CHIP:TOO: [6]: 5 + [1685960397.210835][11541:11543] CHIP:TOO: [7]: 6 + [1685960397.210872][11541:11543] CHIP:TOO: [8]: 7 + [1685960397.210909][11541:11543] CHIP:TOO: [9]: 8 + [1685960397.210948][11541:11543] CHIP:TOO: [10]: 9 + [1685960397.210986][11541:11543] CHIP:TOO: [11]: 10 + [1685960397.211025][11541:11543] CHIP:TOO: [12]: 65528 + [1685960397.211064][11541:11543] CHIP:TOO: [13]: 65529 + [1685960397.211102][11541:11543] CHIP:TOO: [14]: 65530 + [1685960397.211141][11541:11543] CHIP:TOO: [15]: 65531 + [1685960397.211179][11541:11543] CHIP:TOO: [16]: 65532 + [1685960397.211217][11541:11543] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" - PICS: PICS_EVENT_LIST_ENABLED response: value: [] constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT + contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the + Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbondioxideconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960313.959334][11536:11538] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040D Attribute 0x0000_FFFA DataVersion: 832916414 + [1685960313.959445][11536:11538] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,64 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbondioxideconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that theAcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960703.799496][11550:11552] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040D Attribute 0x0000_FFF9 DataVersion: 832916414 + [1685960703.799652][11550:11552] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbondioxideconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that theGeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960779.325075][11556:11558] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040D Attribute 0x0000_FFF8 DataVersion: 832916414 + [1685960779.325258][11556:11558] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_CMOCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_CMOCONC_1_1.yaml index 3c80b3bbe7fccf..c01ac0d8fb20fc 100644 --- a/src/app/tests/suites/certification/Test_TC_CMOCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_CMOCONC_1_1.yaml @@ -194,9 +194,9 @@ tests: contains: [9, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED" response: constraints: type: list @@ -313,16 +313,93 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbonmonoxideconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that theAttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1685965930.706971][11849:11851] CHIP:TOO: AttributeList: 17 entries + [1685965930.707011][11849:11851] CHIP:TOO: [1]: 0 + [1685965930.707045][11849:11851] CHIP:TOO: [2]: 1 + [1685965930.707076][11849:11851] CHIP:TOO: [3]: 2 + [1685965930.707107][11849:11851] CHIP:TOO: [4]: 3 + [1685965930.707138][11849:11851] CHIP:TOO: [5]: 4 + [1685965930.707169][11849:11851] CHIP:TOO: [6]: 5 + [1685965930.707200][11849:11851] CHIP:TOO: [7]: 6 + [1685965930.707231][11849:11851] CHIP:TOO: [8]: 7 + [1685965930.707262][11849:11851] CHIP:TOO: [9]: 8 + [1685965930.707293][11849:11851] CHIP:TOO: [10]: 9 + [1685965930.707324][11849:11851] CHIP:TOO: [11]: 10 + [1685965930.707356][11849:11851] CHIP:TOO: [12]: 65528 + [1685965930.707387][11849:11851] CHIP:TOO: [13]: 65529 + [1685965930.707418][11849:11851] CHIP:TOO: [14]: 65530 + [1685965930.707449][11849:11851] CHIP:TOO: [15]: 65531 + [1685965930.707480][11849:11851] CHIP:TOO: [16]: 65532 + [1685965930.707511][11849:11851] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" - PICS: PICS_EVENT_LIST_ENABLED response: value: [] constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbonmonoxideconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that theEventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040C Attribute 0x0000_FFFA DataVersion: 2062554595 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +407,63 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbonmonoxideconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that theAcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040C Attribute 0x0000_FFF9 DataVersion: 2062554595 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY + contain values in the Manufacturer Extensible Identifier (MEI) range: + (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT + contain any values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool carbonmonoxideconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that theGeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_040C Attribute 0x0000_FFF8 DataVersion: 2062554595 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml index 390d9f6f159064..76f25e442c61b4 100644 --- a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml @@ -34,7 +34,6 @@ tests: value: nodeId - label: "Step 2: Read the global attribute: ClusterRevision" - PICS: CNET.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -43,7 +42,7 @@ tests: type: int16u - label: "Step 3a: Read the global attribute: FeatureMap" - PICS: " !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 && CNET.S.Afffc" + PICS: " !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 " command: "readAttribute" attribute: "FeatureMap" response: @@ -51,7 +50,7 @@ tests: - label: "Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set" - PICS: CNET.S.F00 && CNET.S.Afffc + PICS: CNET.S.F00 command: "readAttribute" attribute: "FeatureMap" response: @@ -59,7 +58,7 @@ tests: - label: "Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set" - PICS: CNET.S.F01 && CNET.S.Afffc + PICS: CNET.S.F01 command: "readAttribute" attribute: "FeatureMap" response: @@ -67,14 +66,14 @@ tests: - label: "Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set" - PICS: CNET.S.F02 && CNET.S.Afffc + PICS: CNET.S.F02 command: "readAttribute" attribute: "FeatureMap" response: value: 4 - label: "Step 4a: Read the global attribute: AttributeList" - PICS: PICS_EVENT_LIST_ENABLED && CNET.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -83,7 +82,7 @@ tests: contains: [65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED && CNET.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -94,7 +93,7 @@ tests: - label: "Step 4b: Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true" - PICS: CNET.S.F00 || CNET.S.F01 || CNET.S.F02 && CNET.S.Afffb + PICS: CNET.S.F00 || CNET.S.F01 || CNET.S.F02 command: "readAttribute" attribute: "AttributeList" response: @@ -105,7 +104,7 @@ tests: - label: "Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList" - PICS: CNET.S.A0002 && CNET.S.Afffb + PICS: CNET.S.A0002 command: "readAttribute" attribute: "AttributeList" response: @@ -116,7 +115,7 @@ tests: - label: "Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList" - PICS: CNET.S.A0003 && CNET.S.Afffb + PICS: CNET.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -204,7 +203,7 @@ tests: [1660316011.017068][3112:3117] CHIP:EM: Sending Standalone Ack for MessageCounter:239150268 on exchange 45209i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && CNET.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -213,19 +212,24 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | Onnetwork - ./chip-tool networkcommissioning read event-list 1 0 - On TH(chip-tool) , Verify that DUT response provides a list of supported events. For this cluster the list is empty with 0 entries + Via the TH (chip-tool), verify: + -that EventList attribute contains list of supported events. + -that list has empty (0 entries) for this cluster. + [1677044346.136984][29792:29794] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFA DataVersion: 2890326041 [1677044346.137022][29792:29794] CHIP:TOO: EventList: 0 entries [1677044346.137100][29792:29794] CHIP:EM: <<< [E:3325i S:48426 M:159215324 (Ack:164155971)] (S) Msg TX to 1:0000000000000001 [682F] --- Type 0000:10 (SecureChannel:StandaloneAck) @@ -233,7 +237,7 @@ tests: [1677044346.137158][29792:29794] CHIP:EM: Flushed pending ack for MessageCounter:164155971 on exchange 3325i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && CNET.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -244,7 +248,7 @@ tests: - label: "Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)" - PICS: ( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff9 + PICS: ( CNET.S.F00 || CNET.S.F01 ) command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -255,7 +259,7 @@ tests: - label: "Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)" - PICS: CNET.S.F00 && CNET.S.Afff9 + PICS: CNET.S.F00 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -266,7 +270,7 @@ tests: - label: "Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true)" - PICS: CNET.S.F01 && CNET.S.Afff9 + PICS: CNET.S.F01 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -277,12 +281,13 @@ tests: - label: "Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true)" - PICS: CNET.S.F02 && CNET.S.Afff9 + PICS: CNET.S.F02 command: "readAttribute" attribute: "AcceptedCommandList" response: value: [] + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6e: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -332,7 +337,7 @@ tests: [1660316038.564991][3121:3126] CHIP:EM: Sending Standalone Ack for MessageCounter:232731891 on exchange 30329i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && CNET.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -343,7 +348,7 @@ tests: - label: "Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)" - PICS: ( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff8 + PICS: ( CNET.S.F00 || CNET.S.F01 ) command: "readAttribute" attribute: "GeneratedCommandList" response: @@ -354,12 +359,13 @@ tests: - label: "Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true)" - PICS: CNET.S.F02 && CNET.S.Afff8 + PICS: CNET.S.F02 command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7c: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -408,7 +414,7 @@ tests: [1650370342.693995][7450:7455] CHIP:EM: Sending Standalone Ack for MessageCounter:2345375 on exchange 2514 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && CNET.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_DA_1_8.yaml b/src/app/tests/suites/certification/Test_TC_DA_1_8.yaml new file mode 100644 index 00000000000000..72263840727302 --- /dev/null +++ b/src/app/tests/suites/certification/Test_TC_DA_1_8.yaml @@ -0,0 +1,379 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default + +name: + 29.1.8. [TC-DA-1.8] Device Attestation Request Validation-Success Scenario + [DUT-Commissioner] + +config: + nodeId: 0x12344321 + cluster: "Basic Information" + endpoint: 0 + +tests: + - label: "Precondition/Test case description" + verification: | + (for all steps, PIs use equivalent command on their respective platform) + set the $CHIP_ROOT environment variable to the location of the connectedhomeip directory (cd to the connectedhomeip directory, use command `export CHIP_ROOT=$(pwd -P)` + For each scenario outlined in the sheet TC-DA-1.8 test cases, perform the following actions + - Start the TH using the required certificate set and PID. For chip-all-clusters-app, use the command given in the chip-all-clusters app command column + - Have the DUT commission the TH. Verify that the DUT indicates that the device is not genuine, or otherwise indicates a failure of device attestation, within its error handling APIs or user interface. + - factory reset the TH + disabled: true + + - label: + "Step 1a: For each of the following test cases, start the TH using the + appropriate certificate set, commission the TH using the DUT, then + factory reset the TH:" + verification: | + Perform the following actions (PIs use equivalent command on their respective platform) + - Start the TH using the required certificate set and PID. For chip-all-clusters-app, use the command given in the chip-all-clusters app command column + - Have the DUT commission the TH. Verify that the TH is successfully commissioned for each test case + - factory reset the TH + command when using chip-all-clusters-app: sudo rm -rf /tmp/chip_* + disabled: true + + - label: + "Step 1b: CD Test Vector: The product_id_array field has one PID value + which matches the PID value in DAC." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1c: PAI Test Vector: Fallback VID and PID encoding example from + spec: valid example showing that order or separators are not + considered at all for the overall validity of the embedded fields" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1d: PAI Test Vector: Fallback VID and PID encoding example: + valid but less human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1e: CD Test Vector: The authorized_paa_list contains two PAAs + one of which is valid PAA authorized to sign the PAI." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1f: DAC Test Vector: Valid certificate public key curve + prime256v1" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1g: PAI Test Vector: Valid certificate public key curve + prime256v1" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1h: PAI Test Vector: Certificate includes optional Authority + Information Access extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1i: PAI Test Vector: Certificate includes optional Subject + Alternative Name extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1j: DAC Test Vector: Certificate includes optional Extended Key + Usage extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1k: CD Test Vector: The product_id_array field has 100 PID + values one of which matches the PID value in DAC." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1l: PAI Test Vector: Fallback VID and PID encoding example from + spec: valid but less readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1m: DAC Test Vector: Fallback VID and PID encoding example: + valid but less human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1n: DAC Test Vector: Mix of Fallback and Matter OID encoding for + VID and PID: valid Matter OIDs are used and wrong values in the + common-name are ignored" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1o: CD Test Vector: The dac_origin_vendor_id and + dac_origin_product_id fields are not present." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1p: PAI Test Vector: Certificate Key Usage extension + diginalSignature field is wrong (not present for DAC and present for + PAI which is OK as optional)" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1q: PAI Test Vector: Valid certificate signature algorithm + ECDSA_WITH_SHA256" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1r: DAC Test Vector: Valid certificate signature algorithm + ECDSA_WITH_SHA256" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1s: DAC Test Vector: Fallback VID and PID encoding example from + spec: valid example showing that order or separators are not + considered at all for the overall validity of the embedded fields" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: "Step 1t: CD Test Vector: Valid CMS version set to v3." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1u: PAI Test Vector: Fallback VID and PID encoding example from + spec: valid and recommended since easily human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1v: CD Test Vector: The subjectKeyIdentifier contains SKID of a + well-known Zigbee Alliance certificate." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1w: PAI Test Vector: Certificate Basic Constraint extension + PathLen field set to 0" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1x: DAC Test Vector: Certificate includes optional Authority + Information Access extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1y: PAI Test Vector: Fallback VID and PID encoding example from + spec: invalid since substring following Mpid: is not exactly 4 + uppercase hexadecimal digits" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1z: DAC Test Vector: Fallback VID and PID encoding example from + spec: valid but less readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a1: PAI Test Vector: Certificate includes optional Extended Key + Usage extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a2: PAI Test Vector: Fallback VID and PID encoding example from + spec: valid and recommended since easily human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a3: CD Test Vector: The product_id_array field has 10 PID + values one of which matches the PID value in DAC." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: "Step 1a4: CD Test Vector: Valid CMS digest algorithm SHA256." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: "Step 1a5: CD Test Vector: Valid format_version field set to 1." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a6: PAI Test Vector: Fallback VID and PID encoding example from + spec: valid but highly discouraged since embedding of substrings + within other substrings may be confusing to human readers" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a7: CD Test Vector: The version_number field matches the VID + and PID used in a DeviceSoftwareVersionModel entry in the DCL matching + the certification record associated with the product presenting this + CD." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: "Step 1a8: CD Test Vector: Valid CMS eContentType pkcs7-data." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a9: CD Test Vector: The optional authorized_paa_list field is + not present." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a10: CD Test Vector: The authorized_paa_list contains one valid + PAA which is authorized to sign the PAI." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a11: DAC Test Vector: Certificate includes optional Subject + Alternative Name extension" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a12: CD Test Vector: The authorized_paa_list contains ten PAAs + one of which is valid PAA authorized to sign the PAI." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a13: CD Test Vector: The dac_origin_vendor_id and + dac_origin_product_id fields present and contain the VID and PID + values that match the VID and PID found in the DAC Subject DN." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a14: PAI Test Vector: Valid certificate version field set to + v3(2)" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a15: PAI Test Vector: Fallback VID and PID encoding example + from spec: invalid since substring following Mpid: is not exactly 4 + uppercase hexadecimal digits" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a16: CD Test Vector: Origin VID/PID different than VID/PID + (correct use of origin)" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a17: DAC Test Vector: Valid certificate version field set to + v3(2)" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a18: DAC Test Vector: Fallback VID and PID encoding example + from spec: valid and recommended since easily human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a19: PAI Test Vector: Mix of Fallback and Matter OID encoding + for VID and PID: valid Matter OIDs are used and wrong values in the + common-name are ignored" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a20: DAC Test Vector: Fallback VID and PID encoding example + from spec: valid but highly discouraged since embedding of substrings + within other substrings may be confusing to human readers" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a21: CD Test Vector: Valid CMS signature algorithm + ECDSA_WITH_SHA256." + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true + + - label: + "Step 1a22: DAC Test Vector: Fallback VID and PID encoding example + from spec: valid and recommended since easily human-readable" + verification: | + Verify that the TH is successfully commissioned for each test case + disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_DESC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DESC_1_1.yaml index 2e469df84d7d10..59afd050075034 100644 --- a/src/app/tests/suites/certification/Test_TC_DESC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DESC_1_1.yaml @@ -32,13 +32,25 @@ tests: - name: "nodeId" value: nodeId + #Issue: https://github.com/project-chip/connectedhomeip/issues/26599 - label: "Step 2: Read the global attribute: ClusterRevision" - command: "readAttribute" - attribute: "ClusterRevision" - response: - value: 1 - constraints: - type: int16u + verification: | + ./chip-tool descriptor read cluster-revision 1 0 + + Verify "ClusterRevision" value is of unit16 and reflects the highest revision number, in RPI the value of ClusterRevision is 2 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1649425080.347625][3458:3463] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_FFFD DataVersion: 3183189461 + [1649425080.347719][3458:3463] CHIP:TOO: ClusterRevision: 1 + [1649425080.347822][3458:3463] CHIP:EM: Sending Standalone Ack for MessageCounter:1458141 on exchange 62716i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" - label: "Step 3: Read the global attribute: FeatureMap" command: "readAttribute" @@ -57,7 +69,6 @@ tests: type: list contains: [0, 1, 2, 3, 65528, 65529, 65530, 65531, 65532, 65533] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: Read the global attribute: AttributeList" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" @@ -107,13 +118,16 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool descriptor read event-list 1 0 @@ -123,7 +137,7 @@ tests: [1676366852.531334][9747:9749] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -131,6 +145,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -158,6 +173,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) diff --git a/src/app/tests/suites/certification/Test_TC_DGETH_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGETH_1_1.yaml index ace91845fac089..9506cc4abf3c31 100644 --- a/src/app/tests/suites/certification/Test_TC_DGETH_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGETH_1_1.yaml @@ -33,7 +33,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: DGETH.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -42,7 +41,7 @@ tests: type: int16u - label: "Step 3a: TH reads the FeatureMap from DUT" - PICS: " !DGETH.S.F00 && !DGETH.S.F01 && DGETH.S.Afffc" + PICS: " !DGETH.S.F00 && !DGETH.S.F01" command: "readAttribute" attribute: "FeatureMap" response: @@ -52,7 +51,7 @@ tests: - label: "Step 3b: Given DGETH.S.F00 ensure featuremap has the correct bit set" - PICS: DGETH.S.F00 && DGETH.S.Afffc + PICS: DGETH.S.F00 command: "readAttribute" attribute: "FeatureMap" response: @@ -62,7 +61,7 @@ tests: - label: "Step 3c: Given DGETH.S.F01 ensure featuremap has the correct bit set" - PICS: DGETH.S.F01 && DGETH.S.Afffc + PICS: DGETH.S.F01 command: "readAttribute" attribute: "FeatureMap" response: @@ -71,7 +70,7 @@ tests: hasMasksSet: [0x2] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -80,7 +79,7 @@ tests: contains: [65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -89,7 +88,7 @@ tests: contains: [65528, 65529, 65531, 65532, 65533] - label: "Step 4b: TH reads optional attribute(PHYRate) in AttributeList" - PICS: DGETH.S.A0000 && DGETH.S.Afffb + PICS: DGETH.S.A0000 command: "readAttribute" attribute: "AttributeList" response: @@ -98,7 +97,7 @@ tests: contains: [0] - label: "Step 4c: TH reads optional attribute(FullDuplex) in AttributeList" - PICS: DGETH.S.A0001 && DGETH.S.Afffb + PICS: DGETH.S.A0001 command: "readAttribute" attribute: "AttributeList" response: @@ -109,7 +108,7 @@ tests: - label: "Step 4d: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F00(PKTCNT)) in AttributeList" - PICS: DGETH.S.A0002 && DGETH.S.Afffb + PICS: DGETH.S.A0002 command: "readAttribute" attribute: "AttributeList" response: @@ -120,7 +119,7 @@ tests: - label: "Step 4e: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F00(PKTCNT)) in AttributeList" - PICS: DGETH.S.A0003 && DGETH.S.Afffb + PICS: DGETH.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -131,7 +130,7 @@ tests: - label: "Step 4f: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList" - PICS: DGETH.S.A0004 && DGETH.S.Afffb + PICS: DGETH.S.A0004 command: "readAttribute" attribute: "AttributeList" response: @@ -142,7 +141,7 @@ tests: - label: "Step 4g: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList" - PICS: DGETH.S.A0005 && DGETH.S.Afffb + PICS: DGETH.S.A0005 command: "readAttribute" attribute: "AttributeList" response: @@ -153,7 +152,7 @@ tests: - label: "Step 4h: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList" - PICS: DGETH.S.A0006 && DGETH.S.Afffb + PICS: DGETH.S.A0006 command: "readAttribute" attribute: "AttributeList" response: @@ -163,7 +162,7 @@ tests: - label: "Step 4i: TH reads optional attribute(CarrierDetect) in AttributeList" - PICS: DGETH.S.A0007 && DGETH.S.Afffb + PICS: DGETH.S.A0007 command: "readAttribute" attribute: "AttributeList" response: @@ -173,7 +172,7 @@ tests: - label: "Step 4j: TH reads optional attribute(TimeSinceReset) in AttributeList" - PICS: DGETH.S.A0008 && DGETH.S.Afffb + PICS: DGETH.S.A0008 command: "readAttribute" attribute: "AttributeList" response: @@ -217,7 +216,7 @@ tests: [1676280358.144778][4074:4076] CHIP:TOO: [15]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGETH.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -226,17 +225,20 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool ethernetnetworkdiagnostics read event-list 1 0 - Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: + Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: [1676459303.132712][25176:25178] CHIP:DMG: } [1676459303.132751][25176:25178] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0037 Attribute 0x0000_FFFA DataVersion: 2330608789 [1676459303.132772][25176:25178] CHIP:TOO: EventList: 0 entries @@ -245,7 +247,7 @@ tests: [1676459303.132809][25176:25178] CHIP:EM: Flushed pending ack for MessageCounter:11574043 on exchange 41866i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGETH.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -254,7 +256,7 @@ tests: value: "y" - label: "Step 6a: TH reads AcceptedCommandList from DUT" - PICS: ( DGETH.S.F00 || DGETH.S.F01 ) && DGETH.S.Afff9 + PICS: ( DGETH.S.F00 || DGETH.S.F01 ) command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -263,7 +265,7 @@ tests: contains: [0] - label: "Step 6b: TH reads AcceptedCommandList from DUT" - PICS: DGETH.S.Afff9 && !DGETH.S.F00 && !DGETH.S.F01 + PICS: " !DGETH.S.F00 && !DGETH.S.F01 " command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -271,6 +273,7 @@ tests: constraints: type: list + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -291,7 +294,7 @@ tests: [1651786971.201347][240944:240949] CHIP:TOO: [1]: 0 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGETH.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -299,6 +302,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -317,7 +321,7 @@ tests: [1651787190.403729][240971:240976] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGETH.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml index 32e077de34c9d9..ab8b23246903d0 100644 --- a/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml @@ -33,7 +33,6 @@ tests: value: nodeId - label: "Step 2: Read the global attribute: ClusterRevision" - PICS: DGGEN.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -42,7 +41,6 @@ tests: type: int16u - label: "Step 3: Read the global attribute: FeatureMap" - PICS: DGGEN.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -51,7 +49,7 @@ tests: type: bitmap32 - label: "Step 4a: Read the global attribute: AttributeList" - PICS: PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -60,7 +58,7 @@ tests: contains: [0, 1, 8, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -69,7 +67,7 @@ tests: contains: [0, 1, 8, 65528, 65529, 65531, 65532, 65533] - label: "Step 4b: Read optional attribute(UpTime) in AttributeList" - PICS: DGGEN.S.A0002 && DGGEN.S.Afffb + PICS: DGGEN.S.A0002 command: "readAttribute" attribute: "AttributeList" response: @@ -80,7 +78,7 @@ tests: - label: "Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList" - PICS: DGGEN.S.A0003 && DGGEN.S.Afffb + PICS: DGGEN.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -89,7 +87,7 @@ tests: contains: [3] - label: "Step 4d: Read optional attribute(BootReason) in AttributeList" - PICS: DGGEN.S.A0004 && DGGEN.S.Afffb + PICS: DGGEN.S.A0004 command: "readAttribute" attribute: "AttributeList" response: @@ -100,7 +98,7 @@ tests: - label: "Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList" - PICS: DGGEN.S.A0005 && DGGEN.S.Afffb + PICS: DGGEN.S.A0005 command: "readAttribute" attribute: "AttributeList" response: @@ -110,7 +108,7 @@ tests: - label: "Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList" - PICS: DGGEN.S.A0006 && DGGEN.S.Afffb + PICS: DGGEN.S.A0006 command: "readAttribute" attribute: "AttributeList" response: @@ -121,7 +119,7 @@ tests: - label: "Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList" - PICS: DGGEN.S.A0007 && DGGEN.S.Afffb + PICS: DGGEN.S.A0007 command: "readAttribute" attribute: "AttributeList" response: @@ -165,7 +163,7 @@ tests: [1676280601.206035][4157:4159] CHIP:EM: <<< [E:45912i M:24926720 (Ack:175157605)] (S) Msg TX to 1:00000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGGEN.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -174,7 +172,7 @@ tests: value: "y" - label: "Step 5a: Read the global attribute: EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -183,7 +181,7 @@ tests: contains: [3] - label: "Step 5b: Read optional event(HardwareFaultChange) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E00 + PICS: DGGEN.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -192,7 +190,7 @@ tests: contains: [0] - label: "Step 5c: Read optional event(RadioFaultChange) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E01 + PICS: DGGEN.S.E01 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -201,7 +199,7 @@ tests: contains: [1] - label: "Step 5d: Read optional event(NetworkFaultChange) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E02 + PICS: DGGEN.S.E02 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -210,17 +208,19 @@ tests: contains: [2] - label: - "Step 5e: TH reads EventList attribute from DUT. 1.The list MAY - contain values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5e: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool generaldiagnostics read event-list 1 0 - [1676459408.977604][25255:25257] CHIP:DMG: } [1676459408.977730][25255:25257] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0033 Attribute 0x0000_FFFA DataVersion: 4000280266 [1676459408.977747][25255:25257] CHIP:TOO: EventList: 4 entries @@ -232,7 +232,7 @@ tests: [1676459408.977795][25255:25257] CHIP:IN: (S) Sending msg 239009454 on secure session with LSID: 56131 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGGEN.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -241,7 +241,6 @@ tests: value: "y" - label: "Step 6a: Read the global attribute: AcceptedCommandList" - PICS: DGGEN.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -249,6 +248,7 @@ tests: type: list contains: [0] + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -270,7 +270,7 @@ tests: [1654681912.443085][32901:32906] CHIP:EM: Sending Standalone Ack for MessageCounter:150175766 on exchange 54113i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGGEN.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -278,6 +278,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -297,7 +298,7 @@ tests: [1654681931.626454][32908:32913] CHIP:EM: Sending Standalone Ack for MessageCounter:43923364 on exchange cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGGEN.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_DGSW_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGSW_1_1.yaml index b8057505222a4e..fe83bf51609e1b 100644 --- a/src/app/tests/suites/certification/Test_TC_DGSW_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGSW_1_1.yaml @@ -33,7 +33,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: DGSW.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -42,7 +41,7 @@ tests: type: int16u - label: "Step 3a: TH reads the FeatureMap from DUT" - PICS: " !DGSW.S.F00 && DGSW.S.Afffc" + PICS: " !DGSW.S.F00 " command: "readAttribute" attribute: "FeatureMap" response: @@ -53,7 +52,7 @@ tests: - label: "Step 3b: Given DGSW.S.F00(Watermarks) ensure featuremap has the correct bit set" - PICS: DGSW.S.F00 && DGSW.S.Afffc + PICS: DGSW.S.F00 command: "readAttribute" attribute: "FeatureMap" response: @@ -62,7 +61,7 @@ tests: hasMasksSet: [0x1] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -71,7 +70,7 @@ tests: contains: [65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -81,7 +80,7 @@ tests: - label: "Step 4b: TH reads optional attribute(ThreadMetrics) in AttributeList" - PICS: DGSW.S.A0000 && DGSW.S.Afffb + PICS: DGSW.S.A0000 command: "readAttribute" attribute: "AttributeList" response: @@ -92,7 +91,7 @@ tests: - label: "Step 4c: TH reads optional attribute(CurrentHeapFree) in AttributeList" - PICS: DGSW.S.A0001 && DGSW.S.Afffb + PICS: DGSW.S.A0001 command: "readAttribute" attribute: "AttributeList" response: @@ -103,7 +102,7 @@ tests: - label: "Step 4d: TH reads optional attribute(CurrentHeapUsed) in AttributeList" - PICS: DGSW.S.A0002 && DGSW.S.Afffb + PICS: DGSW.S.A0002 command: "readAttribute" attribute: "AttributeList" response: @@ -114,7 +113,7 @@ tests: - label: "Step 4e: TH reads Feature dependent attribute(CurrentHeapHighWatermark) in AttributeList" - PICS: ( DGSW.S.F00 || DGSW.S.A0003 ) && DGSW.S.Afffb + PICS: ( DGSW.S.F00 || DGSW.S.A0003 ) command: "readAttribute" attribute: "AttributeList" response: @@ -154,7 +153,7 @@ tests: [1676280804.650522][4258:4260] CHIP:TOO: [10]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGSW.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -163,7 +162,7 @@ tests: value: "y" - label: "Step 5a: TH reads EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGSW.S.E00 && DGSW.S.Afffa + PICS: DGSW.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -172,7 +171,7 @@ tests: contains: [0] - label: "Step 5b: TH reads EventList from DUT" - PICS: "PICS_EVENT_LIST_ENABLED && !DGSW.S.E00 && DGSW.S.Afffa " + PICS: " !DGSW.S.E00 && PICS_EVENT_LIST_ENABLED " command: "readAttribute" attribute: "EventList" response: @@ -181,17 +180,19 @@ tests: type: list - label: - "Step 5c: TH reads EventList attribute from DUT. 1.The list MAY - contain values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5c: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool softwarediagnostics read event-list 1 0 - [1676459464.108583][25294:25296] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0034 Attribute 0x0000_FFFA DataVersion: 650337896 [1676459464.108607][25294:25296] CHIP:TOO: EventList: 1 entries [1676459464.108612][25294:25296] CHIP:TOO: [1]: 0 @@ -199,7 +200,7 @@ tests: [1676459464.108640][25294:25296] CHIP:IN: (S) Sending msg 182610763 on secure session with LSID: 46243 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGSW.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -208,7 +209,7 @@ tests: value: "y" - label: "Step 6a: TH reads AcceptedCommandList from DUT" - PICS: DGSW.S.F00 && DGSW.S.Afff9 + PICS: DGSW.S.F00 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -217,14 +218,14 @@ tests: contains: [0] - label: "Step 6b: TH reads AcceptedCommandList from DUT" - PICS: " !DGSW.S.F00 && DGSW.S.Afff9" + PICS: " !DGSW.S.F00 " command: "readAttribute" attribute: "AcceptedCommandList" response: value: [] constraints: type: list - + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -245,7 +246,7 @@ tests: [1651787861.534793][241117:241122] CHIP:TOO: [1]: 0 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGSW.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -253,6 +254,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -271,7 +273,7 @@ tests: [1651787918.020734][241128:241133] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DGSW.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml index 1348b752bf9525..2f2564ba64e77b 100644 --- a/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml @@ -157,7 +157,6 @@ tests: 62, 65528, 65529, - 65531, 65532, 65533, @@ -264,7 +263,7 @@ tests: contains: [58] - label: "Step 5a: TH reads EventList from DUT" - PICS: "PICS_EVENT_LIST_ENABLED && !DGTHREAD.S.E00 && !DGTHREAD.S.E01 " + PICS: " !DGTHREAD.S.E00 && !DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "EventList" response: @@ -274,7 +273,7 @@ tests: - label: "Step 5b: TH reads DGTHREAD.S.E00(ConnectionStatus) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E00 + PICS: DGTHREAD.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -285,7 +284,7 @@ tests: - label: "Step 5c: TH reads DGTHREAD.S.E01(NetworkFaultChange) event in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E01 + PICS: DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -293,6 +292,37 @@ tests: type: list contains: [1] + - label: + "Step 5d: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool threadnetworkdiagnostics read event-list 54 0 + + Verify " EventList attribute " consists the list of supported events, on TH(chip-tool) + + 1676459946.528321][25797:25799] CHIP:DMG: } + [1676459946.528472][25797:25799] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0035 Attribute 0x0000_FFFA DataVersion: 3757870882 + [1676459946.528508][25797:25799] CHIP:TOO: EventList: 0 entries + [1676459946.528588][25797:25799] CHIP:EM: <<< [E:39264i S:15932 M:176950481 (Ack:89396356)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1676459946.528602][25797:25799] CHIP:IN: (S) Sending msg 176950481 on secure session with LSID: 15932 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6a: TH reads AcceptedCommandList from DUT" PICS: " !DGTHREAD.S.F01 " command: "readAttribute" @@ -311,10 +341,71 @@ tests: type: list contains: [0] - - label: "Step 7: TH reads GeneratedCommandList from DUT" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool threadnetworkdiagnostics read accepted-command-list 54 0 + + Verify "AcceptedCommandList: 1 entries" on the TH(Chip-tool) Log: + + [1649748231.835572][9579:9584] CHIP:DMG: SuppressResponse = true, + [1649748231.835633][9579:9584] CHIP:DMG: InteractionModelRevision = 1 + [1649748231.835690][9579:9584] CHIP:DMG: } + [1649748231.836192][9579:9584] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0035 Attribute 0x0000_FFF9 DataVersion: 1406212801 + [1649748231.836344][9579:9584] CHIP:TOO: AcceptedCommandList: 1 entries + [1649748231.836420][9579:9584] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: TH reads GeneratedCommandList from DUT" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool threadnetworkdiagnostics read generated-command-list 54 0 + + Verify "GeneratedCommandList: 0 entries" on the TH(Chip-tool) Log: + + [1649748201.118100][9570:9575] CHIP:DMG: SuppressResponse = true, + [1649748201.118163][9570:9575] CHIP:DMG: InteractionModelRevision = 1 + [1649748201.118221][9570:9575] CHIP:DMG: } + [1649748201.118561][9570:9575] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0035 Attribute 0x0000_FFF8 DataVersion: 1406212801 + [1649748201.118707][9570:9575] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml b/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml index 92f50b358ea19c..61a5800c2b4204 100644 --- a/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml @@ -451,7 +451,7 @@ tests: Verify "SecurityPolicy attribute has the following value" on the TH(Chip-tool) Log: RotationTime is of the type uint16 - Flags is of the type uint8 + Flags is of the type uint16 [1649825860.866762][3472:3477] CHIP:DMG: SuppressResponse = true, [1649825860.866826][3472:3477] CHIP:DMG: InteractionModelRevision = 1 diff --git a/src/app/tests/suites/certification/Test_TC_DGWIFI_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGWIFI_1_1.yaml index c37875850572fd..6f1fc9d599369a 100644 --- a/src/app/tests/suites/certification/Test_TC_DGWIFI_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DGWIFI_1_1.yaml @@ -152,41 +152,38 @@ tests: - label: "Step 7a: TH reads EventList from DUT" PICS: - "PICS_EVENT_LIST_ENABLED && !DGWIFI.S.E00 && !DGWIFI.S.E01 && - !DGWIFI.S.E02 " + " !DGWIFI.S.E00 && !DGWIFI.S.E01 && !DGWIFI.S.E02 && + PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "EventList" response: value: [] constraints: type: list - - label: "Step 7b: TH reads optional attribute (Disconnection) in EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGWIFI.S.E00 + PICS: DGWIFI.S.E00 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: constraints: type: list contains: [0] - - label: "Step 7c: TH reads optional attribute (AssociationFailure) in EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGWIFI.S.E01 + PICS: DGWIFI.S.E01 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: constraints: type: list contains: [1] - - label: "Step 7d: TH reads optional attribute (ConnectionStatus) in EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DGWIFI.S.E02 + PICS: DGWIFI.S.E02 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: diff --git a/src/app/tests/suites/certification/Test_TC_DLOG_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DLOG_1_1.yaml index 133c6814e080ff..e6889393400d8c 100644 --- a/src/app/tests/suites/certification/Test_TC_DLOG_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DLOG_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: DLOG.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: TTH reads the FeatureMap from DUT" - PICS: DLOG.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: TTH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -58,9 +56,8 @@ tests: type: list contains: [65528, 65529, 65530, 65531, 65532, 65533] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: TTH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -97,7 +94,7 @@ tests: [1676282213.422226][3638:3640] CHIP:EM: <<< [E:42829i M:266551039 (Ack:231594444)] (S) Msg TX to 1:000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DLOG.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -106,25 +103,27 @@ tests: value: "y" - label: - "Step 4b: TTH reads EventList attribute from DUT. 1.The list MAY - contain values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool diagnosticlogs read event-list 1 0 Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: - [1676460292.457787][25934:25936] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0032 Attribute 0x0000_FFFA DataVersion: 1490287489 [1676460292.457829][25934:25936] CHIP:TOO: EventList: 0 entries [1676460292.457878][25934:25936] CHIP:EM: <<< [E:19170i S:29205 M:215468614 (Ack:174747327)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) [1676460292.457892][25934:25936] CHIP:IN: (S) Sending msg 215468614 on secure session with LSID: 29205 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DLOG.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -133,7 +132,6 @@ tests: value: "y" - label: "Step 6a: TTH reads AcceptedCommandList from DUT" - PICS: DLOG.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -141,6 +139,7 @@ tests: constraints: type: list + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6b: TTH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -164,7 +163,7 @@ tests: [1649670700.139528][3624:3629] CHIP:TOO: [1]: 0 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DLOG.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -173,7 +172,6 @@ tests: value: "y" - label: "Step 7a: TTH reads GeneratedCommandList from DUT" - PICS: DLOG.S.Afff8 command: "readAttribute" attribute: "GeneratedCommandList" response: @@ -181,6 +179,7 @@ tests: constraints: type: list + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7b: TTH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier @@ -200,7 +199,7 @@ tests: [1659426423.334234][3296:3302] CHIP:TOO: [1]: 1 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && DLOG.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_1_1.yaml index 7145d874775947..ace9293841b932 100644 --- a/src/app/tests/suites/certification/Test_TC_DRLK_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_1_1.yaml @@ -407,7 +407,7 @@ tests: - label: "Step 5b: TH reads optional event(Door position sensor) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DRLK.S.F05 + PICS: DRLK.S.F05 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -418,7 +418,7 @@ tests: - label: "Step 5c: TH reads optional event(User commands and database) in EventList" - PICS: PICS_EVENT_LIST_ENABLED && DRLK.S.F08 + PICS: DRLK.S.F08 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml old mode 100644 new mode 100755 index 686061edda9c34..ecd16a23b216fd --- a/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml @@ -22,6 +22,10 @@ config: cluster: "Door Lock" endpoint: 1 + WaitAfterLockAandUnlockDoor: + type: int16u + defaultValue: 5000 + tests: - label: "Wait for the commissioned device to be retrieved" cluster: "DelayCommands" @@ -63,6 +67,15 @@ tests: command: "LockDoor" timedInteractionTimeoutMs: 1000 + - label: "Wait after Lock Door" + PICS: DRLK.S.C00.Rsp + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: WaitAfterLockAandUnlockDoor + - label: "Step 1d: TH reads LockState attribute from DUT" PICS: DRLK.S.A0000 command: "readAttribute" @@ -75,6 +88,15 @@ tests: command: "UnlockDoor" timedInteractionTimeoutMs: 1000 + - label: "Wait after Unlock Door" + PICS: DRLK.S.C00.Rsp + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: WaitAfterLockAandUnlockDoor + - label: "Step 1e: TH reads LockState attribute from DUT" PICS: DRLK.S.A0000 command: "readAttribute" @@ -615,29 +637,13 @@ tests: - label: "Step 18b: TH writes Credential RulesSupport attribute as bit 0 is set to 1" - PICS: PICS_SKIP_SAMPLE_APP && DRLK.S.F08 && DRLK.S.A001b - verification: | - ./chip-tool doorlock write-by-id 27 1 1 1 - - Verify "DUT responds with UNSUPPORTED_WRITE" on the TH(Chip-tool) Log: - - [1653636825.034667][3467:3472] CHIP:DMG: - [1653636825.034712][3467:3472] CHIP:DMG: StatusIB = - [1653636825.034758][3467:3472] CHIP:DMG: { - [1653636825.034804][3467:3472] CHIP:DMG: status = 0x88 (UNSUPPORTED_WRITE), - [1653636825.034851][3467:3472] CHIP:DMG: }, - [1653636825.034896][3467:3472] CHIP:DMG: - [1653636825.034933][3467:3472] CHIP:DMG: }, - [1653636825.034977][3467:3472] CHIP:DMG: - [1653636825.035013][3467:3472] CHIP:DMG: ], - cluster: "LogCommands" - command: "UserPrompt" + PICS: DRLK.S.F08 && DRLK.S.A001b + command: "writeAttribute" + attribute: "CredentialRulesSupport" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" + value: 1 + response: + error: UNSUPPORTED_WRITE - label: "Step 18c: TH reads Credential RulesSupport attribute from DUT" PICS: DRLK.S.F08 && DRLK.S.A001b @@ -659,30 +665,30 @@ tests: maxLength: 3 - label: "Step 19b: TH writes Language attribute as fr" - PICS: DRLK.S.A0021.Write + PICS: DRLK.S.A0021 && DRLK.S.A0021.Write command: "writeAttribute" attribute: "Language" arguments: value: "fr" - label: "Step 19b: TH writes Language attribute as fr" - PICS: " !DRLK.S.A0021.Write " + PICS: DRLK.S.A0021 && !DRLK.S.A0021.Write command: "writeAttribute" attribute: "Language" arguments: value: "fr" response: - error: UNSUPPORTED_WRITE] + error: UNSUPPORTED_WRITE - label: "Step 19c: TH reads Language attribute from DUT" - PICS: DRLK.S.A0021.Write + PICS: DRLK.S.A0021 && DRLK.S.A0021.Write command: "readAttribute" attribute: "Language" response: value: "fr" - label: "Step 19c: TH reads Language attribute from DUT" - PICS: " !DRLK.S.A0021.Write " + PICS: DRLK.S.A0021 && !DRLK.S.A0021.Write command: "readAttribute" attribute: "Language" response: @@ -1097,7 +1103,7 @@ tests: - label: "Step 30b: TH reads LocalProgrammingFeatures attribute from DUT. DRLK.S.A0028(EnableLocalProgramming) is True." - PICS: DRLK.S.A002c && DRLK.S.A0028.ReadOnly + PICS: DRLK.S.A002c && DRLK.S.A0028 command: "readAttribute" attribute: "LocalProgrammingFeatures" response: @@ -1108,7 +1114,7 @@ tests: - label: "Step 30b: TH reads LocalProgrammingFeatures attribute from DUT. DRLK.S.A0028(EnableLocalProgramming) is False." - PICS: DRLK.S.A002c && !DRLK.S.A0028.ReadOnly + PICS: DRLK.S.A002c && !DRLK.S.A0028 command: "readAttribute" attribute: "LocalProgrammingFeatures" response: @@ -1119,214 +1125,89 @@ tests: - label: "Step 30c: TH writes to LocalProgrammingFeatures to disable all the features (Change all bits to 0)" - PICS: - DRLK.S.A002c && DRLK.S.A0028.ReadOnly && DRLK.S.A002c.Write && - PICS_SKIP_SAMPLE_APP - verification: | - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock write-by-id 44 0 1 1 - - Verify " LocalProgrammingFeatures" on the TH(Chip-tool) Log: - - [1658987893.199449][2822:2827] CHIP:DMG: StatusIB = - [1658987893.199501][2822:2827] CHIP:DMG: { - [1658987893.199548][2822:2827] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658987893.199598][2822:2827] CHIP:DMG: }, - [1658987893.199643][2822:2827] CHIP:DMG: - [1658987893.199683][2822:2827] CHIP:DMG: }, - [1658987893.199726][2822:2827] CHIP:DMG: - [1658987893.199761][2822:2827] CHIP:DMG: ], - [1658987893.199803][2822:2827] CHIP:DMG: - [1658987893.199839][2822:2827] CHIP:DMG: InteractionModelRevision = 1 - [1658987893.199873][2822:2827] CHIP:DMG: } - [1658987893.199968][2822:2827] CHIP:DMG: WriteClient moving to [AwaitingDe] - [1658987893.200012][2822:2827] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE) - cluster: "LogCommands" - command: "UserPrompt" + PICS: DRLK.S.A002c.Write && DRLK.S.A0028 + command: "writeAttribute" + attribute: "LocalProgrammingFeatures" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" - - - label: "Step 30d: TH sets the EnableLocalProgramming attribute to False" - PICS: - DRLK.S.A002c && DRLK.S.A0028.Write && DRLK.S.A002c.Write && - PICS_SKIP_SAMPLE_APP - verification: | - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock write enable-local-programming 0 1 1 - - Verify " EnableLocalProgramming" on the TH(Chip-tool) Log: - - [1658988052.124227][2834:2839] CHIP:DMG: StatusIB = - [1658988052.124259][2834:2839] CHIP:DMG: { - [1658988052.124292][2834:2839] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658988052.124323][2834:2839] CHIP:DMG: }, - [1658988052.124353][2834:2839] CHIP:DMG: - [1658988052.124381][2834:2839] CHIP:DMG: }, - [1658988052.124410][2834:2839] CHIP:DMG: - [1658988052.124433][2834:2839] CHIP:DMG: ], - [1658988052.124462][2834:2839] CHIP:DMG: - [1658988052.124486][2834:2839] CHIP:DMG: InteractionModelRevision = 1 - [1658988052.124509][2834:2839] CHIP:DMG: } - [1658988052.124577][2834:2839] CHIP:DMG: WriteClient moving to [AwaitingDe] - [1658988052.124608][2834:2839] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE) + value: 0 - This is an Optional attribute, so its not compulsory to get the expected outcome + - label: + "Step 30c: TH reads LocalProgrammingFeatures attribute from DUT. + DRLK.S.A0028(EnableLocalProgramming) is False." + PICS: DRLK.S.A002c.Write && DRLK.S.A0028 + command: "readAttribute" + attribute: "LocalProgrammingFeatures" + response: + constraints: + type: bitmap8 + hasMasksClear: [0x1, 0x2, 0x4, 0x8] - ./chip-tool doorlock read local-programming-features 1 1 - - Verify " LocalProgrammingFeatures" on the TH(Chip-tool) Log: - - [1658987637.292491][2794:2799] CHIP:DMG: StatusIB = - [1658987637.292530][2794:2799] CHIP:DMG: { - [1658987637.292568][2794:2799] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658987637.292605][2794:2799] CHIP:DMG: }, - [1658987637.292642][2794:2799] CHIP:DMG: - [1658987637.292675][2794:2799] CHIP:DMG: }, - [1658987637.292713][2794:2799] CHIP:DMG: - [1658987637.292741][2794:2799] CHIP:DMG: }, - [1658987637.292774][2794:2799] CHIP:DMG: - [1658987637.292798][2794:2799] CHIP:DMG: ], - [1658987637.292828][2794:2799] CHIP:DMG: - [1658987637.292852][2794:2799] CHIP:DMG: SuppressResponse = true, - [1658987637.292878][2794:2799] CHIP:DMG: InteractionModelRevision = 1 - [1658987637.292901][2794:2799] CHIP:DMG: } - [1658987637.293006][2794:2799] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE)" - cluster: "LogCommands" - command: "UserPrompt" + - label: "Step 30d: TH sets the EnableLocalProgramming attribute to False" + PICS: DRLK.S.A002c + command: "writeAttribute" + attribute: "EnableLocalProgramming" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" - - - label: "Step 30e: TH sets the EnableLocalProgramming attribute to True" - PICS: - DRLK.S.A002c && DRLK.S.A0028.Write && DRLK.S.A002c.Write && - PICS_SKIP_SAMPLE_APP - verification: | - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock write enable-local-programming 1 1 1 - - Verify " EnableLocalProgramming" on the TH(Chip-tool) Log: - - [1658988136.125747][2845:2850] CHIP:DMG: StatusIB = - [1658988136.125781][2845:2850] CHIP:DMG: { - [1658988136.125814][2845:2850] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658988136.125847][2845:2850] CHIP:DMG: }, - [1658988136.125879][2845:2850] CHIP:DMG: - [1658988136.125908][2845:2850] CHIP:DMG: }, - [1658988136.125941][2845:2850] CHIP:DMG: - [1658988136.125966][2845:2850] CHIP:DMG: ], - [1658988136.125997][2845:2850] CHIP:DMG: - [1658988136.126022][2845:2850] CHIP:DMG: InteractionModelRevision = 1 - [1658988136.126072][2845:2850] CHIP:DMG: } - [1658988136.126149][2845:2850] CHIP:DMG: WriteClient moving to [AwaitingDe] - [1658988136.126183][2845:2850] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE) + value: false + - label: + "Step 30d: Verify that all the 4 bits in the LocalProgrammingFeatures + is set to 0." + PICS: DRLK.S.A002c + command: "readAttribute" + attribute: "LocalProgrammingFeatures" + response: + constraints: + type: bitmap8 + hasMasksClear: [0x1, 0x2, 0x4, 0x8] - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock read local-programming-features 1 1 - - Verify " LocalProgrammingFeatures" on the TH(Chip-tool) Log: - - [1658987637.292491][2794:2799] CHIP:DMG: StatusIB = - [1658987637.292530][2794:2799] CHIP:DMG: { - [1658987637.292568][2794:2799] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658987637.292605][2794:2799] CHIP:DMG: }, - [1658987637.292642][2794:2799] CHIP:DMG: - [1658987637.292675][2794:2799] CHIP:DMG: }, - [1658987637.292713][2794:2799] CHIP:DMG: - [1658987637.292741][2794:2799] CHIP:DMG: }, - [1658987637.292774][2794:2799] CHIP:DMG: - [1658987637.292798][2794:2799] CHIP:DMG: ], - [1658987637.292828][2794:2799] CHIP:DMG: - [1658987637.292852][2794:2799] CHIP:DMG: SuppressResponse = true, - [1658987637.292878][2794:2799] CHIP:DMG: InteractionModelRevision = 1 - [1658987637.292901][2794:2799] CHIP:DMG: } - [1658987637.293006][2794:2799] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE)" - cluster: "LogCommands" - command: "UserPrompt" + - label: "Step 30e: TH sets the EnableLocalProgramming attribute to True" + PICS: DRLK.S.A0028.Write + command: "writeAttribute" + attribute: "EnableLocalProgramming" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" + value: true + + - label: + "Step 30e: Verify that all the 4 bits in the LocalProgrammingFeatures + is set to 1." + PICS: DRLK.S.A0028.Write + command: "readAttribute" + attribute: "LocalProgrammingFeatures" + response: + constraints: + type: bitmap8 + hasMasksSet: [0x1, 0x2, 0x4, 0x8] - label: "Step 30f: TH sends a write message to change any one of the bits of the LocalProgrammingFeatures." - PICS: DRLK.S.A002c && DRLK.S.A002c.Write && PICS_SKIP_SAMPLE_APP - verification: | - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock write-by-id 44 2 1 1 - - Verify " DUT sends SUCCESS response" on the TH(Chip-tool) Log: - - [1658988308.728071][2866:2871] CHIP:DMG: StatusIB = - [1658988308.728110][2866:2871] CHIP:DMG: { - [1658988308.728152][2866:2871] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658988308.728191][2866:2871] CHIP:DMG: }, - [1658988308.728229][2866:2871] CHIP:DMG: - [1658988308.728263][2866:2871] CHIP:DMG: }, - [1658988308.728299][2866:2871] CHIP:DMG: - [1658988308.728328][2866:2871] CHIP:DMG: ], - [1658988308.728364][2866:2871] CHIP:DMG: - [1658988308.728394][2866:2871] CHIP:DMG: InteractionModelRevision = 1 - [1658988308.728423][2866:2871] CHIP:DMG: } - [1658988308.728500][2866:2871] CHIP:DMG: WriteClient moving to [AwaitingDe] - [1658988308.728539][2866:2871] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE) - cluster: "LogCommands" - command: "UserPrompt" + PICS: DRLK.S.A002c && DRLK.S.A002c.Write + command: "writeAttribute" + attribute: "LocalProgrammingFeatures" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" + value: 2 + + - label: + "Step 30f: Verify that the correct bit has been changed by doing a + Read on LocalProgrammingFeatures attribute.." + PICS: DRLK.S.A0028.Write + command: "readAttribute" + attribute: "LocalProgrammingFeatures" + response: + constraints: + type: bitmap8 + hasMasksSet: [0x2] - label: "Step 30g: TH sends a write message to change any one of the bits of the LocalProgrammingFeatures." - PICS: DRLK.S.A002c && DRLK.S.A002c.ReadOnly && PICS_SKIP_SAMPLE_APP - verification: | - This is an Optional attribute, so its not compulsory to get the expected outcome - - ./chip-tool doorlock write-by-id 44 3 1 1 - - Verify " DUT sends an UNSUPPORTED_WRITE" on the TH(Chip-tool) Log: - - [1658988387.295252][2874:2879] CHIP:DMG: StatusIB = - [1658988387.295294][2874:2879] CHIP:DMG: { - [1658988387.295336][2874:2879] CHIP:DMG: status = 0x86 (UNSUPPORTED_ATTRIBUTE), - [1658988387.295378][2874:2879] CHIP:DMG: }, - [1658988387.295419][2874:2879] CHIP:DMG: - [1658988387.295456][2874:2879] CHIP:DMG: }, - [1658988387.295499][2874:2879] CHIP:DMG: - [1658988387.295530][2874:2879] CHIP:DMG: ], - [1658988387.295569][2874:2879] CHIP:DMG: - [1658988387.295601][2874:2879] CHIP:DMG: InteractionModelRevision = 1 - [1658988387.295632][2874:2879] CHIP:DMG: } - [1658988387.295719][2874:2879] CHIP:DMG: WriteClient moving to [AwaitingDe] - [1658988387.295760][2874:2879] CHIP:TOO: Response Failure: IM Error 0x00000586: General error: 0x86 (UNSUPPORTED_ATTRIBUTE) - cluster: "LogCommands" - command: "UserPrompt" + PICS: DRLK.S.A002c && DRLK.S.A002c.ReadOnly + command: "writeAttribute" + attribute: "LocalProgrammingFeatures" arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" + value: 2 + response: + error: UNSUPPORTED_WRITE - label: "Step 31a: TH reads WrongCodeEntry Limit attribute from DUT TH saves diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_10.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_10.yaml index 63c411486353eb..c00e52dd5674e7 100644 --- a/src/app/tests/suites/certification/Test_TC_DRLK_2_10.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_10.yaml @@ -444,7 +444,7 @@ tests: - label: "Step 5a: TH sends Set User Command to DUT with the following values: - OperationType as 0-Add UserIndex as 2( Different from an existing + OperationType as 0-Add UserIndex as 4( Different from an existing UserIndex) UserName as xxx UserUniqueID as 6452 UserStatus as 1-OccupiedEnabled UserType as 0-UnrestrictedUser CredentialRule as 0-Single" @@ -697,7 +697,34 @@ tests: [1658223096.125372][4517:4522] CHIP:TOO: } disabled: true - - label: "Step 5g: TH sends Clear Credential Command to DUT" + - label: + "Step 5g: TH sends Clear User Command to DUT for user created in Step + 5a" + PICS: DRLK.S.C1d.Rsp + verification: | + ./chip-tool doorlock clear-user 4 1 1 --timedInteractionTimeoutMs 1000 + + Via the TH (chip-tool), verify the SUCCESS response for clearing the users details. + + [1658142762.492854][2993:2998] CHIP:DMG: + [1658142762.492888][2993:2998] CHIP:DMG: StatusIB = + [1658142762.492920][2993:2998] CHIP:DMG: { + [1658142762.492957][2993:2998] CHIP:DMG: status = 0x00 (SUCCESS), + [1658142762.492994][2993:2998] CHIP:DMG: }, + [1658142762.493026][2993:2998] CHIP:DMG: + [1658142762.493060][2993:2998] CHIP:DMG: }, + [1658142762.493097][2993:2998] CHIP:DMG: + [1658142762.493125][2993:2998] CHIP:DMG: }, + [1658142762.493158][2993:2998] CHIP:DMG: + [1658142762.493182][2993:2998] CHIP:DMG: ], + [1658142762.493211][2993:2998] CHIP:DMG: + [1658142762.493235][2993:2998] CHIP:DMG: InteractionModelRevision = 1 + [1658142762.493258][2993:2998] CHIP:DMG: }, + disabled: true + + - label: + "Step 6a: TH sends Clear Credential Command to DUT for Credential + created in Step 3a" PICS: DRLK.S.C26.Rsp verification: | ./chip-tool doorlock clear-credential '{ "credentialType" : 1 , "credentialIndex" : 1 }' 1 1 --timedInteractionTimeoutMs 1000 @@ -721,7 +748,9 @@ tests: [1658142697.890616][2985:2990] CHIP:DMG: ICR moving to [AwaitingDe] disabled: true - - label: "Step 5h: TH sends Clear User Command to DUT" + - label: + "Step 6b: TH sends Clear User Command to DUT for User created in Step + 3a" PICS: DRLK.S.C1d.Rsp verification: | ./chip-tool doorlock clear-user 1 1 1 --timedInteractionTimeoutMs 1000 diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_12.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_12.yaml index 2964d1c83b3bec..bbb2828c0784ef 100644 --- a/src/app/tests/suites/certification/Test_TC_DRLK_2_12.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_12.yaml @@ -21,6 +21,9 @@ config: nodeId: 0x12344321 cluster: "Door Lock" endpoint: 1 + requirePINIsTrue: + type: BOOLEAN + defaultValue: false tests: - label: "Wait for the commissioned device to be retrieved" @@ -152,13 +155,61 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: false + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 + + - label: + "Step 2a: TH verifies the RequirePINforRemoteOperation attribute value + is now False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + value: true + + - label: "Step 2b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: "Step 3: TH sends Ubolt Door Command to the DUT without PINCode" + runIf: requirePINIsFalse PICS: DRLK.S.C27.Rsp command: "UnboltDoor" timedInteractionTimeoutMs: 1000 + - label: "Step 3: TH sends Ubolt Door Command to the DUT without PINCode" + runIf: requirePINIsTrue + PICS: DRLK.S.C27.Rsp + command: "UnboltDoor" + timedInteractionTimeoutMs: 1000 + response: + error: FAILURE + - label: "Step 4: TH sends Ubolt Door Command to the DUT with PINCode" PICS: DRLK.S.C27.Rsp command: "UnboltDoor" @@ -195,19 +246,49 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: true + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 - - label: "Step 7: TH sends Ubolt Door Command to the DUT with valid PINCode" - PICS: DRLK.S.C27.Rsp - command: "UnboltDoor" - timedInteractionTimeoutMs: 1000 + - label: + "Step 6a: TH verifies the RequirePINforRemoteOperation attribute value + is now True on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" arguments: values: - - name: "PINCode" - value: "123456" + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: true + response: + - values: + - name: "Equals" + value: true + + - label: "Step 6b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: - "Step 8: TH sends Unbolt Door Command to the DUT with Invalid PINCode" + "Step 7: TH sends Unbolt Door Command to the DUT with Invalid PINCode" PICS: DRLK.S.C27.Rsp command: "UnboltDoor" timedInteractionTimeoutMs: 1000 @@ -218,13 +299,29 @@ tests: response: error: FAILURE - - label: "Step 9: TH sends Unbolt Door Command to the DUT without PINCode" + - label: "Step 8: TH sends Unbolt Door Command to the DUT without PINCode" + runIf: requirePINIsTrue PICS: DRLK.S.C27.Rsp command: "UnboltDoor" timedInteractionTimeoutMs: 1000 response: error: FAILURE + - label: "Step 8: TH sends Unbolt Door Command to the DUT without PINCode" + runIf: requirePINIsFalse + PICS: DRLK.S.C27.Rsp + command: "UnboltDoor" + timedInteractionTimeoutMs: 1000 + + - label: "Step 9: TH sends Ubolt Door Command to the DUT with valid PINCode" + PICS: DRLK.S.C27.Rsp + command: "UnboltDoor" + timedInteractionTimeoutMs: 1000 + arguments: + values: + - name: "PINCode" + value: "123456" + - label: "Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT" diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_2.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_2.yaml index 4481532c0ca1af..c4e8dcb483e4e1 100644 --- a/src/app/tests/suites/certification/Test_TC_DRLK_2_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_2.yaml @@ -21,6 +21,9 @@ config: nodeId: 0x12344321 cluster: "Door Lock" endpoint: 1 + requirePINIsTrue: + type: BOOLEAN + defaultValue: false tests: - label: "Wait for the commissioned device to be retrieved" @@ -126,18 +129,18 @@ tests: value: null - label: - "Step 1a: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT" - PICS: DRLK.S.A0033 + "Step 1: TH writes the RequirePINforRemoteOperation attribute value as + False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: value: false - label: - "Step 1b: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT and Verify DUT responds with UNSUPPORTED_WRITE" - PICS: "!DRLK.S.A0033" + "Step 1: TH writes the RequirePINforRemoteOperation attribute value as + False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: @@ -152,12 +155,60 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: false + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 + + - label: + "Step 2a: TH verifies the RequirePINforRemoteOperation attribute value + is now False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + value: true + + - label: "Step 2b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 + + - label: "Step 3: TH sends Lock Door Command to the DUT without PINCode" + runIf: requirePINIsFalse + PICS: DRLK.S.C00.Rsp + command: "LockDoor" + timedInteractionTimeoutMs: 1000 - label: "Step 3: TH sends Lock Door Command to the DUT without PINCode" + runIf: requirePINIsTrue PICS: DRLK.S.C00.Rsp command: "LockDoor" timedInteractionTimeoutMs: 1000 + response: + error: FAILURE - label: "Step 4: TH sends Lock Door Command to the DUT with valid PINCode" PICS: DRLK.S.C00.Rsp @@ -169,18 +220,18 @@ tests: value: "123456" - label: - "Step 5a: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT" - PICS: DRLK.S.A0033 + "Step 5: TH writes the RequirePINforRemoteOperation attribute value as + true on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: value: true - label: - "Step 5b: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT and Verify DUT responds with UNSUPPORTED_WRITE" - PICS: "!DRLK.S.A0033" + "Step 5: TH writes the RequirePINforRemoteOperation attribute value as + true on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: @@ -195,19 +246,49 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: true + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 - - label: "Step 7: TH sends Lock Door Command to the DUT with valid PINCode" - PICS: DRLK.S.C00.Rsp && DRLK.S.A0033 - command: "LockDoor" - timedInteractionTimeoutMs: 1000 + - label: + "Step 6a: TH verifies the RequirePINforRemoteOperation attribute value + is now True on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" arguments: values: - - name: "PINCode" - value: "123456" + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: true + response: + - values: + - name: "Equals" + value: true + + - label: "Step 6b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: - "Step 8: TH sends Lock Door Command to the DUT without valid PINCode" + "Step 7: TH sends Lock Door Command to the DUT without valid PINCode" PICS: DRLK.S.C00.Rsp && DRLK.S.A0033 command: "LockDoor" timedInteractionTimeoutMs: 1000 @@ -218,15 +299,29 @@ tests: response: error: FAILURE - - label: - "Step 9: TH sends Lock Door Command to the DUT without any argument - PINCode" + - label: "Step 8: TH sends Lock Door Command to the DUT without PINCode" + runIf: requirePINIsTrue PICS: DRLK.S.C00.Rsp && DRLK.S.A0033 command: "LockDoor" timedInteractionTimeoutMs: 1000 response: error: FAILURE + - label: "Step 8: TH sends Lock Door Command to the DUT without PINCode" + runIf: requirePINIsFalse + PICS: DRLK.S.C00.Rsp && DRLK.S.A0033 + command: "LockDoor" + timedInteractionTimeoutMs: 1000 + + - label: "Step 9: TH sends Lock Door Command to the DUT with valid PINCode" + PICS: DRLK.S.C00.Rsp && DRLK.S.A0033 + command: "LockDoor" + timedInteractionTimeoutMs: 1000 + arguments: + values: + - name: "PINCode" + value: "123456" + - label: "Step 10a: H reads the WrongCodeEntryLimit attribute from the DUT" PICS: DRLK.S.A0030 command: "readAttribute" @@ -355,7 +450,7 @@ tests: - label: "Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and Verify that the DUT sends Success response" - PICS: DRLK.S.A0030 + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030.Write command: "writeAttribute" attribute: "WrongCodeEntryLimit" arguments: @@ -364,7 +459,7 @@ tests: - label: "Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and verify DUT responds with UNSUPPORTED_WRITE" - PICS: "!DRLK.S.A0030" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0030.Write command: "writeAttribute" attribute: "WrongCodeEntryLimit" arguments: @@ -387,7 +482,7 @@ tests: "Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on the DUT and Verify that the DUT sends Success response" - PICS: DRLK.S.A0031 + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031.Write command: "writeAttribute" attribute: "UserCodeTemporaryDisableTime" arguments: @@ -397,7 +492,7 @@ tests: "Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on the DUT and verify DUT responds with UNSUPPORTED_WRITE" - PICS: "!DRLK.S.A0031" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0031.Write command: "writeAttribute" attribute: "UserCodeTemporaryDisableTime" arguments: diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_3.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_3.yaml index 644d59a39d146f..e8e0583619bde5 100644 --- a/src/app/tests/suites/certification/Test_TC_DRLK_2_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_3.yaml @@ -22,6 +22,9 @@ config: cluster: "Door Lock" endpoint: 1 timeout: 200 + requirePINIsTrue: + type: BOOLEAN + defaultValue: false tests: - label: "Wait for the commissioned device to be retrieved" @@ -127,18 +130,18 @@ tests: value: null - label: - "Step 1a: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT" - PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 + "Step 1: TH writes the RequirePINforRemoteOperation attribute value as + False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: value: false - label: - "Step 1b: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT and Verify DUT responds with UNSUPPORTED_WRITE" - PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033 + "Step 1: TH writes the RequirePINforRemoteOperation attribute value as + False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: @@ -153,14 +156,63 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: false + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 + + - label: + "Step 2a: TH verifies the RequirePINforRemoteOperation attribute value + is now False on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + value: true + + - label: "Step 2b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: "Step 3: TH sends the unlock Door command to the DUT without PINCode" + runIf: requirePINIsFalse PICS: DRLK.S.C01.Rsp command: "UnlockDoor" timedInteractionTimeoutMs: 1000 + - label: + "Step 3: TH sends the unlock Door command to the DUT without PINCode" + runIf: requirePINIsTrue + PICS: DRLK.S.C01.Rsp + command: "UnlockDoor" + timedInteractionTimeoutMs: 1000 + response: + error: FAILURE + - label: "Step 4: TH sends the unlock Door command to the DUT with valid PINCode" @@ -173,18 +225,18 @@ tests: value: "123456" - label: - "Step 5a: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT" - PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 + "Step 5: TH writes the RequirePINforRemoteOperation attribute value as + true on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: value: true - label: - "Step 5b: TH writes the RequirePINforRemoteOperation attribute value - as False on the DUT and Verify DUT responds with UNSUPPORTED_WRITE" - PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033 + "Step 5: TH writes the RequirePINforRemoteOperation attribute value as + true on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write command: "writeAttribute" attribute: "RequirePINforRemoteOperation" arguments: @@ -199,21 +251,49 @@ tests: command: "readAttribute" attribute: "RequirePINforRemoteOperation" response: - value: true + saveAs: requirePINIsTrue + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: - "Step 7: TH sends the unlock Door command to the DUT with valid - PINCode" - PICS: DRLK.S.C01.Rsp && DRLK.S.A0033 - command: "UnlockDoor" - timedInteractionTimeoutMs: 1000 + "Step 6a: TH verifies the RequirePINforRemoteOperation attribute value + is now True on the DUT" + PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write + cluster: "EqualityCommands" + command: "BooleanEquals" arguments: values: - - name: "PINCode" - value: "123456" + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: true + response: + - values: + - name: "Equals" + value: true + + - label: "Step 6b: Compute RequirePINforRemoteOperation" + cluster: "EqualityCommands" + command: "BooleanEquals" + arguments: + values: + - name: "Value1" + value: requirePINIsTrue + - name: "Value2" + value: false + response: + - values: + - name: "Equals" + saveAs: requirePINIsFalse + constraints: + type: boolean + minValue: 0 + maxValue: 1 - label: - "Step 8: TH sends the unlock Door command to the DUT with invalid + "Step 7: TH sends the unlock Door command to the DUT with invalid PINCode" PICS: DRLK.S.C01.Rsp && DRLK.S.A0033 command: "UnlockDoor" @@ -226,7 +306,8 @@ tests: error: FAILURE - label: - "Step 9: TH sends the unlock Door command to the DUT without PINCode" + "Step 8: TH sends the unlock Door command to the DUT without PINCode" + runIf: requirePINIsTrue PICS: DRLK.S.C01.Rsp && DRLK.S.A0033 command: "UnlockDoor" timedInteractionTimeoutMs: 1000 @@ -234,18 +315,36 @@ tests: error: FAILURE - label: - "Step 10a: TH writes WrongCodeEntryLimit attribute value as 3 on the - DUT and Verify that the DUT sends Success response" - PICS: DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0030.Write + "Step 8: TH sends the unlock Door command to the DUT without PINCode" + runIf: requirePINIsFalse + PICS: DRLK.S.C01.Rsp && DRLK.S.A0033 + command: "UnlockDoor" + timedInteractionTimeoutMs: 1000 + + - label: + "Step 9: TH sends the unlock Door command to the DUT with valid + PINCode" + PICS: DRLK.S.C01.Rsp && DRLK.S.A0033 + command: "UnlockDoor" + timedInteractionTimeoutMs: 1000 + arguments: + values: + - name: "PINCode" + value: "123456" + + - label: + "Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the + DUT" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030.Write command: "writeAttribute" attribute: "WrongCodeEntryLimit" arguments: value: 3 - label: - "Step 10b: TH writes WrongCodeEntryLimit attribute value as 3 on the - DUT and verify DUT responds with UNSUPPORTED_WRITE" - PICS: DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0030.Write + "Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the + DUT" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0030.Write command: "writeAttribute" attribute: "WrongCodeEntryLimit" arguments: @@ -254,18 +353,18 @@ tests: error: UNSUPPORTED_WRITE - label: - "Step 11a: TH writes UserCodeTemporaryDisableTime attribute value as - 15 Seconds on the DUT and Verify that the DUT sends Success response" - PICS: DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031.Write + "Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 + Seconds on the DUT and Verify that the DUT sends Success response" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031.Write command: "writeAttribute" attribute: "UserCodeTemporaryDisableTime" arguments: value: 15 - label: - "Step 11b: TH writes UserCodeTemporaryDisableTime attribute value as - 15 Seconds on the DUT and Verify that the DUT sends Success response" - PICS: DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0031.Write + "Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 + Seconds on the DUT and Verify that the DUT sends Success response" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0031.Write command: "writeAttribute" attribute: "UserCodeTemporaryDisableTime" arguments: @@ -326,9 +425,8 @@ tests: error: FAILURE - label: - "Step 13: TH reads the UserCodeTemporaryDisableTime attribute from the - DUT and check attribute is triggered" - PICS: DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031 + "Step 13: TH reads UserCodedTemporaryDisableTime attribute from DUT" + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 command: "readAttribute" attribute: "UserCodeTemporaryDisableTime" response: @@ -350,7 +448,7 @@ tests: - label: "Wait for UserCodeTemporaryDisableTime expires" cluster: "DelayCommands" command: "WaitForMs" - PICS: DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031 + PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 arguments: values: - name: "ms" diff --git a/src/app/tests/suites/certification/Test_TC_FAN_1_1.yaml b/src/app/tests/suites/certification/Test_TC_FAN_1_1.yaml index f716fec421c876..6b278a1a7ea1c2 100644 --- a/src/app/tests/suites/certification/Test_TC_FAN_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_FAN_1_1.yaml @@ -189,7 +189,57 @@ tests: type: list contains: [11] - - label: "Step 4: Read the global attribute: AcceptedCommandList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 3f: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool fancontrol read attribute-list 1 1 + + Via the TH (chip-tool), verify that theAttributeListattribute contains + - Mandatory entries:0x0000, 0x0001, 0x0002, 0x0003, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Based on feature support:- 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b + Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1686031154.064099][14930:14933] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0202 Attribute 0x0000_FFFB DataVersion: 3896103279 + [1686031154.064331][14930:14933] CHIP:TOO: AttributeList: 18 entries + [1686031154.064408][14930:14933] CHIP:TOO: [1]: 0 + [1686031154.064468][14930:14933] CHIP:TOO: [2]: 1 + [1686031154.064526][14930:14933] CHIP:TOO: [3]: 2 + [1686031154.064584][14930:14933] CHIP:TOO: [4]: 3 + [1686031154.064640][14930:14933] CHIP:TOO: [5]: 4 + [1686031154.064697][14930:14933] CHIP:TOO: [6]: 5 + [1686031154.064754][14930:14933] CHIP:TOO: [7]: 6 + [1686031154.064811][14930:14933] CHIP:TOO: [8]: 7 + [1686031154.064868][14930:14933] CHIP:TOO: [9]: 8 + [1686031154.064929][14930:14933] CHIP:TOO: [10]: 9 + [1686031154.064987][14930:14933] CHIP:TOO: [11]: 10 + [1686031154.065045][14930:14933] CHIP:TOO: [12]: 11 + [1686031154.065103][14930:14933] CHIP:TOO: [13]: 65528 + [1686031154.065161][14930:14933] CHIP:TOO: [14]: 65529 + [1686031154.065218][14930:14933] CHIP:TOO: [15]: 65530 + [1686031154.065275][14930:14933] CHIP:TOO: [16]: 65531 + [1686031154.065333][14930:14933] CHIP:TOO: [17]: 65532 + [1686031154.065390][14930:14933] CHIP:TOO: [18]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 4a: Read the global attribute: AcceptedCommandList" PICS: " !FAN.S.C00.Rsp " command: "readAttribute" attribute: "AcceptedCommandList" @@ -198,8 +248,38 @@ tests: constraints: type: list + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4b: TH reads AcceptedCommandList attribute from DUT. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored.3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool fancontrol read accepted-command-list 1 1 + + On TH(chip-tool), Verify the AcceptedCommandList attribute that contains 1 entries: + Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1686031757.840606][14982:14984] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0202 Attribute 0x0000_FFF9 DataVersion: 3896103279 + [1686031757.840879][14982:14984] CHIP:TOO: AcceptedCommandList: 1 entries + [1686031757.840958][14982:14984] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: - "Step 5: Read the optional command (ResetCondition) in + "Step 5a: Read the optional command (ResetCondition) in AcceptedCommandList" PICS: FAN.S.C00.Rsp command: "readAttribute" @@ -208,3 +288,31 @@ tests: constraints: type: list contains: [0] + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 5b: TH reads from the DUT the GeneratedCommandList attribute. + 1.The list SHALL NOT contain any additional values in the standard or + scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain + values in the Manufacturer Extensible Identifier (MEI) range: + (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT + contain any values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool fancontrol read generated-command-list 1 1 + + On TH(chip-tool), Verify the GeneratedCommandList attribute that contains 0 entries: + + [1689587005.212317][9422:9424] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0202 Attribute 0x0000_FFF8 DataVersion: 3321937588 + [1689587005.212457][9422:9424] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_FLABEL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_FLABEL_1_1.yaml index 6e24e7be5a7ded..61132393faad94 100644 --- a/src/app/tests/suites/certification/Test_TC_FLABEL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_FLABEL_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: FLABEL.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: FLABEL.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -58,9 +56,8 @@ tests: type: list contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -97,7 +94,7 @@ tests: [1676283591.496734][6597:6599] CHIP:EM: <<< [E:28165i M:228613411 (Ack:220149900)] (S) Msg TX to 1:000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLABEL.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -106,24 +103,26 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool fixedlabel read event-list 1 0 Verify "EventList" contains a list of supported events. for this cluster the list SHALL be empty(0 entries) on the TH(Chip-tool) Log: - 1676374181.204773][11726:11728] CHIP:DMG: } [1676374181.204925][11726:11728] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0040 Attribute 0x0000_FFFA DataVersion: 1038008956 [1676374181.204971][11726:11728] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLABEL.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -131,6 +130,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -150,7 +150,7 @@ tests: [1651124239.450713][2392:2397] CHIP:EM: Sending Standalone Ack for MessageCounter:5032784 on exchange 23524i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLABEL.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -158,6 +158,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -177,7 +178,7 @@ tests: [1651124266.980897][2527:2532] CHIP:EM: Sending Standalone Ack for MessageCounter:11345894 on exchange 5110i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLABEL.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_FLDCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_FLDCONC_1_1.yaml index c55f58614d0f2a..b64b3feee7a915 100644 --- a/src/app/tests/suites/certification/Test_TC_FLDCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_FLDCONC_1_1.yaml @@ -313,16 +313,93 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool formaldehydeconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that theAttributeList attribute contains + - Mandatory entries:0x0009,0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000,0x0001.0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x000a + + [1685960397.210408][11541:11543] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042B Attribute 0x0000_FFFB DataVersion: 41919546 + [1687332771.911694][4110:4112] CHIP:TOO: AttributeList: 17 entries + [1687332771.911766][4110:4112] CHIP:TOO: [1]: 0 + [1687332771.911827][4110:4112] CHIP:TOO: [2]: 1 + [1687332771.911884][4110:4112] CHIP:TOO: [3]: 2 + [1687332771.911940][4110:4112] CHIP:TOO: [4]: 3 + [1687332771.911997][4110:4112] CHIP:TOO: [5]: 4 + [1687332771.912053][4110:4112] CHIP:TOO: [6]: 5 + [1687332771.912109][4110:4112] CHIP:TOO: [7]: 6 + [1687332771.912165][4110:4112] CHIP:TOO: [8]: 7 + [1687332771.912223][4110:4112] CHIP:TOO: [9]: 8 + [1687332771.912279][4110:4112] CHIP:TOO: [10]: 9 + [1687332771.912337][4110:4112] CHIP:TOO: [11]: 10 + [1687332771.912395][4110:4112] CHIP:TOO: [12]: 65528 + [1687332771.912453][4110:4112] CHIP:TOO: [13]: 65529 + [1687332771.912511][4110:4112] CHIP:TOO: [14]: 65530 + [1687332771.912569][4110:4112] CHIP:TOO: [15]: 65531 + [1687332771.912626][4110:4112] CHIP:TOO: [16]: 65532 + [1687332771.912683][4110:4112] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" - PICS: PICS_EVENT_LIST_ENABLED response: value: [] constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool formaldehydeconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960313.959334][11536:11538] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042B Attribute 0x0000_FFFA DataVersion: 41919546 + [1685960313.959445][11536:11538] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,6 +407,33 @@ tests: constraints: type: list + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool formaldehydeconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960703.799496][11550:11552] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042B Attribute 0x0000_FFF9 DataVersion: 41919546 + [1685960703.799652][11550:11552] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 7: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" @@ -337,3 +441,30 @@ tests: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool formaldehydeconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685960779.325075][11556:11558] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042B Attribute 0x0000_FFF8 DataVersion: 41919546 + [1685960779.325258][11556:11558] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_FLW_1_1.yaml b/src/app/tests/suites/certification/Test_TC_FLW_1_1.yaml index cc69776a03ee47..2ae4c280ed81c6 100644 --- a/src/app/tests/suites/certification/Test_TC_FLW_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_FLW_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: Read the global attribute: ClusterRevision" - PICS: FLW.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: Read the global attribute: FeatureMap" - PICS: FLW.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: Read the global attribute: AttributeList" - PICS: PICS_EVENT_LIST_ENABLED && FLW.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -59,7 +57,7 @@ tests: contains: [0, 1, 2, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED && FLW.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -68,7 +66,7 @@ tests: contains: [0, 1, 2, 65528, 65529, 65531, 65532, 65533] - label: "Step 4b: Read the optional attribute(Tolerance) in AttributeList" - PICS: FLW.S.A0003 && FLW.S.Afffb + PICS: FLW.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -108,7 +106,7 @@ tests: [1676283744.634854][6703:6705] CHIP:EM: <<< [E:1353i M:55876299 (Ack:134302507)] (S) Msg TX to 1:00000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLW.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -117,24 +115,26 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool flowmeasurement read event-list 1 1 Verify "EventList " consists the list of supported events, Also verify that the DUT response with an empty list (0 entries) if there is no events on the TH(Chip-tool) Log: - [1676363157.137814][9032:9034] CHIP:DMG: } [1676363157.137855][9032:9034] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0404 Attribute 0x0000_FFFA DataVersion: 2916521407 [1676363157.137868][9032:9034] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLW.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -142,6 +142,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 6: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped @@ -162,7 +163,7 @@ tests: [1676360099.159185][8526:8528] CHIP:TOO: AcceptedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLW.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -170,6 +171,7 @@ tests: - name: "expectedValue" value: "y" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) @@ -189,7 +191,7 @@ tests: [1676360138.548281][8539:8541] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && FLW.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_GRPKEY_1_1.yaml b/src/app/tests/suites/certification/Test_TC_GRPKEY_1_1.yaml index 4f9f2db080c1c3..bbc25e6b518983 100644 --- a/src/app/tests/suites/certification/Test_TC_GRPKEY_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_GRPKEY_1_1.yaml @@ -125,6 +125,35 @@ tests: constraints: type: list + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool groupkeymanagement read event-list 1 0 + + Verify "EventList" contains the list of supported events, for this cluster list is empty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1689923450.468055][6130:6132] CHIP:DMG: } + [1689923450.468251][6130:6132] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_FFFA DataVersion: 4114127542 + [1689923450.468339][6130:6132] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional values in the standard or scoped range: diff --git a/src/app/tests/suites/certification/Test_TC_G_2_3.yaml b/src/app/tests/suites/certification/Test_TC_G_2_3.yaml index b1549332c0c3ac..316409e16ae96f 100644 --- a/src/app/tests/suites/certification/Test_TC_G_2_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_G_2_3.yaml @@ -14,7 +14,7 @@ # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default name: - 125.2.3. [TC-G-2.3] Commands - GetGroupMembership, AddGroupIfIdentifying + 131.2.3. [TC-G-2.3] Commands - GetGroupMembership, AddGroupIfIdentifying [DUT-Server] PICS: @@ -44,93 +44,452 @@ tests: [1683802556.948520][41067:41069] CHIP:TOO: MaxGroupsPerFabric: 12 disabled: true - - label: | - Pre-Conditions: If maxgroups>0, proceed with the following steps + - label: + "Step 1a: TH sends KeySetWrite command in the GroupKeyManagement + cluster to DUT on EP0 using a key that is pre-installed on the TH. + GroupKeySet fields are as follows: GroupKeySetID: 1 + GroupKeySecurityPolicy: TrustFirst (0) EpochKey0: + d0d1d2d3d4d5d6d7d8d9dadbdcdddedf EpochStartTime0: 2220000 EpochKey1: + d1d1d2d3d4d5d6d7d8d9dadbdcdddedf EpochStartTime1: 2220001 EpochKey2: + d2d1d2d3d4d5d6d7d8d9dadbdcdddedf EpochStartTime2: 2220002" + verification: | + ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID": 1, "groupKeySecurityPolicy": 0, "epochKey0": + "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime0": 2220000,"epochKey1": + "d1d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime1": 2220001,"epochKey2": + "d2d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime2": 2220002 }' 1 0 - TH generates fabric-unique GroupID, GroupName, random key, EpochKey0 - and GroupKeySetID. + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - TH generates an EpochKey and saves as epoch_key_set1_epoch0 + [1658316948.574526][4039:4044] CHIP:DMG: StatusIB = + [1658316948.574561][4039:4044] CHIP:DMG: { + [1658316948.574597][4039:4044] CHIP:DMG: status = 0x00 (SUCCESS), + [1658316948.574632][4039:4044] CHIP:DMG: }, + disabled: true - TH sends a KeySetWriteCommand to the Group Key Management cluster with - the following fields set in the GroupKeySet struct: + - label: + "Step 1b: TH writes the GroupKeyMap attribute in the + GroupKeyManagement cluster of DUT on EP0 with maxgroups entries + binding GroupId(0x0002 to (maxgroups+1)) with GroupKeySetID 1" + verification: | + ./chip-tool groupkeymanagement write group-key-map '[{"groupId":2, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 3, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":4, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 5, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":6, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 7, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":8, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":9, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 10, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":11, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 12, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":13, "groupKeySetID": 1, "fabricIndex": 1}]' 1 0 + + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1686812343.318310][10080:10082] CHIP:DMG: WriteResponseMessage = + [1686812343.318313][10080:10082] CHIP:DMG: { + [1686812343.318316][10080:10082] CHIP:DMG: AttributeStatusIBs = + [1686812343.318321][10080:10082] CHIP:DMG: [ + [1686812343.318323][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318327][10080:10082] CHIP:DMG: { + [1686812343.318330][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318335][10080:10082] CHIP:DMG: { + [1686812343.318339][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318342][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318346][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318348][10080:10082] CHIP:DMG: } + [1686812343.318353][10080:10082] CHIP:DMG: + [1686812343.318356][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318360][10080:10082] CHIP:DMG: { + [1686812343.318363][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318366][10080:10082] CHIP:DMG: }, + [1686812343.318369][10080:10082] CHIP:DMG: + [1686812343.318372][10080:10082] CHIP:DMG: }, + [1686812343.318378][10080:10082] CHIP:DMG: + [1686812343.318381][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318383][10080:10082] CHIP:DMG: { + [1686812343.318385][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318390][10080:10082] CHIP:DMG: { + [1686812343.318394][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318397][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318401][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318404][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318408][10080:10082] CHIP:DMG: } + [1686812343.318413][10080:10082] CHIP:DMG: + [1686812343.318415][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318418][10080:10082] CHIP:DMG: { + [1686812343.318421][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318424][10080:10082] CHIP:DMG: }, + [1686812343.318427][10080:10082] CHIP:DMG: + [1686812343.318429][10080:10082] CHIP:DMG: }, + [1686812343.318436][10080:10082] CHIP:DMG: + [1686812343.318438][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318442][10080:10082] CHIP:DMG: { + [1686812343.318444][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318447][10080:10082] CHIP:DMG: { + [1686812343.318450][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318453][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318457][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318460][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318464][10080:10082] CHIP:DMG: } + [1686812343.318468][10080:10082] CHIP:DMG: + [1686812343.318471][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318476][10080:10082] CHIP:DMG: { + [1686812343.318478][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318482][10080:10082] CHIP:DMG: }, + [1686812343.318486][10080:10082] CHIP:DMG: + [1686812343.318490][10080:10082] CHIP:DMG: }, + [1686812343.318496][10080:10082] CHIP:DMG: + [1686812343.318498][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318501][10080:10082] CHIP:DMG: { + [1686812343.318504][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318507][10080:10082] CHIP:DMG: { + [1686812343.318509][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318512][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318515][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318518][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318521][10080:10082] CHIP:DMG: } + [1686812343.318525][10080:10082] CHIP:DMG: + [1686812343.318528][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318531][10080:10082] CHIP:DMG: { + [1686812343.318534][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318536][10080:10082] CHIP:DMG: }, + [1686812343.318539][10080:10082] CHIP:DMG: + [1686812343.318542][10080:10082] CHIP:DMG: }, + [1686812343.318549][10080:10082] CHIP:DMG: + [1686812343.318551][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318554][10080:10082] CHIP:DMG: { + [1686812343.318557][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318559][10080:10082] CHIP:DMG: { + [1686812343.318563][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318566][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318569][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318572][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318575][10080:10082] CHIP:DMG: } + [1686812343.318579][10080:10082] CHIP:DMG: + [1686812343.318581][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318584][10080:10082] CHIP:DMG: { + [1686812343.318587][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318591][10080:10082] CHIP:DMG: }, + [1686812343.318594][10080:10082] CHIP:DMG: + [1686812343.318597][10080:10082] CHIP:DMG: }, + [1686812343.318604][10080:10082] CHIP:DMG: + [1686812343.318606][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318609][10080:10082] CHIP:DMG: { + [1686812343.318611][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318616][10080:10082] CHIP:DMG: { + [1686812343.318618][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318623][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318627][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318629][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318632][10080:10082] CHIP:DMG: } + [1686812343.318637][10080:10082] CHIP:DMG: + [1686812343.318640][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318643][10080:10082] CHIP:DMG: { + [1686812343.318646][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318649][10080:10082] CHIP:DMG: }, + [1686812343.318652][10080:10082] CHIP:DMG: + [1686812343.318655][10080:10082] CHIP:DMG: }, + [1686812343.318662][10080:10082] CHIP:DMG: + [1686812343.318664][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318667][10080:10082] CHIP:DMG: { + [1686812343.318669][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318672][10080:10082] CHIP:DMG: { + [1686812343.318675][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318678][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318681][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318684][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318687][10080:10082] CHIP:DMG: } + [1686812343.318691][10080:10082] CHIP:DMG: + [1686812343.318694][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318697][10080:10082] CHIP:DMG: { + [1686812343.318702][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318704][10080:10082] CHIP:DMG: }, + [1686812343.318707][10080:10082] CHIP:DMG: + [1686812343.318710][10080:10082] CHIP:DMG: }, + [1686812343.318716][10080:10082] CHIP:DMG: + [1686812343.318718][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318721][10080:10082] CHIP:DMG: { + [1686812343.318724][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318728][10080:10082] CHIP:DMG: { + [1686812343.318732][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318742][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318745][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318748][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318751][10080:10082] CHIP:DMG: } + [1686812343.318755][10080:10082] CHIP:DMG: + [1686812343.318758][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318761][10080:10082] CHIP:DMG: { + [1686812343.318765][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318767][10080:10082] CHIP:DMG: }, + [1686812343.318772][10080:10082] CHIP:DMG: + [1686812343.318775][10080:10082] CHIP:DMG: }, + [1686812343.318781][10080:10082] CHIP:DMG: + [1686812343.318784][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318787][10080:10082] CHIP:DMG: { + [1686812343.318790][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318793][10080:10082] CHIP:DMG: { + [1686812343.318796][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318800][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318803][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318806][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318808][10080:10082] CHIP:DMG: } + [1686812343.318812][10080:10082] CHIP:DMG: + [1686812343.318814][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318816][10080:10082] CHIP:DMG: { + [1686812343.318819][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318821][10080:10082] CHIP:DMG: }, + [1686812343.318824][10080:10082] CHIP:DMG: + [1686812343.318829][10080:10082] CHIP:DMG: }, + [1686812343.318835][10080:10082] CHIP:DMG: + [1686812343.318837][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318841][10080:10082] CHIP:DMG: { + [1686812343.318843][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318846][10080:10082] CHIP:DMG: { + [1686812343.318849][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318852][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318855][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318859][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318861][10080:10082] CHIP:DMG: } + [1686812343.318866][10080:10082] CHIP:DMG: + [1686812343.318868][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318870][10080:10082] CHIP:DMG: { + [1686812343.318873][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318876][10080:10082] CHIP:DMG: }, + [1686812343.318881][10080:10082] CHIP:DMG: + [1686812343.318883][10080:10082] CHIP:DMG: }, + [1686812343.318890][10080:10082] CHIP:DMG: + [1686812343.318892][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318895][10080:10082] CHIP:DMG: { + [1686812343.318897][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318900][10080:10082] CHIP:DMG: { + [1686812343.318905][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318908][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318911][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318914][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318918][10080:10082] CHIP:DMG: } + [1686812343.318923][10080:10082] CHIP:DMG: + [1686812343.318926][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318928][10080:10082] CHIP:DMG: { + [1686812343.318931][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318934][10080:10082] CHIP:DMG: }, + [1686812343.318938][10080:10082] CHIP:DMG: + [1686812343.318940][10080:10082] CHIP:DMG: }, + [1686812343.318947][10080:10082] CHIP:DMG: + [1686812343.318950][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.318953][10080:10082] CHIP:DMG: { + [1686812343.318955][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.318958][10080:10082] CHIP:DMG: { + [1686812343.318961][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.318964][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.318968][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.318971][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.318974][10080:10082] CHIP:DMG: } + [1686812343.318978][10080:10082] CHIP:DMG: + [1686812343.318981][10080:10082] CHIP:DMG: StatusIB = + [1686812343.318984][10080:10082] CHIP:DMG: { + [1686812343.318987][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.318989][10080:10082] CHIP:DMG: }, + [1686812343.318993][10080:10082] CHIP:DMG: + [1686812343.318995][10080:10082] CHIP:DMG: }, + [1686812343.319001][10080:10082] CHIP:DMG: + [1686812343.319004][10080:10082] CHIP:DMG: AttributeStatusIB = + [1686812343.319007][10080:10082] CHIP:DMG: { + [1686812343.319010][10080:10082] CHIP:DMG: AttributePathIB = + [1686812343.319014][10080:10082] CHIP:DMG: { + [1686812343.319017][10080:10082] CHIP:DMG: Endpoint = 0x0, + [1686812343.319020][10080:10082] CHIP:DMG: Cluster = 0x3f, + [1686812343.319023][10080:10082] CHIP:DMG: Attribute = 0x0000_0000, + [1686812343.319026][10080:10082] CHIP:DMG: ListIndex = Null, + [1686812343.319028][10080:10082] CHIP:DMG: } + [1686812343.319032][10080:10082] CHIP:DMG: + [1686812343.319035][10080:10082] CHIP:DMG: StatusIB = + [1686812343.319040][10080:10082] CHIP:DMG: { + [1686812343.319043][10080:10082] CHIP:DMG: status = 0x00 (SUCCESS), + [1686812343.319046][10080:10082] CHIP:DMG: }, + [1686812343.319049][10080:10082] CHIP:DMG: + [1686812343.319052][10080:10082] CHIP:DMG: }, + [1686812343.319057][10080:10082] CHIP:DMG: + [1686812343.319059][10080:10082] CHIP:DMG: ], + [1686812343.319084][10080:10082] CHIP:DMG: + [1686812343.319086][10080:10082] CHIP:DMG: InteractionModelRevision = 1 + [1686812343.319088][10080:10082] CHIP:DMG: } + disabled: true - GroupKeySetId is 1 + - label: + "Step 1c: TH cleans up the groups by sending the RemoveAllGroups + command to the DUT on PIXIT.G.ENDPOINT" + verification: | + ./chip-tool groups remove-all-groups 1 0 - EpochKey0 is epoch_key_set0_epoch0 + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - GroupKeySecurityPolicy = TrustFirst (1) + [1651224377.831704][2989:2994] CHIP:DMG: StatusIB = + [1651224377.831757][2989:2994] CHIP:DMG: { + [1651224377.831812][2989:2994] CHIP:DMG: status = 0x00 (SUCCESS), + [1651224377.831866][2989:2994] CHIP:DMG: }, + disabled: true - GroupKeyMulticastPolicy = PerGroupID (0) + - label: + "Step 1d: TH sends AddGroup command to DUT on PIXIT.G.ENDPOINT as + unicast with the following fields : GroupID as 0x0002 GroupName as Gp2" + PICS: G.S.C00.Rsp && G.S.C00.Tx + verification: | + ./chip-tool groups add-group 0x0002 Gp2 1 0 - EpochStartTime0 = 0 + Verify the AddGroupResponse with following field: + Status is SUCCESS + GroupID is 0x0002 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - TH binds GroupId(0x0002 to (maxgroups+1)) with GroupKeySetID in the - GroupKeyMap attribute list on GroupKeyManagement cluster with the - values provided in the above steps + [1653552285.195099][2464:2469] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0000 + [1653552285.197783][2464:2469] CHIP:TOO: AddGroupResponse: { + [1653552285.197849][2464:2469] CHIP:TOO: status: 0 + [1653552285.197877][2464:2469] CHIP:TOO: groupId: 2 + [1653552285.197933][2464:2469] CHIP:TOO: } + disabled: true - TH binds GroupId(0x0006 to (maxgroups+1)) with GroupKeySetID in the - GroupKeyMap attribute list on GroupKeyManagement cluster with the - values provided in the above steps + - label: + "Step 2a: TH reads GroupTable attribute from the GroupKeyManagement + cluster from DUT on EP0" + PICS: GRPKEY.S.A0001 verification: | - Execute the following command in TH to generate the pre-condition step : + ./chip-tool groupkeymanagement read group-table 1 0 - ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID": 1, - "groupKeySecurityPolicy": 1, "epochKey0": - "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime0": 2220000,"epochKey1": - "d1d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime1": 2220001,"epochKey2": - "d2d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime2": 2220002 }' 1 0 + Verify the GroupTable with the following entries + GroupID is 0x0002 + If G.S.F00(GN) is true then GroupName is Gp2 , Otherwise empty on TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - Verify the "status is success" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + [1674551108.507399][20730:20732] CHIP:DMG: } + [1674551108.507695][20730:20732] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349260 + [1674551108.507745][20730:20732] CHIP:TOO: GroupTable: 1 entries + [1674551108.507824][20730:20732] CHIP:TOO: [1]: { + [1674551108.507857][20730:20732] CHIP:TOO: GroupId: 2 + [1674551108.507878][20730:20732] CHIP:TOO: Endpoints: 1 entries + [1674551108.507901][20730:20732] CHIP:TOO: [1]: 0 + [1674551108.507920][20730:20732] CHIP:TOO: GroupName: Gp2 + [1674551108.507932][20730:20732] CHIP:TOO: FabricIndex: 1 + [1674551108.507942][20730:20732] CHIP:TOO: } + disabled: true - [1658316948.574526][4039:4044] CHIP:DMG: StatusIB = - [1658316948.574561][4039:4044] CHIP:DMG: { - [1658316948.574597][4039:4044] CHIP:DMG: status = 0x00 (SUCCESS), - [1658316948.574632][4039:4044] CHIP:DMG: }, + - label: + "Step 3: TH sends AddGroup command to DUT on PIXIT.G.ENDPOINT as + unicast with the following fields : GroupID as 0x0003 GroupName as Gp3" + PICS: G.S.C00.Rsp && G.S.C00.Tx + verification: | + ./chip-tool groups add-group 0x0003 Gp3 1 0 + + Verify the AddGroupResponse with following field: + Status is SUCCESS + GroupID is 0x0003 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1674551134.645686][20738:20740] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0004 Command=0x0000_0000 + [1674551134.645698][20738:20740] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0000 + [1674551134.645709][20738:20740] CHIP:TOO: AddGroupResponse: { + [1674551134.645714][20738:20740] CHIP:TOO: status: 0 + [1674551134.645717][20738:20740] CHIP:TOO: groupID: 3 + [1674551134.645719][20738:20740] CHIP:TOO: } + disabled: true + + - label: + "Step 4a: TH reads GroupTable attribute from the GroupKeyManagement + cluster from DUT on EP0" + PICS: GRPKEY.S.A0001 + verification: | + ./chip-tool groupkeymanagement read group-table 1 0 + + Verify the GroupTable with following entries + GroupID as 0x0003 + If G.S.F00(GN) is true then GroupName as Gp3, Otherwise empty on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1674551165.827036][20746:20748] CHIP:DMG: } + [1674551165.827146][20746:20748] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349260 + [1674551165.827163][20746:20748] CHIP:TOO: GroupTable: 2 entries + [1674551165.827176][20746:20748] CHIP:TOO: [1]: { + [1674551165.827182][20746:20748] CHIP:TOO: GroupId: 2 + [1674551165.827186][20746:20748] CHIP:TOO: Endpoints: 1 entries + [1674551165.827191][20746:20748] CHIP:TOO: [1]: 0 + [1674551165.827194][20746:20748] CHIP:TOO: GroupName: Gp2 + [1674551165.827197][20746:20748] CHIP:TOO: FabricIndex: 1 + [1674551165.827200][20746:20748] CHIP:TOO: } + [1674551165.827205][20746:20748] CHIP:TOO: [2]: { + [1674551165.827208][20746:20748] CHIP:TOO: GroupId: 3 + [1674551165.827211][20746:20748] CHIP:TOO: Endpoints: 1 entries + [1674551165.827214][20746:20748] CHIP:TOO: [1]: 0 + [1674551165.827217][20746:20748] CHIP:TOO: GroupName: Gp3 + [1674551165.827219][20746:20748] CHIP:TOO: FabricIndex: 1 + [1674551165.827222][20746:20748] CHIP:TOO: } + disabled: true + + - label: + "Step 5: TH sends GetGroupMembership command to DUT on + PIXIT.G.ENDPOINT with the following fields : GroupList as NULL" + PICS: G.S.C02.Rsp && G.S.C02.Tx + verification: | + ./chip-tool groups get-group-membership [] 1 0 + + Verify the GetGroupMembershipResponse with following fields: + Capacity is in the range of 0 to 254 or null + GroupList is in the range of 0x0001 - 0xffff and contains a group ID's which all are associated with endpoint 0 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1653552493.052711][2501:2506] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0002 + [1653552493.052792][2501:2506] CHIP:TOO: GetGroupMembershipResponse: { + [1653552493.052819][2501:2506] CHIP:TOO: capacity: null + [1653552493.052870][2501:2506] CHIP:TOO: groupList: 2 entries + [1653552493.052922][2501:2506] CHIP:TOO: [1]: 2 + [1653552493.052950][2501:2506] CHIP:TOO: [2]: 3 + [1653552493.052978][2501:2506] CHIP:TOO: } + disabled: true + + - label: + "Step 6: TH sends GetGroupMembership command to DUT on + PIXIT.G.ENDPOINT with the following fields : GroupList as [0x0002]" + PICS: G.S.C02.Rsp && G.S.C02.Tx + verification: | + ./chip-tool groups get-group-membership [2] 1 0 + + Verify the GetGroupMembershipResponse with following fields: + Capacity is in the range of 0 to 254 or null + GroupList contains one group as 0x0002 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - Before adding the Groups by AddGroup execute below command - - ./chip-tool groupkeymanagement write group-key-map '[{"groupId":2, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 3, "groupKeySetID": 1,"fabricIndex": 1} ]' 1 0 - - Verify the "status is success" on the TH Log and below is the sample log provided for the raspi platform: - - [1662655615.539611][229172:229177] CHIP:DMG: AttributeStatusIB = - [1662655615.539623][229172:229177] CHIP:DMG: { - [1662655615.539633][229172:229177] CHIP:DMG: AttributePathIB = - [1662655615.539642][229172:229177] CHIP:DMG: { - [1662655615.539648][229172:229177] CHIP:DMG: Endpoint = 0x0, - [1662655615.539664][229172:229177] CHIP:DMG: Cluster = 0x3f, - [1662655615.539677][229172:229177] CHIP:DMG: Attribute = 0x0000_0000, - [1662655615.539688][229172:229177] CHIP:DMG: ListIndex = Null, - [1662655615.539693][229172:229177] CHIP:DMG: } - [1662655615.539707][229172:229177] CHIP:DMG: - [1662655615.539715][229172:229177] CHIP:DMG: StatusIB = - [1662655615.539729][229172:229177] CHIP:DMG: { - [1662655615.539737][229172:229177] CHIP:DMG: status = 0x00 (SUCCESS), - [1662655615.539743][229172:229177] CHIP:DMG: }, - [1662655615.539753][229172:229177] CHIP:DMG: - [1662655615.539766][229172:229177] CHIP:DMG: }, - [1662655615.539781][229172:229177] CHIP:DMG: - [1662655615.539792][229172:229177] CHIP:DMG: AttributeStatusIB = - [1662655615.539802][229172:229177] CHIP:DMG: { - [1662655615.539810][229172:229177] CHIP:DMG: AttributePathIB = - [1662655615.539816][229172:229177] CHIP:DMG: { - [1662655615.539834][229172:229177] CHIP:DMG: Endpoint = 0x0, - [1662655615.539844][229172:229177] CHIP:DMG: Cluster = 0x3f, - [1662655615.539851][229172:229177] CHIP:DMG: Attribute = 0x0000_0000, - [1662655615.539858][229172:229177] CHIP:DMG: ListIndex = Null, - [1662655615.539864][229172:229177] CHIP:DMG: } - [1662655615.539877][229172:229177] CHIP:DMG: - [1662655615.539885][229172:229177] CHIP:DMG: StatusIB = - [1662655615.539896][229172:229177] CHIP:DMG: { - [1662655615.539904][229172:229177] CHIP:DMG: status = 0x00 (SUCCESS), - [1662655615.539910][229172:229177] CHIP:DMG: }, - - Before adding the Groups(0x0006 to Maxgroup) by AddGroupIfIdentifying command execute this command + [1653294426.515523][3638:3643] CHIP:TOO: GetGroupMembershipResponse: { + [1653294426.515571][3638:3643] CHIP:TOO: capacity: null + [1653294426.515649][3638:3643] CHIP:TOO: groupList: 1 entries + [1653294426.515737][3638:3643] CHIP:TOO: [1]: 2 + [1653294426.515916][3638:3643] CHIP:TOO: } + disabled: true + + - label: + "Step 7: TH sends GetGroupMembership command to DUT on + PIXIT.G.ENDPOINT as unicast with the following fields : GroupList as + [0x0002, 0x0003]" + PICS: G.S.C02.Rsp && G.S.C02.Tx + verification: | + ./chip-tool groups get-group-membership [2,3] 1 0 + Verify the GetGroupMembershipResponse with following fields: + Capacity is in the range of 0 to 254 or null + GroupList contains two group id's (0x0002, 0x0003) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1653294490.030740][3646:3651] CHIP:TOO: GetGroupMembershipResponse: { + [1653294490.030775][3646:3651] CHIP:TOO: capacity: null + [1653294490.030838][3646:3651] CHIP:TOO: groupList: 2 entries + [1653294490.030907][3646:3651] CHIP:TOO: [1]: 2 + [1653294490.030943][3646:3651] CHIP:TOO: [2]: 3 + [1653294490.030979][3646:3651] CHIP:TOO: } + disabled: true + + - label: + "Step 8: TH sends RemoveAllGroups command to DUT on PIXIT.G.ENDPOINT + as unicast method" + PICS: G.S.C04.Rsp + verification: | + ./chip-tool groups remove-all-groups 1 0 + + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1651224377.831704][2989:2994] CHIP:DMG: StatusIB = + [1651224377.831757][2989:2994] CHIP:DMG: { + [1651224377.831812][2989:2994] CHIP:DMG: status = 0x00 (SUCCESS), + [1651224377.831866][2989:2994] CHIP:DMG: }, + disabled: true + + - label: + "Step 9a: TH writes the GroupKeyMap attribute in the + GroupKeyManagement cluster of DUT on EP0 to binds GroupId(0x0006 to + 0x0006 + maxgroups-1 ) with GroupKeySetID 1" + verification: | ./chip-tool groupkeymanagement write group-key-map '[{"groupId":6, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 7, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":8, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 9, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":10, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 11, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":12, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":13, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 14, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":15, "groupKeySetID": 1, "fabricIndex": 1},{"groupId": 16, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":17, "groupKeySetID": 1, "fabricIndex": 1}]' 1 0 - Verify the "status is success" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1683882354.197161][7723:7725] CHIP:DMG: WriteResponseMessage = [1683882354.197166][7723:7725] CHIP:DMG: { @@ -362,169 +721,14 @@ tests: [1683882354.198230][7723:7725] CHIP:DMG: } disabled: true - - label: "DUT supports Identify cluster" - verification: | - - disabled: true - - - label: - "TH sends AddGroup command to DUT as unicast with the following fields - : GroupID as 0x0002 GroupName as Gp2" - PICS: G.S.C00.Rsp && G.S.C00.Tx - verification: | - ./chip-tool groups add-group 0x0002 gp2 1 0 - - Verify the "status is SUCCESS and groupid is 0x0002" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1653552285.195099][2464:2469] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0000 - [1653552285.197783][2464:2469] CHIP:TOO: AddGroupResponse: { - [1653552285.197849][2464:2469] CHIP:TOO: status: 0 - [1653552285.197877][2464:2469] CHIP:TOO: groupId: 2 - [1653552285.197933][2464:2469] CHIP:TOO: } - disabled: true - - - label: "TH reads GroupTable attribute from the GroupKeyManagement cluster" - PICS: GRPKEY.S.A0001 - verification: | - ./chip-tool groupkeymanagement read group-table 1 0 - - Verify the "grouptable entries" , GroupID as 0x0002, GroupName as Gp2 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1674551108.507399][20730:20732] CHIP:DMG: } - [1674551108.507695][20730:20732] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349260 - [1674551108.507745][20730:20732] CHIP:TOO: GroupTable: 1 entries - [1674551108.507824][20730:20732] CHIP:TOO: [1]: { - [1674551108.507857][20730:20732] CHIP:TOO: GroupId: 2 - [1674551108.507878][20730:20732] CHIP:TOO: Endpoints: 1 entries - [1674551108.507901][20730:20732] CHIP:TOO: [1]: 0 - [1674551108.507920][20730:20732] CHIP:TOO: GroupName: gp2 - [1674551108.507932][20730:20732] CHIP:TOO: FabricIndex: 1 - [1674551108.507942][20730:20732] CHIP:TOO: } - disabled: true - - - label: - "If maxgroups > 1 TH sends AddGroup command to DUT as unicast with the - following fields : GroupID as 0x0003 GroupName as Gp3" - PICS: G.S.C00.Rsp && G.S.C00.Tx - verification: | - ./chip-tool groups add-group 0x0003 gp3 1 0 - - Verify the "status is SUCCESS and GroupID is 0x0003" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1674551134.645686][20738:20740] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0004 Command=0x0000_0000 - [1674551134.645698][20738:20740] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0000 - [1674551134.645709][20738:20740] CHIP:TOO: AddGroupResponse: { - [1674551134.645714][20738:20740] CHIP:TOO: status: 0 - [1674551134.645717][20738:20740] CHIP:TOO: groupID: 3 - [1674551134.645719][20738:20740] CHIP:TOO: } - disabled: true - - label: - "If maxgroups > 1, TH reads GroupTable attribute from the - GroupKeyManagement cluster" - PICS: GRPKEY.S.A0001 - verification: | - ./chip-tool groupkeymanagement read group-table 1 0 - - Verify the "grouptable entries" , GroupId as 0x0003 and GroupName as Gp3 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1674551165.827036][20746:20748] CHIP:DMG: } - [1674551165.827146][20746:20748] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349260 - [1674551165.827163][20746:20748] CHIP:TOO: GroupTable: 2 entries - [1674551165.827176][20746:20748] CHIP:TOO: [1]: { - [1674551165.827182][20746:20748] CHIP:TOO: GroupId: 2 - [1674551165.827186][20746:20748] CHIP:TOO: Endpoints: 1 entries - [1674551165.827191][20746:20748] CHIP:TOO: [1]: 0 - [1674551165.827194][20746:20748] CHIP:TOO: GroupName: gp2 - [1674551165.827197][20746:20748] CHIP:TOO: FabricIndex: 1 - [1674551165.827200][20746:20748] CHIP:TOO: } - [1674551165.827205][20746:20748] CHIP:TOO: [2]: { - [1674551165.827208][20746:20748] CHIP:TOO: GroupId: 3 - [1674551165.827211][20746:20748] CHIP:TOO: Endpoints: 1 entries - [1674551165.827214][20746:20748] CHIP:TOO: [1]: 0 - [1674551165.827217][20746:20748] CHIP:TOO: GroupName: gp3 - [1674551165.827219][20746:20748] CHIP:TOO: FabricIndex: 1 - [1674551165.827222][20746:20748] CHIP:TOO: } - disabled: true - - - label: - "TH sends GetGroupMembership command to DUT on PIXIT.G.ENDPOINT with - the following fields : GroupList as NULL" - PICS: G.S.C02.Rsp && G.S.C02.Tx - verification: | - ./chip-tool groups get-group-membership [] 1 0 - - Verify the "grouplist" entries are in the inclusive range of 0x0001 - 0xffff and Capacity is in the inclusive range of 0 to 254 or null - on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - - [1653552493.052711][2501:2506] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0004 Command 0x0000_0002 - [1653552493.052792][2501:2506] CHIP:TOO: GetGroupMembershipResponse: { - [1653552493.052819][2501:2506] CHIP:TOO: capacity: null - [1653552493.052870][2501:2506] CHIP:TOO: groupList: 2 entries - [1653552493.052922][2501:2506] CHIP:TOO: [1]: 2 - [1653552493.052950][2501:2506] CHIP:TOO: [2]: 3 - [1653552493.052978][2501:2506] CHIP:TOO: } - disabled: true - - - label: - "TH sends GetGroupMembership command to DUT on PIXIT.G.ENDPOINT with - the following fields : GroupList as [0x0002]" - PICS: G.S.C02.Rsp && G.S.C02.Tx - verification: | - ./chip-tool groups get-group-membership [0002] 1 0 - - Verify the "grouplist" entry has one item 0x0002 and Capacity is in the inclusive range of 0 to 254 or null - on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1653294426.515523][3638:3643] CHIP:TOO: GetGroupMembershipResponse: { - [1653294426.515571][3638:3643] CHIP:TOO: capacity: null - [1653294426.515649][3638:3643] CHIP:TOO: groupList: 1 entries - [1653294426.515737][3638:3643] CHIP:TOO: [1]: 2 - [1653294426.515916][3638:3643] CHIP:TOO: } - disabled: true - - - label: - "if maxgroups > 1, TH sends GetGroupMembership command to DUT on - PIXIT.G.ENDPOINT as unicast with the following fields : GroupList as - [0x0002, 0x0003]" - PICS: G.S.C02.Rsp && G.S.C02.Tx - verification: | - ./chip-tool groups get-group-membership [0002,0003] 1 0 - - Verify the "grouplist" entries has 2 items 0x0002 , 0x0003 and Capacity is in the inclusive range of 0 to 254 or null - on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1653294490.030740][3646:3651] CHIP:TOO: GetGroupMembershipResponse: { - [1653294490.030775][3646:3651] CHIP:TOO: capacity: null - [1653294490.030838][3646:3651] CHIP:TOO: groupList: 2 entries - [1653294490.030907][3646:3651] CHIP:TOO: [1]: 2 - [1653294490.030943][3646:3651] CHIP:TOO: [2]: 3 - [1653294490.030979][3646:3651] CHIP:TOO: } - disabled: true - - - label: "TH sends RemoveAllGroups command to DUT as unicast method" - PICS: G.S.C04.Rsp - verification: | - ./chip-tool groups remove-all-groups 1 0 - - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1651224377.831704][2989:2994] CHIP:DMG: StatusIB = - [1651224377.831757][2989:2994] CHIP:DMG: { - [1651224377.831812][2989:2994] CHIP:DMG: status = 0x00 (SUCCESS), - [1651224377.831866][2989:2994] CHIP:DMG: }, - [1651224377.832439][2989:2994] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_0004 Command=0x0000_0004 Status=0x0 - disabled: true - - - label: - "TH sends Identify command to DUT with the IdentifyTime as (0x0078) - 120 seconds" + "Step 9b: TH sends Identify command to DUT on PIXIT.I.ENDPOINT with + the IdentifyTime as (0x0078) 120 seconds" PICS: I.S.C00.Rsp verification: | ./chip-tool identify identify 0x0078 1 0 - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658306666.592846][3044:3049] CHIP:DMG: StatusIB = [1658306666.592889][3044:3049] CHIP:DMG: { @@ -532,12 +736,12 @@ tests: [1658306666.593007][3044:3049] CHIP:DMG: }, disabled: true - - label: "TH reads immediately IdentifyTime attribute from DUT" + - label: "Step 9c: TH reads immediately IdentifyTime attribute from DUT" PICS: I.S.A0000 verification: | ./chip-tool identify read identify-time 1 0 - Verify the "identifytime" attribute has a value approximately equal to 0x0078(120) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the identifyTime attribute value is equal to 0x0078(120) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1674551847.513881][20976:20978] CHIP:DMG: } [1674551847.514009][20976:20978] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0003 Attribute 0x0000_0000 DataVersion: 216654730 @@ -545,15 +749,14 @@ tests: disabled: true - label: - "If maxgroups>0, TH sends AddGroupIfIdentifying command to DUT as - unicast method with the following fields: GroupID as 0x0006 GroupName - as Gp6" + "Step 10: TH sends AddGroupIfIdentifying command to DUT on + PIXIT.G.ENDPOINT as unicast method with the following fields: GroupID + as 0x0006 GroupName as Gp6" PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0006 gp6 1 0 - - Verify the "status is SUCCESS" and GroupId is 0x0006 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + ./chip-tool groups add-group-if-identifying 0x0006 Gp6 1 0 + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1653552667.307794][2571:2576] CHIP:DMG: StatusIB = [1653552667.307831][2571:2576] CHIP:DMG: { @@ -561,12 +764,16 @@ tests: [1653552667.307922][2571:2576] CHIP:DMG: }, disabled: true - - label: "TH reads GroupTable attribute from the GroupKeyManagement cluster" + - label: + "Step 11a: TH reads GroupTable attribute from the GroupKeyManagement + cluster of DUT on EP0" PICS: GRPKEY.S.A0001 verification: | ./chip-tool groupkeymanagement read group-table 1 0 - Verify "group table" entry has groupid 6, GroupName Gp6 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the GroupTable with following entries: + GroupID as 0x0006 + If G.S.F00(GN) is true then GroupName is Gp6, Otherwise empty on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1674551848.294776][20985:20987] CHIP:DMG: } [1674551848.294875][20985:20987] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349287 @@ -575,22 +782,21 @@ tests: [1674551848.294929][20985:20987] CHIP:TOO: GroupId: 6 [1674551848.294935][20985:20987] CHIP:TOO: Endpoints: 1 entries [1674551848.294941][20985:20987] CHIP:TOO: [1]: 0 - [1674551848.294945][20985:20987] CHIP:TOO: GroupName: gp6 + [1674551848.294945][20985:20987] CHIP:TOO: GroupName: Gp6 [1674551848.294948][20985:20987] CHIP:TOO: FabricIndex: 1 [1674551848.294951][20985:20987] CHIP:TOO: } [1674551848.294982][20985:20987] CHIP:EM: <<< [E:163 disabled: true - label: - "If maxgroups>1, TH sends AddGroupIfIdentifying command to DUT as - unicast method with the following fields: GroupID as 0x0007 GroupName - as Gp7" + "Step 12: TH sends AddGroupIfIdentifying command to DUT on + PIXIT.G.ENDPOINT as unicast method with the following fields: GroupID + as 0x0007 GroupName as Gp7" PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0007 gp7 1 0 - - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + ./chip-tool groups add-group-if-identifying 0x0007 Gp7 1 0 + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658306847.237724][3125:3130] CHIP:DMG: StatusIB = [1658306847.237765][3125:3130] CHIP:DMG: { @@ -598,12 +804,16 @@ tests: [1658306847.237869][3125:3130] CHIP:DMG: }, disabled: true - - label: "TH reads GroupTable attribute from the GroupKeyManagement cluster" + - label: + "Step 13: TH reads GroupTable attribute from the GroupKeyManagement + cluster from DUT on EP0" PICS: GRPKEY.S.A0001 verification: | ./chip-tool groupkeymanagement read group-table 1 0 - Verify the "grouptable" has an entry, GroupName as Gp7 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the GroupTable with following entries: + GroupID as 0x0007 + If G.S.F00(GN) is true then GroupName as gp7, Otherwise 0 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1674551848.817117][20991:20993] CHIP:DMG: } [1674551848.817230][20991:20993] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 1314349287 @@ -612,24 +822,25 @@ tests: [1674551848.817274][20991:20993] CHIP:TOO: GroupId: 6 [1674551848.817278][20991:20993] CHIP:TOO: Endpoints: 1 entries [1674551848.817282][20991:20993] CHIP:TOO: [1]: 0 - [1674551848.817286][20991:20993] CHIP:TOO: GroupName: gp6 + [1674551848.817286][20991:20993] CHIP:TOO: GroupName: Gp6 [1674551848.817289][20991:20993] CHIP:TOO: FabricIndex: 1 [1674551848.817292][20991:20993] CHIP:TOO: } [1674551848.817297][20991:20993] CHIP:TOO: [2]: { [1674551848.817300][20991:20993] CHIP:TOO: GroupId: 7 [1674551848.817303][20991:20993] CHIP:TOO: Endpoints: 1 entries [1674551848.817306][20991:20993] CHIP:TOO: [1]: 0 - [1674551848.817309][20991:20993] CHIP:TOO: GroupName: gp7 + [1674551848.817309][20991:20993] CHIP:TOO: GroupName: Gp7 [1674551848.817312][20991:20993] CHIP:TOO: FabricIndex: 1 [1674551848.817314][20991:20993] CHIP:TOO: } disabled: true - label: - "If maxgroups > 2, TH sends AddGroupIfIdentifying command to DUT with - (maxgroups - 2) groups, incrementing the GroupId each time." + "Step 15: TH sends AddGroupIfIdentifying command to DUT + PIXIT.G.ENDPOINT with (maxgroups - 2) groups, incrementing the GroupId + each time starting from 0x0008." PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0008 gp8 1 0 + ./chip-tool groups add-group-if-identifying 0x0008 Gp8 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -638,7 +849,7 @@ tests: [1653552667.307881][2571:2576] CHIP:DMG: status = 0x00 (SUCCESS), [1653552667.307922][2571:2576] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x0009 gp9 1 0 + ./chip-tool groups add-group-if-identifying 0x0009 Gp9 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -647,7 +858,7 @@ tests: [1674551849.597998][21000:21002] CHIP:DMG: status = 0x00 (SUCCESS), [1674551849.598001][21000:21002] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x000a gp10 1 0 + ./chip-tool groups add-group-if-identifying 0x000a Gp10 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -656,7 +867,7 @@ tests: [1683882426.604691][7756:7758] CHIP:DMG: status = 0x00 (SUCCESS), [1683882426.604701][7756:7758] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x000b gp11 1 0 + ./chip-tool groups add-group-if-identifying 0x000b Gp11 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -666,7 +877,7 @@ tests: [1683882432.529538][7760:7762] CHIP:DMG: }, [1683882432.529543][7760:7762] CHIP:DMG: - ./chip-tool groups add-group-if-identifying 0x000c gp12 1 0 + ./chip-tool groups add-group-if-identifying 0x000c Gp12 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -675,7 +886,7 @@ tests: [1683882437.464940][7763:7765] CHIP:DMG: status = 0x00 (SUCCESS), [1683882437.464951][7763:7765] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x000d gp13 1 0 + ./chip-tool groups add-group-if-identifying 0x000d Gp13 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -684,7 +895,7 @@ tests: [1683882442.334915][7766:7768] CHIP:DMG: status = 0x00 (SUCCESS), [1683882442.334918][7766:7768] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x000e gp14 1 0 + ./chip-tool groups add-group-if-identifying 0x000e Gp14 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -694,17 +905,7 @@ tests: [1683882448.814371][7769:7771] CHIP:DMG: status = 0x00 (SUCCESS), [1683882448.814374][7769:7771] CHIP:DMG: }, - ./chip-tool groups add-group-if-identifying 0x000e gp15 1 0 - - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - [1683882454.216005][7772:7774] CHIP:DMG: - [1683882454.216016][7772:7774] CHIP:DMG: StatusIB = - [1683882454.216029][7772:7774] CHIP:DMG: { - [1683882454.216045][7772:7774] CHIP:DMG: status = 0x00 (SUCCESS), - [1683882454.216057][7772:7774] CHIP:DMG: }, - - ./chip-tool groups add-group-if-identifying 0x000f gp15 1 0 + ./chip-tool groups add-group-if-identifying 0x000f Gp15 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -714,7 +915,7 @@ tests: [1683882460.656737][7775:7777] CHIP:DMG: }, [1683882460.656740][7775:7777] CHIP:DMG: - ./chip-tool groups add-group-if-identifying 0x0010 gp16 1 0 + ./chip-tool groups add-group-if-identifying 0x0010 Gp16 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -724,7 +925,7 @@ tests: [1683882470.921783][7779:7781] CHIP:DMG: }, [1683882470.921787][7779:7781] CHIP:DMG: - ./chip-tool groups add-group-if-identifying 0x0011 gp17 1 0 + ./chip-tool groups add-group-if-identifying 0x0011 Gp17 1 0 Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: @@ -735,14 +936,12 @@ tests: disabled: true - label: - "TH binds GroupId( 0x0006 + maxgroups to 0x0006 + maxgroups+1) with - GroupKeySetID 1" + "Step 16a: TH binds GroupId( 0x0006 + maxgroups to 0x0006 + + maxgroups+1) with GroupKeySetID 1" verification: | - Before adding the Groups (Maxgroup+1) by AddGroupIfIdentifying execute below command which is used to check the Resource_Exhausted Condition - ./chip-tool groupkeymanagement write group-key-map '[{"groupId":18, "groupKeySetID": 1, "fabricIndex": 1},{"groupId":19, "groupKeySetID": 1, "fabricIndex": 1}]' 1 0 - Verify the "status is success" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1674551849.075921][20994:20996] CHIP:DMG: WriteResponseMessage = [1674551849.075924][20994:20996] CHIP:DMG: { @@ -805,13 +1004,13 @@ tests: disabled: true - label: - "If maxgroups>0, TH sends AddGroupIfIdentifying command to DUT - (maxgroups+2) times as unicast method with different GroupID" + "Step 16b: TH sends AddGroupIfIdentifying command to DUT + PIXIT.G.ENDPOINT once as unicast method with different GroupID" PICS: G.S.C05.Rsp verification: | ./chip-tool groups add-group-if-identifying 0x0012 gp18 1 0 - Verify the "status is RESOURCE_EXHAUSTED" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the status is RESOURCE_EXHAUSTED , when the GroupTable entries are greater than maxgroups on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658317372.589336][4296:4301] CHIP:DMG: StatusIB = [1658317372.589363][4296:4301] CHIP:DMG: { @@ -820,7 +1019,7 @@ tests: ./chip-tool groups add-group-if-identifying 0x0013 gp19 1 0 - Verify the "status is RESOURCE_EXHAUSTED" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the status is RESOURCE_EXHAUSTED , when the GroupTable entries are greater than maxgroups+1 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1683882594.518675][7824:7826] CHIP:DMG: StatusIB = [1683882594.518680][7824:7826] CHIP:DMG: { @@ -830,109 +1029,110 @@ tests: disabled: true - label: - "TH reads GroupTable attribute from the GroupKeyManagement cluster - from DUT" + "Step 17: TH reads GroupTable attribute from the GroupKeyManagement + cluster from DUT on EP0" PICS: GRPKEY.S.A0001 verification: | ./chip-tool groupkeymanagement read group-table 1 0 - Verify the "grouptable" does not have GroupName gp5 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - - 1683882614.150283][7830:7832] CHIP:DMG: } - [1683882614.150492][7830:7832] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 223017989 - [1683882614.150539][7830:7832] CHIP:TOO: GroupTable: 12 entries - [1683882614.150552][7830:7832] CHIP:TOO: [1]: { - [1683882614.150555][7830:7832] CHIP:TOO: GroupId: 6 - [1683882614.150559][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150565][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150571][7830:7832] CHIP:TOO: GroupName: gp6 - [1683882614.150575][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150579][7830:7832] CHIP:TOO: } - [1683882614.150587][7830:7832] CHIP:TOO: [2]: { - [1683882614.150590][7830:7832] CHIP:TOO: GroupId: 7 - [1683882614.150595][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150600][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150604][7830:7832] CHIP:TOO: GroupName: gp7 - [1683882614.150607][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150610][7830:7832] CHIP:TOO: } - [1683882614.150618][7830:7832] CHIP:TOO: [3]: { - [1683882614.150621][7830:7832] CHIP:TOO: GroupId: 8 - [1683882614.150626][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150630][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150634][7830:7832] CHIP:TOO: GroupName: gp8 - [1683882614.150638][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150641][7830:7832] CHIP:TOO: } - [1683882614.150647][7830:7832] CHIP:TOO: [4]: { - [1683882614.150651][7830:7832] CHIP:TOO: GroupId: 9 - [1683882614.150654][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150658][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150662][7830:7832] CHIP:TOO: GroupName: gp9 - [1683882614.150665][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150668][7830:7832] CHIP:TOO: } - [1683882614.150675][7830:7832] CHIP:TOO: [5]: { - [1683882614.150678][7830:7832] CHIP:TOO: GroupId: 10 - [1683882614.150681][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150684][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150687][7830:7832] CHIP:TOO: GroupName: gp10 - [1683882614.150691][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150694][7830:7832] CHIP:TOO: } - [1683882614.150701][7830:7832] CHIP:TOO: [6]: { - [1683882614.150703][7830:7832] CHIP:TOO: GroupId: 11 - [1683882614.150706][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150710][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150712][7830:7832] CHIP:TOO: GroupName: gp11 - [1683882614.150715][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150717][7830:7832] CHIP:TOO: } - [1683882614.150722][7830:7832] CHIP:TOO: [7]: { - [1683882614.150725][7830:7832] CHIP:TOO: GroupId: 12 - [1683882614.150728][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150731][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150734][7830:7832] CHIP:TOO: GroupName: gp12 - [1683882614.150736][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150739][7830:7832] CHIP:TOO: } - [1683882614.150744][7830:7832] CHIP:TOO: [8]: { - [1683882614.150746][7830:7832] CHIP:TOO: GroupId: 13 - [1683882614.150749][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150752][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150755][7830:7832] CHIP:TOO: GroupName: gp13 - [1683882614.150759][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150762][7830:7832] CHIP:TOO: } - [1683882614.150767][7830:7832] CHIP:TOO: [9]: { - [1683882614.150770][7830:7832] CHIP:TOO: GroupId: 14 - [1683882614.150773][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150776][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150779][7830:7832] CHIP:TOO: GroupName: gp15 - [1683882614.150781][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150784][7830:7832] CHIP:TOO: } - [1683882614.150789][7830:7832] CHIP:TOO: [10]: { - [1683882614.150791][7830:7832] CHIP:TOO: GroupId: 15 - [1683882614.150795][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150798][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150801][7830:7832] CHIP:TOO: GroupName: gp15 - [1683882614.150803][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150806][7830:7832] CHIP:TOO: } - [1683882614.150811][7830:7832] CHIP:TOO: [11]: { - [1683882614.150813][7830:7832] CHIP:TOO: GroupId: 16 - [1683882614.150816][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150820][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150822][7830:7832] CHIP:TOO: GroupName: gp16 - [1683882614.150825][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150827][7830:7832] CHIP:TOO: } - [1683882614.150832][7830:7832] CHIP:TOO: [12]: { - [1683882614.150835][7830:7832] CHIP:TOO: GroupId: 17 - [1683882614.150838][7830:7832] CHIP:TOO: Endpoints: 1 entries - [1683882614.150841][7830:7832] CHIP:TOO: [1]: 0 - [1683882614.150844][7830:7832] CHIP:TOO: GroupName: gp17 - [1683882614.150847][7830:7832] CHIP:TOO: FabricIndex: 1 - [1683882614.150850][7830:7832] CHIP:TOO: } + Verify the GroupTable does not contains GroupId:18 (0x0006 + maxgroups), GroupId:19 (0x0006 + maxgroups+1) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1686812678.453900][10243:10245] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 3227568214 + [1686812678.453954][10243:10245] CHIP:TOO: GroupTable: 12 entries + [1686812678.453970][10243:10245] CHIP:TOO: [1]: { + [1686812678.453975][10243:10245] CHIP:TOO: GroupId: 6 + [1686812678.453980][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.453984][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.453989][10243:10245] CHIP:TOO: GroupName: Gp6 + [1686812678.453992][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.453996][10243:10245] CHIP:TOO: } + [1686812678.454001][10243:10245] CHIP:TOO: [2]: { + [1686812678.454004][10243:10245] CHIP:TOO: GroupId: 7 + [1686812678.454006][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454009][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454012][10243:10245] CHIP:TOO: GroupName: Gp7 + [1686812678.454014][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454017][10243:10245] CHIP:TOO: } + [1686812678.454022][10243:10245] CHIP:TOO: [3]: { + [1686812678.454024][10243:10245] CHIP:TOO: GroupId: 8 + [1686812678.454027][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454030][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454033][10243:10245] CHIP:TOO: GroupName: Gp8 + [1686812678.454034][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454037][10243:10245] CHIP:TOO: } + [1686812678.454042][10243:10245] CHIP:TOO: [4]: { + [1686812678.454044][10243:10245] CHIP:TOO: GroupId: 9 + [1686812678.454047][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454050][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454052][10243:10245] CHIP:TOO: GroupName: Gp9 + [1686812678.454055][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454057][10243:10245] CHIP:TOO: } + [1686812678.454061][10243:10245] CHIP:TOO: [5]: { + [1686812678.454064][10243:10245] CHIP:TOO: GroupId: 10 + [1686812678.454066][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454069][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454072][10243:10245] CHIP:TOO: GroupName: Gp10 + [1686812678.454075][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454077][10243:10245] CHIP:TOO: } + [1686812678.454082][10243:10245] CHIP:TOO: [6]: { + [1686812678.454085][10243:10245] CHIP:TOO: GroupId: 11 + [1686812678.454088][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454090][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454093][10243:10245] CHIP:TOO: GroupName: Gp11 + [1686812678.454095][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454098][10243:10245] CHIP:TOO: } + [1686812678.454103][10243:10245] CHIP:TOO: [7]: { + [1686812678.454106][10243:10245] CHIP:TOO: GroupId: 12 + [1686812678.454108][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454111][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454113][10243:10245] CHIP:TOO: GroupName: Gp12 + [1686812678.454116][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454118][10243:10245] CHIP:TOO: } + [1686812678.454123][10243:10245] CHIP:TOO: [8]: { + [1686812678.454125][10243:10245] CHIP:TOO: GroupId: 13 + [1686812678.454127][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454130][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454133][10243:10245] CHIP:TOO: GroupName: Gp13 + [1686812678.454135][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454138][10243:10245] CHIP:TOO: } + [1686812678.454142][10243:10245] CHIP:TOO: [9]: { + [1686812678.454144][10243:10245] CHIP:TOO: GroupId: 14 + [1686812678.454147][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454149][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454153][10243:10245] CHIP:TOO: GroupName: Gp14 + [1686812678.454156][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454158][10243:10245] CHIP:TOO: } + [1686812678.454163][10243:10245] CHIP:TOO: [10]: { + [1686812678.454165][10243:10245] CHIP:TOO: GroupId: 15 + [1686812678.454167][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454170][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454173][10243:10245] CHIP:TOO: GroupName: Gp15 + [1686812678.454175][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454178][10243:10245] CHIP:TOO: } + [1686812678.454182][10243:10245] CHIP:TOO: [11]: { + [1686812678.454184][10243:10245] CHIP:TOO: GroupId: 16 + [1686812678.454187][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454190][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454193][10243:10245] CHIP:TOO: GroupName: Gp16 + [1686812678.454196][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454198][10243:10245] CHIP:TOO: } + [1686812678.454202][10243:10245] CHIP:TOO: [12]: { + [1686812678.454204][10243:10245] CHIP:TOO: GroupId: 17 + [1686812678.454207][10243:10245] CHIP:TOO: Endpoints: 1 entries + [1686812678.454210][10243:10245] CHIP:TOO: [1]: 0 + [1686812678.454212][10243:10245] CHIP:TOO: GroupName: Gp17 + [1686812678.454215][10243:10245] CHIP:TOO: FabricIndex: 1 + [1686812678.454217][10243:10245] CHIP:TOO: } disabled: true - - label: "TH sends RemoveAllGroups command to DUT as unicast method" + - label: + "Step 18: TH sends RemoveAllGroups command to DUT on PIXIT.G.ENDPOINT + as unicast method" PICS: G.S.C04.Rsp verification: | ./chip-tool groups remove-all-groups 1 0 - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1651224377.831704][2989:2994] CHIP:DMG: StatusIB = [1651224377.831757][2989:2994] CHIP:DMG: { @@ -942,13 +1142,14 @@ tests: disabled: true - label: - "TH sends AddGroupIfIdentifying command to DUT as unicast method with - the following fields: GroupID as 0x0000 GroupName as Gp45" + "Step 19: TH sends AddGroupIfIdentifying command to DUT on + PIXIT.G.ENDPOINT as unicast method with the following fields: GroupID + as 0x0000 GroupName as Gp45" PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0000 gp45 1 0 + ./chip-tool groups add-group-if-identifying 0x0000 Gp45 1 0 - Verify the "status is CONSTRAINT_ERROR" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the status is CONSTRAINT_ERROR (when GroupId is not in the inclusive range of 0x0001 to 0xffff) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658307266.719438][3251:3256] CHIP:DMG: StatusIB = [1658307266.719482][3251:3256] CHIP:DMG: { @@ -957,13 +1158,14 @@ tests: disabled: true - label: - "TH sends AddGroupIfIdentifying command to DUT as unicast method with - the following fields: GroupId as 0x0046 GroupName as Gp46" + "Step 20: TH sends AddGroupIfIdentifying command to DUT on + PIXIT.G.ENDPOINT as unicast method with the following fields: GroupId + as 0x0046 GroupName as Gp46" PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0046 gp46 1 0 + ./chip-tool groups add-group-if-identifying 0x0046 Gp46 1 0 - Verify the "status is UNSUPPORTED_ACCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the status is UNSUPPORTED_ACCESS (GroupId in the AddGroupIfIdentifying command does not have the security key) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658307298.568727][3257:3262] CHIP:DMG: StatusIB = [1658307298.568761][3257:3262] CHIP:DMG: { @@ -972,13 +1174,13 @@ tests: disabled: true - label: - "TH sends Identify command to DUT with the IdentifyTime as 0x0000 - (stop identifying)" + "Step 21a: TH sends Identify command to DUT on PIXIT.I.ENDPOINT with + the IdentifyTime as 0x0000 (stop identifying)" PICS: I.S.C00.Rsp verification: | ./chip-tool identify identify 0x0000 1 0 - Verify the "status is SUCCESS" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the status is SUCCESS on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658307387.097433][3268:3273] CHIP:DMG: StatusIB = [1658307387.097464][3268:3273] CHIP:DMG: { @@ -986,25 +1188,26 @@ tests: [1658307387.097533][3268:3273] CHIP:DMG: }, disabled: true - - label: "TH reads immediately IdentifyTime attribute from DUT" + - label: "Step 21b: TH reads immediately IdentifyTime attribute from DUT" PICS: I.S.A0000 verification: | ./chip-tool identify read identify-time 1 0 - Verify the "identify time" attribute value is 0x0000 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the IdentifyTime attribute value is 0x0000 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658307393.820520][3274:3279] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0003 Attribute 0x0000_0000 DataVersion: 3871913767 [1658307393.820575][3274:3279] CHIP:TOO: identify time: 0 disabled: true - label: - "TH sends AddGroupIfIdentifying command to DUT as unicast method with - the following fields: GroupId as 0x0004 GroupName as Gp4" + "Step 22: TH sends AddGroupIfIdentifying command to DUT on + PIXIT.G.ENDPOINT as unicast method with the following fields: GroupId + as 0x0004 GroupName as Gp4" PICS: G.S.C05.Rsp verification: | - ./chip-tool groups add-group-if-identifying 0x0004 gp4 1 0 + ./chip-tool groups add-group-if-identifying 0x0004 Gp4 1 0 - Verify the "status is SUCCESS" , GroupId is 0x0004 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify DUT responds with SUCCESS status response on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1651224746.146005][3038:3043] CHIP:DMG: StatusIB = [1651224746.146038][3038:3043] CHIP:DMG: { @@ -1012,12 +1215,14 @@ tests: [1651224746.146106][3038:3043] CHIP:DMG: }, disabled: true - - label: "TH reads GroupTable attribute from the GroupKeyManagement cluster" + - label: + "Step 23: TH reads GroupTable attribute from the GroupKeyManagement + cluster of DUT on EP0" PICS: GRPKEY.S.A0001 verification: | ./chip-tool groupkeymanagement read group-table 1 0 - Verify the "grouptable entries is 0" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify the GroupId 0x0004 is not added in GroupTable entries on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: [1658317914.656772][4650:4655] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 3844079664 [1658317914.656843][4650:4655] CHIP:TOO: GroupTable: 0 entries diff --git a/src/app/tests/suites/certification/Test_TC_HEPAFREMON_1_1.yaml b/src/app/tests/suites/certification/Test_TC_HEPAFREMON_1_1.yaml index 04db88ae83189b..267e5c7e4dbd3f 100644 --- a/src/app/tests/suites/certification/Test_TC_HEPAFREMON_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_HEPAFREMON_1_1.yaml @@ -143,7 +143,50 @@ tests: type: list contains: [5] - - label: "Step 5: TH reads EventList attribute from DUT" + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4f: TH reads from the DUT the AttributeList attribute. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.TThe list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool hepafiltermonitoring read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0002,0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0003 + - Based on feature support:- 0x0000, 0x0001 + + [1690183725.059324][8158:8160] CHIP:TOO: AttributeList: 12 entries + [1690183725.059384][8158:8160] CHIP:TOO: [1]: 0 + [1690183725.059436][8158:8160] CHIP:TOO: [2]: 1 + [1690183725.059487][8158:8160] CHIP:TOO: [3]: 2 + [1690183725.059536][8158:8160] CHIP:TOO: [4]: 3 + [1690183725.059584][8158:8160] CHIP:TOO: [5]: 4 + [1690183725.059633][8158:8160] CHIP:TOO: [6]: 5 + [1690183725.059683][8158:8160] CHIP:TOO: [7]: 65528 + [1690183725.059732][8158:8160] CHIP:TOO: [8]: 65529 + [1690183725.059780][8158:8160] CHIP:TOO: [9]: 65530 + [1690183725.059829][8158:8160] CHIP:TOO: [10]: 65531 + [1690183725.059878][8158:8160] CHIP:TOO: [11]: 65532 + [1690183725.059927][8158:8160] CHIP:TOO: [12]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: TH reads EventList attribute from DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" @@ -152,6 +195,34 @@ tests: constraints: type: list + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool hepafiltermonitoring read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685962407.372836][11665:11667] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0071 Attribute 0x0000_FFFA DataVersion: 1815992336 + [1685962407.372946][11665:11667] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" @@ -160,6 +231,34 @@ tests: type: list contains: [] + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool hepafiltermonitoring read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685962490.529022][11669:11671] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0071 Attribute 0x0000_FFF9 DataVersion: 1815992336 + [1685962490.529297][11669:11671] CHIP:TOO: AcceptedCommandList: 0 entries + [1690183785.805331][8169:8171] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList" @@ -171,10 +270,37 @@ tests: type: list contains: [0] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + # List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool hepafiltermonitoring read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685962569.646786][11676:11678] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0071 Attribute 0x0000_FFF8 DataVersion: 1815992336 + [1685962569.646938][11676:11678] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_ICDM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ICDM_1_1.yaml old mode 100644 new mode 100755 index 599e081a2b1c28..20924a25cae7b0 --- a/src/app/tests/suites/certification/Test_TC_ICDM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ICDM_1_1.yaml @@ -31,7 +31,7 @@ tests: - name: "nodeId" value: nodeId - - label: "Step 2: Read the global attribute: ClusterRevision" + - label: "Step 2: TH reads ClusterRevision attribute from DUT" command: "readAttribute" attribute: "ClusterRevision" response: @@ -39,7 +39,7 @@ tests: constraints: type: int16u - - label: "Step 3: Read the global attribute: FeatureMap" + - label: "Step 3: TH reads FeatureMap attribute from DUT" PICS: ICDM.S.F00 command: "readAttribute" attribute: "FeatureMap" @@ -48,7 +48,7 @@ tests: constraints: type: bitmap32 - - label: "Step 3: Read the global attribute: FeatureMap" + - label: "Step 3: TH reads FeatureMap attribute from DUT" PICS: " !ICDM.S.F00 " command: "readAttribute" attribute: "FeatureMap" @@ -57,7 +57,7 @@ tests: constraints: type: bitmap32 - - label: "Step 4a: Read the global attribute: AttributeList" + - label: "Step 4a: TH reads AttributeList attribute from DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" @@ -66,7 +66,7 @@ tests: type: list contains: [0, 1, 2, 65528, 65529, 65530, 65531, 65532, 65533] - - label: "Step 4a: Read the global attribute: AttributeList" + - label: "Step 4a: TH reads AttributeList attribute from DUT" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" @@ -106,7 +106,54 @@ tests: type: list contains: [5] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4e: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool icdmanagement read attribute-list 1 0 + + Verify " AttributeList "should include the mandatory attributes (values 0, 1, 2) and + global attributes (value 65533, 65532, 65531, 65530, 65529 and 65528) + The list include entries based on feature support: + 0x0003: SHALL be included if and only if ICDM.S.A0003(RegisteredClients) + 0x0004: SHALL be included if and only if ICDM.S.A0004(IcdCounter) + 0x0005: SHALL be included if and only if ICDM.S.A0005(ClientsSupportedPerFabric) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + + [1685123797636] [39641:392416] [TOO] Endpoint: 0 Cluster: 0x0000_0046 Attribute 0x0000_FFFB DataVersion: 93993128 + [1685123797636] [39641:392416] [TOO] AttributeList: 12 entries + [1685123797636] [39641:392416] [TOO] [1]: 0 + [1685123797636] [39641:392416] [TOO] [2]: 1 + [1685123797636] [39641:392416] [TOO] [3]: 2 + [1685123797636] [39641:392416] [TOO] [4]: 3 + [1685123797636] [39641:392416] [TOO] [5]: 4 + [1685123797637] [39641:392416] [TOO] [6]: 5 + [1685123797637] [39641:392416] [TOO] [7]: 65528 + [1685123797637] [39641:392416] [TOO] [8]: 65529 + [1685123797637] [39641:392416] [TOO] [9]: 65530 + [1685123797637] [39641:392416] [TOO] [10]: 65531 + [1685123797638] [39641:392416] [TOO] [11]: 65532 + [1685123797638] [39641:392416] [TOO] [12]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" @@ -115,7 +162,49 @@ tests: constraints: type: list - - label: "Step 6a: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool icdmanagement read event-list 1 0 + + On TH(chip-tool), Verify that the DUT response provides a list of supported events. + For this cluster the list is usually empty but it can contain manufacturer specific event IDs. + + + [1685123881696] [39723:393591] [TOO] Endpoint: 0 Cluster: 0x0000_0046 Attribute 0x0000_FFFA DataVersion: 93993128 + [1685123881696] [39723:393591] [TOO] EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: TH reads AcceptedCommandList attribute from DUT" + PICS: " !ICDM.S.F00 && !ICDM.S.C03.Rsp " + command: "readAttribute" + attribute: "AcceptedCommandList" + response: + value: [] + constraints: + type: list + + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT if + ICDM.S.F00 is true" + PICS: ICDM.S.F00 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -124,7 +213,7 @@ tests: contains: [0, 2] - label: - "Step 6b: Read the optional command (StayActiveRequest) in + "Step 6c: Read the optional command (StayActiveRequest) in AttributeList" PICS: ICDM.S.C03.Rsp command: "readAttribute" @@ -134,7 +223,40 @@ tests: type: list contains: [3] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6d: TH reads AcceptedCommandList attribute from DUT. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored.3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool icdmanagement read accepted-command-list 1 0 + + Verify the "AcceptedCommandList" contains feature dependent commands + if ICDM.S.F00(CIP) feature supports list includes(value 0x0000 and 0x02) and + The list MAY include these optional entries: + if ICDM.S.C01.Rsp(StayActiveRequest) feature supports list includes(value 0x0003) on the TH (Chip-tool) and below is the sample log provided for the raspi platform: + + [1685123917843] [39747:394032] [TOO] Endpoint: 0 Cluster: 0x0000_0046 Attribute 0x0000_FFF9 DataVersion: 93993128 + [1685123917843] [39747:394032] [TOO] AcceptedCommandList: 3 entries + [1685123917843] [39747:394032] [TOO] [1]: 0 + [1685123917844] [39747:394032] [TOO] [2]: 2 + [1685123917844] [39747:394032] [TOO] [3]: 3 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: TH reads GeneratedCommandList attribute from DUT" PICS: " !ICDM.S.F00 " command: "readAttribute" attribute: "GeneratedCommandList" @@ -143,7 +265,7 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: "Step 7a: TH reads GeneratedCommandList attribute from DUT" PICS: ICDM.S.F00 command: "readAttribute" attribute: "GeneratedCommandList" @@ -151,3 +273,32 @@ tests: constraints: type: list contains: [1] + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool icdmanagement read generated-command-list 1 0 + + Verify "GeneratedCommandList" contains feature dependent commands + if ICDM.S.F00(CIP) feature supports list includes(value 0x0001), otherwise value is 0 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + + [1685123946015] [39758:394357] [TOO] Endpoint: 0 Cluster: 0x0000_0046 Attribute 0x0000_FFF8 DataVersion: 93993128 + [1685123946015] [39758:394357] [TOO] GeneratedCommandList: 1 entries + [1685123946015] [39758:394357] [TOO] [1]: 1 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_ILL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ILL_1_1.yaml index 09237368e061f5..8ea873b567d34b 100644 --- a/src/app/tests/suites/certification/Test_TC_ILL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ILL_1_1.yaml @@ -94,7 +94,6 @@ tests: ./chip-tool illuminancemeasurement read event-list 1 1 On TH(chip-tool), Verify that the DUT response provides a list of supported events. For this cluster the list is usually empty but it can contain manufacturer specific event IDs. - [1676460615.124432][26109:26111] CHIP:DMG: } [1676460615.124515][26109:26111] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0400 Attribute 0x0000_FFFA DataVersion: 3234297781 [1676460615.124549][26109:26111] CHIP:TOO: EventList: 0 entries @@ -102,7 +101,7 @@ tests: [1676460615.124616][26109:26111] CHIP:IN: (S) Sending msg 151273397 on secure session with LSID: 46366 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_I_1_1.yaml b/src/app/tests/suites/certification/Test_TC_I_1_1.yaml index 75d3facf4851c9..fb5fb954f62b3b 100644 --- a/src/app/tests/suites/certification/Test_TC_I_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_I_1_1.yaml @@ -57,16 +57,16 @@ tests: # constraints: # type: bitmap32 - - label: "Step 4: Read the global attribute: AttributeList" + - label: "Step 4: TH reads AttributeList from DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: constraints: type: list - contains: [0, 1, 65528, 65529, 65530, 65531, 65532, 65533] + contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - - label: "Step 4: Read the global attribute: AttributeList" + - label: "Step 4: TH reads AttributeList from DUT" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" @@ -132,14 +132,13 @@ tests: verification: | ./chip-tool identify read event-list 1 1 - On TH(chip-tool) verify that the DUT response provides a list of supported events. For this cluster the list is empty - - 1676291532.905818][27664:27666] CHIP:DMG: } - [1676291532.905861][27664:27666] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0003 Attribute 0x0000_FFFA DataVersion: 4211856524 - [1676291532.905871][27664:27666] CHIP:TOO: EventList: 0 entries + On TH(chip-tool) verify that the DUT response provides a list of supported events. For this cluster the list is empty + 1676291532.905818][27664:27666] CHIP:DMG: } + [1676291532.905861][27664:27666] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0003 Attribute 0x0000_FFFA DataVersion: 4211856524 + [1676291532.905871][27664:27666] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_LTIME_1_2.yaml b/src/app/tests/suites/certification/Test_TC_LTIME_1_2.yaml index 28f870762b67c0..57fe0341318cfc 100644 --- a/src/app/tests/suites/certification/Test_TC_LTIME_1_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_LTIME_1_2.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: LTIME.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: LTIME.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -51,7 +49,7 @@ tests: maxValue: 1 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -60,7 +58,7 @@ tests: contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -71,7 +69,7 @@ tests: - label: "Step 4b: TH reads optional attribute(ActiveCalendarType) in AttributeList from DUT" - PICS: LTIME.S.Afffb && LTIME.S.A0001 + PICS: LTIME.S.A0001 command: "readAttribute" attribute: "AttributeList" response: @@ -82,7 +80,7 @@ tests: - label: "Step 4c: TH reads optional attribute(SupportedCalendarTypes) in AttributeList from DUT" - PICS: LTIME.S.Afffb && LTIME.S.A0002 + PICS: LTIME.S.A0002 command: "readAttribute" attribute: "AttributeList" response: @@ -91,7 +89,7 @@ tests: contains: [2] - label: "Step 5: TH reads EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && LTIME.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -100,7 +98,6 @@ tests: type: list - label: "Step 6: TH reads AcceptedCommandList from DUT" - PICS: LTIME.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -109,7 +106,6 @@ tests: type: list - label: "Step 7: TH reads GeneratedCommandList from DUT" - PICS: LTIME.S.Afff8 command: "readAttribute" attribute: "GeneratedCommandList" response: diff --git a/src/app/tests/suites/certification/Test_TC_LUNIT_1_2.yaml b/src/app/tests/suites/certification/Test_TC_LUNIT_1_2.yaml index d11482abdfd4c2..fa50e96346d9f3 100644 --- a/src/app/tests/suites/certification/Test_TC_LUNIT_1_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_LUNIT_1_2.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: LUNIT.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,7 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: LUNIT.S.Afffc && !LUNIT.S.F00 + PICS: " !LUNIT.S.F00 " command: "readAttribute" attribute: "FeatureMap" response: @@ -52,7 +51,7 @@ tests: - label: "Step 3: Given LUNIT.S.F00(TEMP) ensure featuremap has the correct bit set" - PICS: LUNIT.S.Afffc && LUNIT.S.F00 + PICS: LUNIT.S.F00 command: "readAttribute" attribute: "FeatureMap" response: @@ -61,7 +60,7 @@ tests: hasMasksSet: [0x1] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -70,7 +69,7 @@ tests: contains: [65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -81,7 +80,7 @@ tests: - label: "Step 4b: TH reads Feature dependent(LUNIT.S.F00) attribute in AttributeList" - PICS: LUNIT.S.Afffb && LUNIT.S.F00 + PICS: LUNIT.S.F00 command: "readAttribute" attribute: "AttributeList" response: @@ -90,7 +89,7 @@ tests: contains: [0] - label: "Step 5: TH reads EventList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -99,7 +98,6 @@ tests: type: list - label: "Step 6: TH reads AcceptedCommandList from DUT" - PICS: LUNIT.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -108,7 +106,7 @@ tests: type: list - label: "Step 7: TH reads GeneratedCommandList from DUT" - PICS: LUNIT.S.Afff8 + command: "readAttribute" attribute: "GeneratedCommandList" response: diff --git a/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml index 95ea6eca309ea9..969f09c8313941 100644 --- a/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml @@ -23,7 +23,7 @@ config: endpoint: 1 tests: - - label: "Wait for the commissioned device to be retrieved" + - label: "Step 0: Wait for the commissioned device to be retrieved" cluster: "DelayCommands" command: "WaitForCommissionee" arguments: diff --git a/src/app/tests/suites/certification/Test_TC_LWM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_LWM_1_1.yaml index e68e3f8ad88709..e06d2b9761edd9 100644 --- a/src/app/tests/suites/certification/Test_TC_LWM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_LWM_1_1.yaml @@ -77,9 +77,7 @@ tests: - label: "Step 5: TH reads from the DUT the EventList attribute." verification: | ./chip-tool laundrywashermode read event-list 1 1 - Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - [1690184560.096147][15413:15415] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0051 Attribute 0x0000_FFFA DataVersion: 3075628268 [1690184560.096165][15413:15415] CHIP:TOO: EventList: 0 entries disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_MOD_1_1.yaml b/src/app/tests/suites/certification/Test_TC_MOD_1_1.yaml index 068b590b4085f9..1463f1ef97e668 100644 --- a/src/app/tests/suites/certification/Test_TC_MOD_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_MOD_1_1.yaml @@ -107,7 +107,55 @@ tests: type: list contains: [5] - - label: "Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4d: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1687330774.078611][3846:3848] CHIP:TOO: AttributeList: 17 entries + [1687330774.078688][3846:3848] CHIP:TOO: [1]: 0 + [1687330774.078999][3846:3848] CHIP:TOO: [2]: 1 + [1687330774.079101][3846:3848] CHIP:TOO: [3]: 2 + [1687330774.079334][3846:3848] CHIP:TOO: [4]: 3 + [1687330774.079400][3846:3848] CHIP:TOO: [5]: 4 + [1687330774.079457][3846:3848] CHIP:TOO: [6]: 5 + [1687330774.079761][3846:3848] CHIP:TOO: [7]: 6 + [1687330774.079862][3846:3848] CHIP:TOO: [8]: 7 + [1687330774.079959][3846:3848] CHIP:TOO: [9]: 8 + [1687330774.080020][3846:3848] CHIP:TOO: [10]: 9 + [1687330774.080078][3846:3848] CHIP:TOO: [11]: 10 + [1687330774.080137][3846:3848] CHIP:TOO: [12]: 65528 + [1687330774.080441][3846:3848] CHIP:TOO: [13]: 65529 + [1687330774.080532][3846:3848] CHIP:TOO: [14]: 65530 + [1687330774.080610][3846:3848] CHIP:TOO: [15]: 65531 + [1687330774.080704][3846:3848] CHIP:TOO: [16]: 65532 + [1687330774.080764][3846:3848] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: TH reads from the DUT the EventList attribute" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" @@ -116,7 +164,36 @@ tests: constraints: type: list - - label: "Step 5: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool modeselect read event-list 1 1 + + Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1689917350.563148][4845:4847] CHIP:DMG: } + [1689917350.570130][4845:4847] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_FFFA DataVersion: 2316721935 + [1689917350.572844][4845:4847] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: TH reads AcceptedCommandList attribute from DUT" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -124,10 +201,63 @@ tests: type: list contains: [0] - - label: "Step 6: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored.3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0413 Attribute 0x0000_FFF9 DataVersion: 2476226943 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: TH reads GeneratedCommandList attribute from DUT" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0413 Attribute 0x0000_FFF8 DataVersion: 2476226943 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_NDOCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_NDOCONC_1_1.yaml index 7b50bfd9a06f9b..94419844933a8e 100644 --- a/src/app/tests/suites/certification/Test_TC_NDOCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_NDOCONC_1_1.yaml @@ -194,9 +194,9 @@ tests: contains: [9, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global attribute: AttributeList" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED" response: constraints: type: list @@ -280,7 +280,7 @@ tests: contains: [5, 6] - label: - "Step 3i: Check that AverageMeasuredValue and + "Step 4i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from AttributeList when NDOCONC.S.F05 (AVG) is not set" command: "readAttribute" @@ -292,7 +292,7 @@ tests: excludes: [5, 6] - label: - "Step 3j: Read the optional, feature dependent attribute LevelValue in + "Step 4j: Read the optional, feature dependent attribute LevelValue in AttributeList" command: "readAttribute" attribute: "AttributeList" @@ -303,7 +303,7 @@ tests: contains: [10] - label: - "Step 3k: Check that LevelValue is excluded from AttributeList when + "Step 4k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is not set" command: "readAttribute" attribute: "AttributeList" @@ -313,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1687330774.078611][3846:3848] CHIP:TOO: AttributeList: 17 entries + [1687330774.078688][3846:3848] CHIP:TOO: [1]: 0 + [1687330774.078999][3846:3848] CHIP:TOO: [2]: 1 + [1687330774.079101][3846:3848] CHIP:TOO: [3]: 2 + [1687330774.079334][3846:3848] CHIP:TOO: [4]: 3 + [1687330774.079400][3846:3848] CHIP:TOO: [5]: 4 + [1687330774.079457][3846:3848] CHIP:TOO: [6]: 5 + [1687330774.079761][3846:3848] CHIP:TOO: [7]: 6 + [1687330774.079862][3846:3848] CHIP:TOO: [8]: 7 + [1687330774.079959][3846:3848] CHIP:TOO: [9]: 8 + [1687330774.080020][3846:3848] CHIP:TOO: [10]: 9 + [1687330774.080078][3846:3848] CHIP:TOO: [11]: 10 + [1687330774.080137][3846:3848] CHIP:TOO: [12]: 65528 + [1687330774.080441][3846:3848] CHIP:TOO: [13]: 65529 + [1687330774.080532][3846:3848] CHIP:TOO: [14]: 65530 + [1687330774.080610][3846:3848] CHIP:TOO: [15]: 65531 + [1687330774.080704][3846:3848] CHIP:TOO: [16]: 65532 + [1687330774.080764][3846:3848] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0413 Attribute 0x0000_FFFA DataVersion: 2476226943 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,63 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored.3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0413 Attribute 0x0000_FFF9 DataVersion: 2476226943 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool nitrogendioxideconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0413 Attribute 0x0000_FFF8 DataVersion: 2476226943 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml index 06585d355cb309..e766d8164ac965 100644 --- a/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml @@ -98,22 +98,39 @@ tests: type: list contains: [16384, 16385, 16386, 16387] - #Manufacturer specific event IDs check not possible + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: - "Step 5: Read EventList attribute from the DUT.For this cluster the - list is usually empty but it can contain manufacturer specific event - IDs." + "Step 4c: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | - ./chip-tool onoff read event-list 1 1 - + ./chip-tool onoff read attribute-list 1 1 - Verify " EventList is empty" on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + Verify "AttributeList" contains a list of mandatory attributes (value 0), + - Global attributes (value 65533, 65532, 65531, 65530, 65529 and 65528), + - Feature dependent attribute If OO.S.F00(LT) feature supports (Values 0x4000, 0x4001, 0x4002 and 0x4003) on the TH(Chip-tool) Log and Below is the sample log provided for the raspi platform: - [1676352490.164738][6271:6273] CHIP:DMG: SuppressResponse = true, - [1676352490.164742][6271:6273] CHIP:DMG: InteractionModelRevision = 1 - [1676352490.164745][6271:6273] CHIP:DMG: } - [1676352490.164804][6271:6273] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_FFFA DataVersion: 2406349519 - [1676352490.164822][6271:6273] CHIP:TOO: EventList: 0 entries + [1676289026.377401][4351:4353] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_FFFB DataVersion: 659547221 + [1676289026.377502][4351:4353] CHIP:TOO: AttributeList: 11 entries + [1676289026.377529][4351:4353] CHIP:TOO: [1]: 0 + [1676289026.377552][4351:4353] CHIP:TOO: [2]: 16384 + [1676289026.377575][4351:4353] CHIP:TOO: [3]: 16385 + [1676289026.377599][4351:4353] CHIP:TOO: [4]: 16386 + [1676289026.377622][4351:4353] CHIP:TOO: [5]: 16387 + [1676289026.377648][4351:4353] CHIP:TOO: [6]: 65528 + [1676289026.377673][4351:4353] CHIP:TOO: [7]: 65529 + [1676289026.377701][4351:4353] CHIP:TOO: [8]: 65530 + [1676289026.377720][4351:4353] CHIP:TOO: [9]: 65531 + [1676289026.377750][4351:4353] CHIP:TOO: [10]: 65532 + [1676289026.377772][4351:4353] CHIP:TOO: [11]: 65533 + [1676289026.377989][4351:4353] CHIP:EM: <<< [E:19140i M:46071945 (Ack:30183253)] (S) Msg TX to 1:0000000000 cluster: "LogCommands" command: "UserPrompt" PICS: PICS_USER_PROMPT @@ -124,6 +141,37 @@ tests: - name: "expectedValue" value: "y" + - label: + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool onoff read event-list 1 1 + + Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1676352490.164738][6271:6273] CHIP:DMG: SuppressResponse = true, + [1676352490.164742][6271:6273] CHIP:DMG: InteractionModelRevision = 1 + [1676352490.164745][6271:6273] CHIP:DMG: } + [1676352490.164804][6271:6273] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_FFFA DataVersion: 2406349519 + [1676352490.164822][6271:6273] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" @@ -143,10 +191,70 @@ tests: type: list contains: [64, 65, 66] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored.3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool onoff read accepted-command-list 1 1 + + Verify "AcceptedCommandList" contains a list of mandatory commands (value 0, 1 and 2) + - If feature supports OO.S.F00(LT) list contains (values 0x40, 0x41 and 0x42) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1646045691.415739][36078:36083] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_FFF9DataVersion: 1805855192 + [1646045691.415819][36078:36083] CHIP:TOO: AcceptedCommandList: 6 entries + [1646045691.415876][36078:36083] CHIP:TOO: [1]: 0 + [1646045691.415901][36078:36083] CHIP:TOO: [2]: 1 + [1646045691.415925][36078:36083] CHIP:TOO: [3]: 2 + [1646045691.415950][36078:36083] CHIP:TOO: [4]: 64 + [1646045691.415973][36078:36083] CHIP:TOO: [5]: 65 + [1646045691.415997][36078:36083] CHIP:TOO: [6]: 66 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool onoff read generated-command-list 1 1 + + Verify "GeneratedCommandList" contains a list of supported commands, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1650436601.944126][6139:6144] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_FFF8 DataVersion: 3082972176 + [1650436601.944272][6139:6144] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_OPCREDS_1_2.yaml b/src/app/tests/suites/certification/Test_TC_OPCREDS_1_2.yaml index a7a2561a78707e..4317aaa975c8dc 100644 --- a/src/app/tests/suites/certification/Test_TC_OPCREDS_1_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_OPCREDS_1_2.yaml @@ -35,7 +35,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision from DUT" - PICS: OPCREDS.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -44,7 +43,6 @@ tests: type: int16u - label: "Step 3: TH reads the FeatureMap from DUT" - PICS: OPCREDS.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -53,7 +51,7 @@ tests: type: bitmap32 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -75,9 +73,8 @@ tests: 0x05, ] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: TH reads AttributeList from DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -88,7 +85,6 @@ tests: 0xFFFD, 0xFFFC, 0xFFFB, - 0xFFF9, 0xFFF8, 0x00, @@ -134,7 +130,7 @@ tests: [1656324429.813697][17795:17800] CHIP:TOO: [11]: 65533 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && OPCREDS.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -143,19 +139,21 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool operationalcredentials read event-list 1 0 Verify " EventList " on the TH(Chip-tool) Log: Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. - [1677044259.559572][29732:29734] CHIP:DMG: } [1677044259.559655][29732:29734] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003E Attribute 0x0000_FFFA DataVersion: 806612356 [1677044259.560285][29732:29734] CHIP:TOO: EventList: 0 entries @@ -163,7 +161,7 @@ tests: [1677044259.560369][29732:29734] CHIP:IN: (S) Sending msg 102340651 on secure session with LSID: 22620 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && OPCREDS.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -172,7 +170,6 @@ tests: value: "y" - label: "Step 6a: TH reads AcceptedCommandList from DUT" - PICS: OPCREDS.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -209,7 +206,7 @@ tests: [1657021609.427165][7131:7136] CHIP:TOO: [8]: 11 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && OPCREDS.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -218,7 +215,6 @@ tests: value: "y" - label: "Step 7a: TH reads GeneratedCommandList from DUT" - PICS: OPCREDS.S.Afff8 command: "readAttribute" attribute: "GeneratedCommandList" response: @@ -250,7 +246,7 @@ tests: [1651215270.029112][3260:3265] CHIP:TOO: [4]: 8 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && OPCREDS.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_OPSTATE_1_1.yaml b/src/app/tests/suites/certification/Test_TC_OPSTATE_1_1.yaml index 6e107e0eea976c..6249d6090fe34c 100644 --- a/src/app/tests/suites/certification/Test_TC_OPSTATE_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_OPSTATE_1_1.yaml @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -name: xx.1.1. [TC-OPSTATE-1.1] Global attributes with server as DUT +name: 201.1.1. [TC-OPSTATE-1.1] Global Attributes with DUT as Server PICS: - OPSTATE.S @@ -77,6 +77,50 @@ tests: type: list contains: [2] + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4c: TH reads AttributeList attribute from DUT. 1.The list MAY + contain values in the Manufacturer Extensible Identifier (MEI) range: + (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT + contain any values in the Test Vendor or invalid range: (0x0000_5000 - + 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool operationalstate read attribute-list 1 1 + + Verify " AttributeList " value consists the list of mandatory attributes (0, 1, 3, 4, 5, 65533, 65532, 65531, 65529, 65528) and it may include the optional attribute (2) on the TH(Chip-tool) Log: + Below is the sample log provided for the raspi platform: + + [1689672825.768926][16510:16512] CHIP:DMG: } + [1689672825.769078][16510:16512] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_FFFB DataVersion: 2102885775 + [1689672825.769134][16510:16512] CHIP:TOO: AttributeList: 12 entries + [1689672825.769153][16510:16512] CHIP:TOO: [1]: 0 + [1689672825.769160][16510:16512] CHIP:TOO: [2]: 1 + [1689672825.769166][16510:16512] CHIP:TOO: [3]: 2 + [1689672825.769172][16510:16512] CHIP:TOO: [4]: 3 + [1689672825.769179][16510:16512] CHIP:TOO: [5]: 4 + [1689672825.769185][16510:16512] CHIP:TOO: [6]: 5 + [1689672825.769192][16510:16512] CHIP:TOO: [7]: 65528 + [1689672825.769198][16510:16512] CHIP:TOO: [8]: 65529 + [1689672825.769204][16510:16512] CHIP:TOO: [9]: 65530 + [1689672825.769211][16510:16512] CHIP:TOO: [10]: 65531 + [1689672825.769217][16510:16512] CHIP:TOO: [11]: 65532 + [1689672825.769223][16510:16512] CHIP:TOO: [12]: 65533 + [1689672825.769288][16510:16512] CHIP:EM: <<< [E:46431i S:41930 M:194976396 (Ack:61934436)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1689672825.769302][16510:16512] CHIP:IN: (S) Sending msg 194976396 on secure session with LSID: 41930 + [1689672825.769356][16510:16512] CHIP:EM: Flushed pending ack for MessageCounter:61934436 on exchange 46431i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 5a: TH reads from the DUT the EventList attribute." PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" @@ -97,6 +141,43 @@ tests: type: list contains: [0x01] + - label: + "Step 5c: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool operationalstate read event-list 1 1 + + Verify " EventList attribute " value consists the list of mandatory event (0) and it may include the optional events (1) on the TH(Chip-tool) Log: + Below is the sample log provided for the raspi platform: + + + [1689672855.519671][16517:16519] CHIP:DMG: } + [1689672855.519771][16517:16519] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_FFFA DataVersion: 2102885775 + [1689672855.519802][16517:16519] CHIP:TOO: EventList: 2 entries + [1689672855.519820][16517:16519] CHIP:TOO: [1]: 0 + [1689672855.519826][16517:16519] CHIP:TOO: [2]: 1 + [1689672855.519881][16517:16519] CHIP:EM: <<< [E:4310i S:43612 M:6147213 (Ack:7921904)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1689672855.519894][16517:16519] CHIP:IN: (S) Sending msg 6147213 on secure session with LSID: 43612 + [1689672855.519920][16517:16519] CHIP:EM: Flushed pending ack for MessageCounter:7921904 on exchange 4310i + [1689672855.520077][16517:16517] CHIP:CTL: Shutting down the commissioner + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + - label: "Step 6a: Read the optional command(Start) in AcceptedCommandList" PICS: OPSTATE.S.C02 command: "readAttribute" @@ -133,7 +214,51 @@ tests: type: list contains: [0, 3] - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6e: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool operationalstate read accepted-command-list 1 1 + + Verify " AcceptedCommandList " consists the list may include the optional commands(0, 1, 2,and 3) on the TH(Chip-tool) Log: + Below is the sample log provided for the raspi platform: + [1689672881.193903][16526:16528] CHIP:DMG: } + [1689672881.194022][16526:16528] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_FFF9 DataVersion: 2102885775 + [1689672881.194058][16526:16528] CHIP:TOO: AcceptedCommandList: 4 entries + [1689672881.194093][16526:16528] CHIP:TOO: [1]: 0 + [1689672881.194103][16526:16528] CHIP:TOO: [2]: 1 + [1689672881.194109][16526:16528] CHIP:TOO: [3]: 2 + [1689672881.194115][16526:16528] CHIP:TOO: [4]: 3 + [1689672881.194175][16526:16528] CHIP:EM: <<< [E:46466i S:132 M:218213214 (Ack:205218134)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1689672881.194189][16526:16528] CHIP:IN: (S) Sending msg 218213214 on secure session with LSID: 132 + [1689672881.194219][16526:16528] CHIP:EM: Flushed pending ack for MessageCounter:205218134 on exchange 46466i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" + PICS: + "!OPSTATE.S.C00 || !OPSTATE.S.C01 || !OPSTATE.S.C02 || !OPSTATE.S.C03" + command: "readAttribute" + attribute: "GeneratedCommandList" + response: + value: [] + constraints: + type: list + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" PICS: (OPSTATE.S.C00 || OPSTATE.S.C01 || OPSTATE.S.C02 || OPSTATE.S.C03) command: "readAttribute" attribute: "GeneratedCommandList" @@ -141,3 +266,35 @@ tests: constraints: type: list contains: [4] + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool operationalstate read generated-command-list 1 1 + + Verify "GeneratedCommandList" consists the list may include the optional commands(4) on the TH(Chip-tool) Log: + Below is the sample log provided for the raspi platform: + [1689672911.044845][16535:16537] CHIP:DMG: } + [1689672911.044936][16535:16537] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_FFF8 DataVersion: 2102885775 + [1689672911.044966][16535:16537] CHIP:TOO: GeneratedCommandList: 1 entries + [1689672911.044986][16535:16537] CHIP:TOO: [1]: 4 + [1689672911.045041][16535:16537] CHIP:EM: <<< [E:10854i S:1089 M:96850287 (Ack:64309924)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1689672911.045054][16535:16537] CHIP:IN: (S) Sending msg 96850287 on secure session with LSID: 1089 + [1689672911.045079][16535:16537] CHIP:EM: Flushed pending ack for MessageCounter:64309924 on exchange 10854i + [1689672911.045189][16535:16535] CHIP:CTL: Shutting down the commissioner + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_OPSTATE_2_1.yaml b/src/app/tests/suites/certification/Test_TC_OPSTATE_2_1.yaml index efe99c934acb11..6720a5b1f8cba1 100644 --- a/src/app/tests/suites/certification/Test_TC_OPSTATE_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_OPSTATE_2_1.yaml @@ -25,8 +25,8 @@ config: tests: - label: "Note" - verifications: | - While verifying below test case we will get 0 and null value for few attributes, as per spec 0 and null value is default for those attributes. + verification: | + This is a simulated example log for instructional purposes only. In real scenarios, the actual log may vary depending on the feature implementation in Reference App. disabled: true - label: @@ -40,7 +40,6 @@ tests: PICS: OPSTATE.S.A0000 verification: | ./chip-tool operationalstate read phase-list 1 1 - Via the TH (chip-tool), verify: - that PhaseList attribute value contains either null or a list of strings. - that the list has no more than 32 entries. on TH(chip-tool) @@ -138,23 +137,238 @@ tests: [1689673213.434993][16591:16591] CHIP:CTL: Shutting down the commissioner disabled: true + - label: + "Step 6a: manually put the device in the Stopped(0x00) operational + state" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_STOPPED + verification: | + manually put the device in the Stopped(0x00) operational state + disabled: true + + - label: "Step 6b: TH reads from the DUT the OperationalState attribute" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_STOPPED + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Stopped(0x00) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 0 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 6c: manually put the device in the Running(0x01) operational + state" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_RUNNING + verification: | + manually put the device in the Running(0x01) operational state + disabled: true + + - label: "Step 6d: TH reads from the DUT the OperationalState attribute" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_RUNNING + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Running(0x01) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 1 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 6e: manually put the device in the Paused(0x02) operational + state" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_PAUSED + verification: | + manually put the device in the Paused(0x02) operational state + disabled: true + + - label: "Step 6f: TH reads from the DUT the OperationalState attribute" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_PAUSED + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Paused(0x02) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 2 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 6g: manually put the device in the Error(0x03) operational state" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_ERROR + verification: | + manually put the device in the Error(0x03) operational state + disabled: true + + - label: "Step 6h: TH reads from the DUT the OperationalState attribute" + PICS: OPSTATE.S.A0004 && OPSTATE.S.M.ST_ERROR + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Error(0x03) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 3 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + - label: "Step 7: TH reads from the DUT the OperationalError attribute" PICS: OPSTATE.S.A0005 verification: | - ./chip-tool operationalstate read operationalerror 1 1 + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an instance of ErrorStateStruct and Verify the ErrorStateID is a defined error (NoError(0x00), UnableToStartOrResume(0x01), UnableToCompleteOperation(0x02), CommandInvalidInState(0x03)) or in the range 0x80 to 0xBF. + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 3 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true - Via the TH (chip-tool), verify: - - the response includes an ID (enum8), a label (string), and additional details (string) - - if the label is null, verify the additional details is also null - - the provided ID is in the allowed range + - label: "Step 7a: manually put the device in the NoError(0x00) error state" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_NO_ERROR + verification: | + manually put the device in the NoError(0x00) error state + disabled: true + + - label: "Step 7b: TH reads from the DUT the OperationalError attribute" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_NO_ERROR + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to SeekingCharger(0x40) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 64 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 7c: manually put the device in the UnableToStartOrResume(0x01) + error state" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME + verification: | + manually put the device in the UnableToStartOrResume(0x01) error state + disabled: true + + - label: "Step 7d: TH reads from the DUT the OperationalError attribute" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME + verification: | + ./chip-tool operationalstate read operational-state 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Charging(0x41) + + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 65 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 7e: manually put the device in the + UnableToCompleteOperation(0x02) error state" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION + verification: | + manually put the device in the Docked(0x42) operational state + disabled: true + + - label: "Step 7f: TH reads from the DUT the OperationalError attribute" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION + verification: | + ./chip-tool operationalstate read operational-error 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an OperationalStateEnum value. Verify this is set to Docked(0x42) + [1690201842.479098][15020:15022] CHIP:DMG: SuppressResponse = true, + [1690201842.479158][15020:15022] CHIP:DMG: InteractionModelRevision = 1 + [1690201842.479211][15020:15022] CHIP:DMG: } + [1690201842.479528][15020:15022] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0004 DataVersion: 3675566847 + [1690201842.479656][15020:15022] CHIP:TOO: OperationalState: 66 + [1690201842.479966][15020:15022] CHIP:EM: <<< [E:7640i S:22973 M:102288525 (Ack:157133280)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201842.480062][15020:15022] CHIP:IN: (S) Sending msg 102288525 on secure session with LSID: 22973 + [1690201842.480329][15020:15022] CHIP:EM: Flushed pending ack for MessageCounter:157133280 on exchange 7640i + [1690201842.480735][15020:15020] CHIP:CTL: Shutting down the commissioner + [1690201842.480807][15020:15020] CHIP:CTL: Stopping commissioning discovery over DNS-SD + disabled: true + + - label: + "Step 7g: manually put the device in the CommandInvalidInState(0x03) + error state" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE + verification: | + ./chip-tool operationalstate read operational-error 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an instance of ErrorStateStruct and Verify the ErrorStateID is a defined error (NoError(0x00), UnableToStartOrResume(0x01), UnableToCompleteOperation(0x02), CommandInvalidInState(0x03), FailedToFindChargingDock(0x40), Stuck(0x41), DustBinMissing(0x42), DustBinFull(0x43), WaterTankEmpty(0x44), WaterTankMissing(0x45), WaterTankLidOpen(0x46), MopCleaningPadMissing(0x47)) or in the range 0x80 to 0xBF. - [1689673270.214241][16602:16604] CHIP:DMG: } - [1689673270.214318][16602:16604] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0005 DataVersion: 2102885775 - [1689673270.214346][16602:16604] CHIP:TOO: OperationalError: { - [1689673270.214362][16602:16604] CHIP:TOO: ErrorStateID: 0 - [1689673270.214369][16602:16604] CHIP:TOO: } - [1689673270.214427][16602:16604] CHIP:EM: <<< [E:28848i S:14033 M:90223554 (Ack:193224404)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck) - [1689673270.214439][16602:16604] CHIP:IN: (S) Sending msg 90223554 on secure session with LSID: 14033 - [1689673270.214465][16602:16604] CHIP:EM: Flushed pending ack for MessageCounter:193224404 on exchange 28848i + [1690201879.312424][15025:15027] CHIP:DMG: } + [1690201879.312754][15025:15027] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0005 DataVersion: 3675566847 + [1690201879.312892][15025:15027] CHIP:TOO: OperationalError: { + [1690201879.312953][15025:15027] CHIP:TOO: ErrorStateID: 0 + [1690201879.313009][15025:15027] CHIP:TOO: } + [1690201879.313334][15025:15027] CHIP:EM: <<< [E:36372i S:53703 M:124059394 (Ack:197234404)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201879.313431][15025:15027] CHIP:IN: (S) Sending msg 124059394 on secure session with LSID: 53703 + [1690201879.313647][15025:15027] CHIP:EM: Flushed pending ack for MessageCounter:197234404 on exchange 36372i + [1690201879.314067][15025:15025] CHIP:CTL: Shutting down the commissioner + [1690201879.314141][15025:15025] CHIP:CTL: Stopping commissioning discovery over DNS-SD + [1690201879.314334][15025:15025] CHIP:CTL: Shutting down the controller + disabled: true + + - label: "Step 7h: TH reads from the DUT the OperationalError attribute" + PICS: OPSTATE.S.A0005 && OPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE + verification: | + ./chip-tool operationalstate read operational-error 1 1 + Via the TH (chip-tool), Verify that the DUT response contains an instance of ErrorStateStruct. This shall contain an ErrorStateId with a value of UnableToStartOrResume(0x01) + + [1690201879.312424][15025:15027] CHIP:DMG: } + [1690201879.312754][15025:15027] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0060 Attribute 0x0000_0005 DataVersion: 3675566847 + [1690201879.312892][15025:15027] CHIP:TOO: OperationalError: { + [1690201879.312953][15025:15027] CHIP:TOO: ErrorStateID: 1 + [1690201879.313009][15025:15027] CHIP:TOO: } + [1690201879.313334][15025:15027] CHIP:EM: <<< [E:36372i S:53703 M:124059394 (Ack:197234404)] (S) Msg TX to 1:0000000000000001 [9278] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1690201879.313431][15025:15027] CHIP:IN: (S) Sending msg 124059394 on secure session with LSID: 53703 + [1690201879.313647][15025:15027] CHIP:EM: Flushed pending ack for MessageCounter:197234404 on exchange 36372i + [1690201879.314067][15025:15025] CHIP:CTL: Shutting down the commissioner + [1690201879.314141][15025:15025] CHIP:CTL: Stopping commissioning discovery over DNS-SD + [1690201879.314334][15025:15025] CHIP:CTL: Shutting down the controller disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_OZCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_OZCONC_1_1.yaml index 3cc04f15d736cf..659fc245be8625 100644 --- a/src/app/tests/suites/certification/Test_TC_OZCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_OZCONC_1_1.yaml @@ -313,7 +313,53 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list MAY + contain values in the Manufacturer Extensible Identifier (MEI) range: + (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT + contain any values in the Test Vendor or invalid range: (0x0000_5000 - + 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool ozoneconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1687331790.438405][3951:3953] CHIP:TOO: AttributeList: 17 entries + [1687331790.438477][3951:3953] CHIP:TOO: [1]: 0 + [1687331790.438538][3951:3953] CHIP:TOO: [2]: 1 + [1687331790.438595][3951:3953] CHIP:TOO: [3]: 2 + [1687331790.438652][3951:3953] CHIP:TOO: [4]: 3 + [1687331790.438736][3951:3953] CHIP:TOO: [5]: 4 + [1687331790.438796][3951:3953] CHIP:TOO: [6]: 5 + [1687331790.438853][3951:3953] CHIP:TOO: [7]: 6 + [1687331790.438937][3951:3953] CHIP:TOO: [8]: 7 + [1687331790.438995][3951:3953] CHIP:TOO: [9]: 8 + [1687331790.439075][3951:3953] CHIP:TOO: [10]: 9 + [1687331790.439139][3951:3953] CHIP:TOO: [11]: 10 + [1687331790.439203][3951:3953] CHIP:TOO: [12]: 65528 + [1687331790.439285][3951:3953] CHIP:TOO: [13]: 65529 + [1687331790.439348][3951:3953] CHIP:TOO: [14]: 65530 + [1687331790.439405][3951:3953] CHIP:TOO: [15]: 65531 + [1687331790.439485][3951:3953] CHIP:TOO: [16]: 65532 + [1687331790.439544][3951:3953] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +368,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: Read the global attribute: EventList. 1.The list SHALL NOT + contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool ozoneconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0415 Attribute 0x0000_FFFA DataVersion: 2247512014 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +404,62 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool ozoneconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0415 Attribute 0x0000_FFF9 DataVersion: 2247512014 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool ozoneconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0415 Attribute 0x0000_FFF8 DataVersion: 2247512014 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_PCC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PCC_1_1.yaml index 485b7492ddd9d2..931c82a4b28349 100644 --- a/src/app/tests/suites/certification/Test_TC_PCC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PCC_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: TH reads the ClusterRevision attribute from the DUT" - PICS: PCC.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -42,8 +41,8 @@ tests: - label: "Step 3a: TH reads the FeatureMap attribute from the DUT" PICS: - " PCC.S.Afffc && !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 - && !PCC.S.F04 && !PCC.S.F05 && !PCC.S.F06 " + " !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 && !PCC.S.F04 + && !PCC.S.F05 && !PCC.S.F06 " command: "readAttribute" attribute: "FeatureMap" response: @@ -54,7 +53,7 @@ tests: - label: "Step 3b: Given PCC.S.F00(PRSCONST) ensure featuremap has the correct bit set" - PICS: PCC.S.F00 && PCC.S.Afffc + PICS: PCC.S.F00 command: "readAttribute" attribute: "FeatureMap" response: @@ -65,7 +64,7 @@ tests: - label: "Step 3c: Given PCC.S.F01(PRSCOMP) ensure featuremap has the correct bit set" - PICS: PCC.S.F01 && PCC.S.Afffc + PICS: PCC.S.F01 command: "readAttribute" attribute: "FeatureMap" response: @@ -76,7 +75,7 @@ tests: - label: "Step 3d: Given PCC.S.F02(FLW) ensure featuremap has the correct bit set" - PICS: PCC.S.F02 && PCC.S.Afffc + PICS: PCC.S.F02 command: "readAttribute" attribute: "FeatureMap" response: @@ -87,7 +86,7 @@ tests: - label: "Step 3e: Given PCC.S.F03(SPD) ensure featuremap has the correct bit set" - PICS: PCC.S.F03 && PCC.S.Afffc + PICS: PCC.S.F03 command: "readAttribute" attribute: "FeatureMap" response: @@ -98,7 +97,7 @@ tests: - label: "Step 3f: Given PCC.S.F04(TEMP) ensure featuremap has the correct bit set" - PICS: PCC.S.F04 && PCC.S.Afffc + PICS: PCC.S.F04 command: "readAttribute" attribute: "FeatureMap" response: @@ -109,7 +108,7 @@ tests: - label: "Step 3g: Given PCC.S.F05(AUTO) ensure featuremap has the correct bit set" - PICS: PCC.S.F05 && PCC.S.Afffc + PICS: PCC.S.F05 command: "readAttribute" attribute: "FeatureMap" response: @@ -120,7 +119,7 @@ tests: - label: "Step 3h: Given PCC.S.F06(LOCAL) ensure featuremap has the correct bit set" - PICS: PCC.S.F06 && PCC.S.Afffc + PICS: PCC.S.F06 command: "readAttribute" attribute: "FeatureMap" response: @@ -129,7 +128,7 @@ tests: hasMasksSet: [0x40] - label: "Step 4a: TH reads the AttributeList attribute from the DUT" - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -153,7 +152,7 @@ tests: ] - label: "Step 4a: TH reads the AttributeList attribute from the DUT" - PICS: "!PICS_EVENT_LIST_ENABLED && PCC.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -165,7 +164,7 @@ tests: - label: "Step 4b: TH reads optional attribute(MinConstPressure) attribute in AttributeList from the DUT" - PICS: PCC.S.A0003 && PCC.S.Afffb + PICS: PCC.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -176,7 +175,7 @@ tests: - label: "Step 4c TH reads optional attribute(MaxConstPressure) attribute in AttributeList from the DUT" - PICS: PCC.S.A0004 && PCC.S.Afffb + PICS: PCC.S.A0004 command: "readAttribute" attribute: "AttributeList" response: @@ -187,7 +186,7 @@ tests: - label: "Step 4d: TH reads optional attribute(MinCompPressure) attribute in AttributeList from the DUT" - PICS: PCC.S.A0005 && PCC.S.Afffb + PICS: PCC.S.A0005 command: "readAttribute" attribute: "AttributeList" response: @@ -198,7 +197,7 @@ tests: - label: "Step 4e: TH reads optional attribute(MaxCompPressure) attribute in AttributeList from the DUT" - PICS: PCC.S.A0006 && PCC.S.Afffb + PICS: PCC.S.A0006 command: "readAttribute" attribute: "AttributeList" response: @@ -209,7 +208,7 @@ tests: - label: "Step 4f: TH reads optional attribute(MinConstSpeed) attribute in AttributeList from the DUT" - PICS: PCC.S.A0007 && PCC.S.Afffb + PICS: PCC.S.A0007 command: "readAttribute" attribute: "AttributeList" response: @@ -220,7 +219,7 @@ tests: - label: "Step 4g: TH reads optional attribute(MaxConstSpeed) attribute in AttributeList from the DUT" - PICS: PCC.S.A0008 && PCC.S.Afffb + PICS: PCC.S.A0008 command: "readAttribute" attribute: "AttributeList" response: @@ -231,7 +230,7 @@ tests: - label: "Step 4h: TH reads optional attribute(MinConstFlow) attribute in AttributeList from the DUT" - PICS: PCC.S.A0009 && PCC.S.Afffb + PICS: PCC.S.A0009 command: "readAttribute" attribute: "AttributeList" response: @@ -242,7 +241,7 @@ tests: - label: "Step 4i: TH reads optional attribute(MaxConstFlow) attribute in AttributeList from the DUT" - PICS: PCC.S.A000a && PCC.S.Afffb + PICS: PCC.S.A000a command: "readAttribute" attribute: "AttributeList" response: @@ -253,7 +252,7 @@ tests: - label: "Step 4j: TH reads optional attribute(MinConstTemp) attribute in AttributeList from the DUT" - PICS: PCC.S.A000b && PCC.S.Afffb + PICS: PCC.S.A000b command: "readAttribute" attribute: "AttributeList" response: @@ -264,7 +263,7 @@ tests: - label: "Step 4k: TH reads optional attribute(MaxConstTemp) attribute in AttributeList from the DUT" - PICS: PCC.S.A000c && PCC.S.Afffb + PICS: PCC.S.A000c command: "readAttribute" attribute: "AttributeList" response: @@ -275,7 +274,7 @@ tests: - label: "Step 4l: TH reads optional attribute(PumpStatus) attribute in AttributeList from the DUT" - PICS: PCC.S.A0010 && PCC.S.Afffb + PICS: PCC.S.A0010 command: "readAttribute" attribute: "AttributeList" response: @@ -286,7 +285,7 @@ tests: - label: "Step 4m: TH reads optional attribute(Speed) attribute in AttributeList from the DUT" - PICS: PCC.S.A0014 && PCC.S.Afffb + PICS: PCC.S.A0014 command: "readAttribute" attribute: "AttributeList" response: @@ -297,7 +296,7 @@ tests: - label: "Step 4n: TH reads optional attribute(LifetimeRunningHours) attribute in AttributeList from the DUT" - PICS: PCC.S.A0015 && PCC.S.Afffb + PICS: PCC.S.A0015 command: "readAttribute" attribute: "AttributeList" response: @@ -308,7 +307,7 @@ tests: - label: "Step 4o: TH reads optional attribute(Power) attribute in AttributeList from the DUT" - PICS: PCC.S.A0016 && PCC.S.Afffb + PICS: PCC.S.A0016 command: "readAttribute" attribute: "AttributeList" response: @@ -319,7 +318,7 @@ tests: - label: "Step 4p: TH reads optional attribute(LifetimeEnergyConsumed) attribute in AttributeList from the DUT" - PICS: PCC.S.A0017 && PCC.S.Afffb + PICS: PCC.S.A0017 command: "readAttribute" attribute: "AttributeList" response: @@ -330,7 +329,7 @@ tests: - label: "Step 4q: TH reads optional attribute(ControlMode) attribute in AttributeList from the DUT" - PICS: PCC.S.A0021 && PCC.S.Afffb + PICS: PCC.S.A0021 command: "readAttribute" attribute: "AttributeList" response: @@ -389,7 +388,7 @@ tests: [1676289423.471674][4494:4496] CHIP:EM: <<< [E:63825i M:222566558 (Ack:152045997)] (S) Msg TX to 1:00000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PCC.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -399,10 +398,10 @@ tests: - label: "Step 5a: TH reads EventList from DUT" PICS: - "PICS_EVENT_LIST_ENABLED && PCC.S.Afffa && !PCC.S.E00 && !PCC.S.E01 - && !PCC.S.E02 && !PCC.S.E03 && !PCC.S.E04 && !PCC.S.E05 && !PCC.S.E06 - && !PCC.S.E07 && !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && !PCC.S.E0b - && !PCC.S.E0c && !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 " + "PICS_EVENT_LIST_ENABLED && !PCC.S.E00 && !PCC.S.E01 && !PCC.S.E02 && + !PCC.S.E03 && !PCC.S.E04 && !PCC.S.E05 && !PCC.S.E06 && !PCC.S.E07 && + !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && !PCC.S.E0b && !PCC.S.E0c && + !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 " command: "readAttribute" attribute: "EventList" response: @@ -413,7 +412,7 @@ tests: - label: "Step 5b: TH reads from the DUT the EventList optional (SupplyVoltageLow)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E00 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E00 command: "readAttribute" attribute: "EventList" response: @@ -424,7 +423,7 @@ tests: - label: "Step 5c: TH reads from the DUT the EventList optional (SupplyVoltageHigh)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E01 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E01 command: "readAttribute" attribute: "EventList" response: @@ -435,7 +434,7 @@ tests: - label: "Step 5d: TH reads from the DUT the EventList optional (PowerMissingPhase)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E02 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E02 command: "readAttribute" attribute: "EventList" response: @@ -446,7 +445,7 @@ tests: - label: "Step 5e: TH reads from the DUT the EventList optional (SystemPressureLow)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E03 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E03 command: "readAttribute" attribute: "EventList" response: @@ -457,7 +456,7 @@ tests: - label: "Step 5f: TH reads from the DUT the EventList optional (SystemPressureHigh)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E04 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E04 command: "readAttribute" attribute: "EventList" response: @@ -468,7 +467,7 @@ tests: - label: "Step 5g: TH reads from the DUT the EventList optional (DryRunning)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E05 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E05 command: "readAttribute" attribute: "EventList" response: @@ -479,7 +478,7 @@ tests: - label: "Step 5h: TH reads from the DUT the EventList optional (MotorTemperatureHigh)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E06 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E06 command: "readAttribute" attribute: "EventList" response: @@ -490,7 +489,7 @@ tests: - label: "Step 5i: TH reads from the DUT the EventList optional (PumpMotorFatalFailure)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E07 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E07 command: "readAttribute" attribute: "EventList" response: @@ -501,7 +500,7 @@ tests: - label: "Step 5j: TH reads from the DUT the EventList optional (ElectronicTemperatureHigh)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E08 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E08 command: "readAttribute" attribute: "EventList" response: @@ -512,7 +511,7 @@ tests: - label: "Step 5k: TH reads from the DUT the EventList optional (PumpBlocked)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E09 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E09 command: "readAttribute" attribute: "EventList" response: @@ -523,7 +522,7 @@ tests: - label: "Step 5l: TH reads from the DUT the EventList optional (SensorFailure)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0a && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0a command: "readAttribute" attribute: "EventList" response: @@ -534,7 +533,7 @@ tests: - label: "Step 5m: TH reads from the DUT the EventList optional (ElectronicNonFatalFailure)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0b && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0b command: "readAttribute" attribute: "EventList" response: @@ -545,7 +544,7 @@ tests: - label: "Step 5n: TH reads from the DUT the EventList optional (ElectronicFatalFailure)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0c && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0c command: "readAttribute" attribute: "EventList" response: @@ -556,7 +555,7 @@ tests: - label: "Step 5o: TH reads from the DUT the EventList optional (GeneralFault)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0d && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0d command: "readAttribute" attribute: "EventList" response: @@ -567,7 +566,7 @@ tests: - label: "Step 5p: TH reads from the DUT the EventList optional (Leakage)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0e && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0e command: "readAttribute" attribute: "EventList" response: @@ -578,7 +577,7 @@ tests: - label: "Step 5q: TH reads from the DUT the EventList optional (AirDetection)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0f && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E0f command: "readAttribute" attribute: "EventList" response: @@ -589,7 +588,7 @@ tests: - label: "Step 5r: TH reads from the DUT the EventList optional (TurbineOperation)attribute." - PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E10 && PCC.S.Afffa + PICS: PICS_EVENT_LIST_ENABLED && PCC.S.E10 command: "readAttribute" attribute: "EventList" response: @@ -597,17 +596,17 @@ tests: type: list contains: [0x10] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: - "Step 5s: TH reads EventList attribute from DUT. 1.The list SHALL NOT - contain any additional values in the standard or scoped range: - (0x0000_0000 - 0x0000_00FF). 2. The list MAY contain values in the - Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), - these values SHALL be ignored. 3. The list SHALL NOT contain any - values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5s: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool pumpconfigurationandcontrol read event-list 1 1 @@ -631,26 +630,19 @@ tests: - 0x0f: SHALL be included if and only if PCC.S.E000f(AirDetection) - 0x10: SHALL be included if and only if PCC.S.E0010(TurbineOperation) - [1676465494.926366][27828:27830] CHIP:DMG: } - [1676465494.926925][27828:27830] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0200 Attribute 0x0000_FFFA DataVersion: 2921467772 - [1676465494.926969][27828:27830] CHIP:TOO: EventList: 12 entries - [1676465494.926980][27828:27830] CHIP:TOO: [1]: 0 - [1676465494.926987][27828:27830] CHIP:TOO: [2]: 1 - [1676465494.926994][27828:27830] CHIP:TOO: [3]: 2 - [1676465494.927000][27828:27830] CHIP:TOO: [4]: 3 - [1676465494.927007][27828:27830] CHIP:TOO: [5]: 4 - [1676465494.927013][27828:27830] CHIP:TOO: [6]: 5 - [1676465494.927020][27828:27830] CHIP:TOO: [7]: 6 - [1676465494.927026][27828:27830] CHIP:TOO: [8]: 7 - [1676465494.927037][27828:27830] CHIP:TOO: [9]: 8 - [1676465494.927043][27828:27830] CHIP:TOO: [10]: 9 - [1676465494.927049][27828:27830] CHIP:TOO: [11]: 10 - [1676465494.927056][27828:27830] CHIP:TOO: [12]: 11 - [1676465494.927151][27828:27830] CHIP:EM: <<< [E:22786i S:33761 M:187792061 (Ack:125860330)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) - [1676465494.927165][27828:27830] CHIP:IN: (S) Sending msg 187792061 on secure session with LSID: 33761 + Below is the example log which is observed in the RPI platform the value may be differ based on the dut implementation. + + + [1686205705.406393][87308:87310] CHIP:DMG: InteractionModelRevision = 1 + [1686205705.406398][87308:87310] CHIP:DMG: } + [1686205705.406480][87308:87310] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0200 Attribute 0x0000_FFFA DataVersion: 1492393553 + [1686205705.406516][87308:87310] CHIP:TOO: EventList: 0 entries + [1686205705.406573][87308:87310] CHIP:EM: <<< [E:31574i S:8973 M:178548658 (Ack:33480356)] (S) Msg TX to 1:0000000000000001 [6D93] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1686205705.406586][87308:87310] CHIP:IN: (S) Sending msg 178548658 on secure session with LSID: 8973 + [1686205705.406613][87308:87310] CHIP:EM: Flushed pending ack for MessageCounter:33480356 on exchange 31574i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PCC.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -676,7 +668,7 @@ tests: [1650441052.209350][7168:7173] CHIP:TOO: AcceptedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PCC.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -701,7 +693,7 @@ tests: [1650441182.692505][7174:7179] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0200 Attribute 0x0000_FFF8 DataVersion: 57416550 [1650441182.692600][7174:7179] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PCC.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_PMHCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PMHCONC_1_1.yaml index e514d3e4a5ffc3..1ea2ab1c48abe4 100644 --- a/src/app/tests/suites/certification/Test_TC_PMHCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PMHCONC_1_1.yaml @@ -313,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm1concentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1685965930.706971][11849:11851] CHIP:TOO: AttributeList: 17 entries + [1685965930.707011][11849:11851] CHIP:TOO: [1]: 0 + [1685965930.707045][11849:11851] CHIP:TOO: [2]: 1 + [1685965930.707076][11849:11851] CHIP:TOO: [3]: 2 + [1685965930.707107][11849:11851] CHIP:TOO: [4]: 3 + [1685965930.707138][11849:11851] CHIP:TOO: [5]: 4 + [1685965930.707169][11849:11851] CHIP:TOO: [6]: 5 + [1685965930.707200][11849:11851] CHIP:TOO: [7]: 6 + [1685965930.707231][11849:11851] CHIP:TOO: [8]: 7 + [1685965930.707262][11849:11851] CHIP:TOO: [9]: 8 + [1685965930.707293][11849:11851] CHIP:TOO: [10]: 9 + [1685965930.707324][11849:11851] CHIP:TOO: [11]: 10 + [1685965930.707356][11849:11851] CHIP:TOO: [12]: 65528 + [1685965930.707387][11849:11851] CHIP:TOO: [13]: 65529 + [1685965930.707418][11849:11851] CHIP:TOO: [14]: 65530 + [1685965930.707449][11849:11851] CHIP:TOO: [15]: 65531 + [1685965930.707480][11849:11851] CHIP:TOO: [16]: 65532 + [1685965930.707511][11849:11851] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm1concentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042C Attribute 0x0000_FFFA DataVersion: 435533597 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,62 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm1concentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042C Attribute 0x0000_FFF9 DataVersion: 435533597 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm1concentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042C Attribute 0x0000_FFF8 DataVersion: 435533597 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_PMICONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PMICONC_1_1.yaml index 7e1a627a869fde..e5a30836467c32 100644 --- a/src/app/tests/suites/certification/Test_TC_PMICONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PMICONC_1_1.yaml @@ -39,7 +39,6 @@ tests: constraints: type: int16u - # TODO: Re-enable when #27248 is fixed - label: "Step 3a: Read the global attribute: FeatureMap and check for either bit 0 or 1 set" @@ -314,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm25concentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1685965930.706971][11849:11851] CHIP:TOO: AttributeList: 17 entries + [1685965930.707011][11849:11851] CHIP:TOO: [1]: 0 + [1685965930.707045][11849:11851] CHIP:TOO: [2]: 1 + [1685965930.707076][11849:11851] CHIP:TOO: [3]: 2 + [1685965930.707107][11849:11851] CHIP:TOO: [4]: 3 + [1685965930.707138][11849:11851] CHIP:TOO: [5]: 4 + [1685965930.707169][11849:11851] CHIP:TOO: [6]: 5 + [1685965930.707200][11849:11851] CHIP:TOO: [7]: 6 + [1685965930.707231][11849:11851] CHIP:TOO: [8]: 7 + [1685965930.707262][11849:11851] CHIP:TOO: [9]: 8 + [1685965930.707293][11849:11851] CHIP:TOO: [10]: 9 + [1685965930.707324][11849:11851] CHIP:TOO: [11]: 10 + [1685965930.707356][11849:11851] CHIP:TOO: [12]: 65528 + [1685965930.707387][11849:11851] CHIP:TOO: [13]: 65529 + [1685965930.707418][11849:11851] CHIP:TOO: [14]: 65530 + [1685965930.707449][11849:11851] CHIP:TOO: [15]: 65531 + [1685965930.707480][11849:11851] CHIP:TOO: [16]: 65532 + [1685965930.707511][11849:11851] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -323,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm25concentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042A Attribute 0x0000_FFFA DataVersion: 3260928085 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -331,10 +406,62 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm25concentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042A Attribute 0x0000_FFF9 DataVersion: 3260928085 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7b: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm25concentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042A Attribute 0x0000_FFF8 DataVersion: 3260928085 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_PMKCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PMKCONC_1_1.yaml index 6c3ebb0be05870..7184fa2ffd1079 100644 --- a/src/app/tests/suites/certification/Test_TC_PMKCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PMKCONC_1_1.yaml @@ -313,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm10concentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1685965930.706971][11849:11851] CHIP:TOO: AttributeList: 17 entries + [1685965930.707011][11849:11851] CHIP:TOO: [1]: 0 + [1685965930.707045][11849:11851] CHIP:TOO: [2]: 1 + [1685965930.707076][11849:11851] CHIP:TOO: [3]: 2 + [1685965930.707107][11849:11851] CHIP:TOO: [4]: 3 + [1685965930.707138][11849:11851] CHIP:TOO: [5]: 4 + [1685965930.707169][11849:11851] CHIP:TOO: [6]: 5 + [1685965930.707200][11849:11851] CHIP:TOO: [7]: 6 + [1685965930.707231][11849:11851] CHIP:TOO: [8]: 7 + [1685965930.707262][11849:11851] CHIP:TOO: [9]: 8 + [1685965930.707293][11849:11851] CHIP:TOO: [10]: 9 + [1685965930.707324][11849:11851] CHIP:TOO: [11]: 10 + [1685965930.707356][11849:11851] CHIP:TOO: [12]: 65528 + [1685965930.707387][11849:11851] CHIP:TOO: [13]: 65529 + [1685965930.707418][11849:11851] CHIP:TOO: [14]: 65530 + [1685965930.707449][11849:11851] CHIP:TOO: [15]: 65531 + [1685965930.707480][11849:11851] CHIP:TOO: [16]: 65532 + [1685965930.707511][11849:11851] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm10concentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042D Attribute 0x0000_FFFA DataVersion: 3341825536 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,62 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm10concentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042D Attribute 0x0000_FFF9 DataVersion: 3341825536 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and + (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range + (0x0001 - 0xFFF1)" + verification: | + ./chip-tool pm10concentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042D Attribute 0x0000_FFF8 DataVersion: 3341825536 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_PRS_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PRS_1_1.yaml index 402ab1e2e773c2..c0d8aa716b2a09 100644 --- a/src/app/tests/suites/certification/Test_TC_PRS_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PRS_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: Read the global attribute: ClusterRevision" - PICS: PRS.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -40,8 +39,8 @@ tests: constraints: type: int16u - - label: "Step 3a: Read the global attribute: FeatureMap" - PICS: PRS.S.Afffc && !PRS.S.F00 + - label: "Step 3: Read the global attribute: FeatureMap" + PICS: " !PRS.S.F00 " command: "readAttribute" attribute: "FeatureMap" response: @@ -50,18 +49,18 @@ tests: type: bitmap32 - label: - "Step 3b: Given PRS.S.F00(EXT) ensure featuremap has the correct bit + "Step 3: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set" command: "readAttribute" attribute: "FeatureMap" - PICS: PRS.S.F00 && PRS.S.Afffc + PICS: PRS.S.F00 response: constraints: type: bitmap32 hasMasksSet: [0x1] - label: "Step 4a: Read the global mandatory attribute: AttributeList" - PICS: PICS_EVENT_LIST_ENABLED && PRS.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -70,7 +69,7 @@ tests: contains: [0, 1, 2, 65528, 65529, 65530, 65531, 65532, 65533] - label: "Step 4a: Read the global mandatory attribute: AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED && PRS.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -80,7 +79,7 @@ tests: - label: "Step 4b: Read the optional attribute(ScaledValue) in AttributeList" - PICS: PRS.S.A0010 && PRS.S.Afffb + PICS: PRS.S.A0010 command: "readAttribute" attribute: "AttributeList" response: @@ -90,7 +89,7 @@ tests: - label: "Step 4c: Read the optional attribute(MinScaledValue) in AttributeList" - PICS: PRS.S.A0011 && PRS.S.Afffb + PICS: PRS.S.A0011 command: "readAttribute" attribute: "AttributeList" response: @@ -100,7 +99,7 @@ tests: - label: "Step 4d: Read the optional attribute(MaxScaledValue) in AttributeList" - PICS: PRS.S.A0012 && PRS.S.Afffb + PICS: PRS.S.A0012 command: "readAttribute" attribute: "AttributeList" response: @@ -109,7 +108,7 @@ tests: contains: [18] - label: "Step 4e: Read the optional attribute(Scale) in AttributeList" - PICS: PRS.S.A0014 && PRS.S.Afffb + PICS: PRS.S.A0014 command: "readAttribute" attribute: "AttributeList" response: @@ -118,7 +117,7 @@ tests: contains: [20] - label: "Step 4f: Read the optional attribute(Tolerance) in AttributeList" - PICS: PRS.S.A0003 && PRS.S.Afffb + PICS: PRS.S.A0003 command: "readAttribute" attribute: "AttributeList" response: @@ -129,7 +128,7 @@ tests: - label: "Step 4g: Read the optional attribute(ScaledTolerance) in AttributeList" - PICS: PRS.S.A0013 && PRS.S.Afffb + PICS: PRS.S.A0013 command: "readAttribute" attribute: "AttributeList" response: @@ -168,7 +167,7 @@ tests: [1676289596.056791][4588:4590] CHIP:EM: <<< [E:36844i M:6918347 (Ack:1600359)] (S) Msg TX to 1:000000000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PRS.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -177,27 +176,31 @@ tests: value: "y" - label: - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain - values in the Manufacturer Extensible Identifier (MEI) range: - (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range - (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT - contain any values in the Test Vendor or invalid range: (0x0000_0100 - - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + "Step 5: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" verification: | ./chip-tool pressuremeasurement read event-list 1 1 - Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: + Below is the example log which is observed in the RPI platform the value may be differ based on the dut implementation. - [1676465567.401932][27872:27874] CHIP:DMG: } - [1676465567.402017][27872:27874] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0403 Attribute 0x0000_FFFA DataVersion: 2692357783 - [1676465567.402058][27872:27874] CHIP:TOO: EventList: 0 entries - [1676465567.402115][27872:27874] CHIP:EM: <<< [E:42541i S:49177 M:241708356 (Ack:116297335)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) - [1676465567.402128][27872:27874] CHIP:IN: (S) Sending msg 241708356 on secure session with LSID: 49177 + [1686210799.291240][88805:88807] CHIP:DMG: } + [1686210799.291272][88805:88807] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0403 Attribute 0x0000_FFFA DataVersion: 897514884 + [1686210799.291292][88805:88807] CHIP:TOO: EventList: 0 entries + [1686210799.291317][88805:88807] CHIP:EM: <<< [E:36299i S:44480 M:65231550 (Ack:23015388)] (S) Msg TX to 1:0000000000000001 [6D93] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1686210799.291321][88805:88807] CHIP:IN: (S) Sending msg 65231550 on secure session with LSID: 44480 + [1686210799.291331][88805:88807] CHIP:EM: Flushed pending ack for MessageCounter:23015388 on exchange 36299i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PRS.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -224,7 +227,7 @@ tests: [1650367843.973242][4114:4119] CHIP:TOO: AcceptedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PRS.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -251,7 +254,7 @@ tests: [1650367913.285193][4120:4125] CHIP:TOO: GeneratedCommandList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && PRS.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml index 97fa3f103c57b9..daf03596787564 100644 --- a/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml @@ -89,16 +89,14 @@ tests: verification: | ./chip-tool powersourceconfiguration read event-list 1 0 - Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: - - + Verify "EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log: [1676465821.421939][28007:28009] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_002E Attribute 0x0000_FFFA DataVersion: 1659126157 [1676465821.421975][28007:28009] CHIP:TOO: EventList: 0 entries [1676465821.422017][28007:28009] CHIP:EM: <<< [E:59109i S:5686 M:123325798 (Ack:214612225)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck) [1676465821.422029][28007:28009] CHIP:IN: (S) Sending msg 123325798 on secure session with LSID: 5686 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_PSCFG_3_1_Simulated.yaml b/src/app/tests/suites/certification/Test_TC_PSCFG_3_1_Simulated.yaml deleted file mode 100644 index 10e2c6d945ee2e..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_PSCFG_3_1_Simulated.yaml +++ /dev/null @@ -1,159 +0,0 @@ -# Copyright (c) 2021 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: 65.3.1. [TC-PSCFG-3.1] Attributes with client as DUT - -PICS: - - PSCFG.C - - PSCFG.C.AM-READ - - PSCFG.C.AO-READ - - PSCFG.C.AM-WRITE - - PSCFG.C.AO-WRITE - -config: - nodeId: 0x12344321 - cluster: "Power Source Configuration" - endpoint: 0 - -tests: - #- label: "Wait for the device to be commissioned" - # cluster: "DelayCommands" - # command: "WaitForCommissioning" - - - label: "Read attribute: Sources" - PICS: PSCFG.C.AM-READ - wait: "readAttribute" - attribute: "Sources" - - - label: - "Configure TH such that it implements mandatory and none of the - optional attributes of the server-side of the cluster, and that it - also reflects this in global attributes such as FeatureMap and - AttributeList. Commission DUT to TH again." - verification: | - Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client) - - - ./chip-tool powersourceconfiguration read attribute-list 1 0 - - Verify the attribute-list response the TH (all-cluster-minimal-app) log: - - [1663147271.622589][2750:2750] CHIP:IM: Received Read request - [1663147271.622666][2750:2750] CHIP:DMG: ReadRequestMessage = - [1663147271.622692][2750:2750] CHIP:DMG: { - [1663147271.622714][2750:2750] CHIP:DMG: AttributePathIBs = - [1663147271.622739][2750:2750] CHIP:DMG: [ - [1663147271.622789][2750:2750] CHIP:DMG: AttributePathIB = - [1663147271.622821][2750:2750] CHIP:DMG: { - [1663147271.622849][2750:2750] CHIP:DMG: Endpoint = 0x0, - [1663147271.622880][2750:2750] CHIP:DMG: Cluster = 0x2e, - [1663147271.622914][2750:2750] CHIP:DMG: Attribute = 0x0000_FFFB, - [1663147271.622943][2750:2750] CHIP:DMG: } - [1663147271.622971][2750:2750] CHIP:DMG: - [1663147271.622996][2750:2750] CHIP:DMG: ], - [1663147271.623023][2750:2750] CHIP:DMG: - [1663147271.623049][2750:2750] CHIP:DMG: isFabricFiltered = true, - [1663147271.623074][2750:2750] CHIP:DMG: InteractionModelRevision = 1 - [1663147271.623097][2750:2750] CHIP:DMG: }, - [1663147271.623168][2750:2750] CHIP:DMG: IM RH moving to [GeneratingReports] - [1663147271.623246][2750:2750] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0 - [1663147271.623274][2750:2750] CHIP:DMG: Cluster 2e, Attribute fffb is dirty - - ./chip-tool powersourceconfiguration read feature-map 1 0 - - Verify the feature-map response the TH (all-cluster-minimal-app) log: - - [1676551043.650050][58234:58234] CHIP:IM: Received Read request - [1676551043.650118][58234:58234] CHIP:DMG: ReadRequestMessage = - [1676551043.650132][58234:58234] CHIP:DMG: { - [1676551043.650139][58234:58234] CHIP:DMG: AttributePathIBs = - [1676551043.650148][58234:58234] CHIP:DMG: [ - [1676551043.650155][58234:58234] CHIP:DMG: AttributePathIB = - [1676551043.650164][58234:58234] CHIP:DMG: { - [1676551043.650174][58234:58234] CHIP:DMG: Endpoint = 0x0, - [1676551043.650183][58234:58234] CHIP:DMG: Cluster = 0x2e, - [1676551043.650193][58234:58234] CHIP:DMG: Attribute = 0x0000_FFFC, - [1676551043.650203][58234:58234] CHIP:DMG: } - [1676551043.650218][58234:58234] CHIP:DMG: - [1676551043.650227][58234:58234] CHIP:DMG: ], - [1676551043.650241][58234:58234] CHIP:DMG: - [1676551043.650251][58234:58234] CHIP:DMG: isFabricFiltered = true, - [1676551043.650261][58234:58234] CHIP:DMG: InteractionModelRevision = 1 - [1676551043.650269][58234:58234] CHIP:DMG: }, - - - ./chip-tool powersourceconfiguration read sources 1 0 - - verify the " sources response" on the TH (all-cluster-minimal-app) log: - - [1650881032.387446][2715:2715] CHIP:IM: Received Read request - [1650881032.387500][2715:2715] CHIP:DMG: ReadRequestMessage = - [1650881032.387527][2715:2715] CHIP:DMG: { - [1650881032.387549][2715:2715] CHIP:DMG: AttributePathIBs = - [1650881032.387578][2715:2715] CHIP:DMG: [ - [1650881032.387602][2715:2715] CHIP:DMG: AttributePathIB = - [1650881032.387629][2715:2715] CHIP:DMG: { - [1650881032.387657][2715:2715] CHIP:DMG: Endpoint = 0x0, - [1650881032.387690][2715:2715] CHIP:DMG: Cluster = 0x2e, - [1650881032.387722][2715:2715] CHIP:DMG: Attribute = 0x0000_0000, - [1650881032.387750][2715:2715] CHIP:DMG: } - [1650881032.387781][2715:2715] CHIP:DMG: - [1650881032.387807][2715:2715] CHIP:DMG: ], - [1650881032.387836][2715:2715] CHIP:DMG: - [1650881032.387862][2715:2715] CHIP:DMG: isFabricFiltered = true, - [1650881032.387887][2715:2715] CHIP:DMG: InteractionModelRevision = 1 - [1650881032.387910][2715:2715] CHIP:DMG: }, - [1650881032.387979][2715:2715] CHIP:DMG: IM RH moving to [GeneratingReports] - [1650881032.388058][2715:2715] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0 - [1650881032.388087][2715:2715] CHIP:DMG: Cluster 2e, Attribute 0 is dirty - [1650881032.388109][2715:2715] CHIP:DMG: Reading attribute: Cluster=0x0000_002E Endpoint=0 AttributeId=0x0000_0000 (expanded=0) - cluster: "LogCommands" - command: "UserPrompt" - PICS: PICS_SKIP_SAMPLE_APP - arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" - - - label: - "DUT reads all supported optional attributes from TH one at a time in - a manufacturer specific order" - verification: | - This cluster doesn't have any optional attribute - cluster: "LogCommands" - command: "UserPrompt" - PICS: PICS_SKIP_SAMPLE_APP - arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" - - - label: - "DUT writes a suitable value to all supported optional attributes on - the TH one at a time in a manufacturer specific order" - verification: | - This cluster doesn't have any writable attributes - cluster: "LogCommands" - command: "UserPrompt" - PICS: PICS_SKIP_SAMPLE_APP - arguments: - values: - - name: "message" - value: "Enter 'y' after success" - - name: "expectedValue" - value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml index a4173700ab36e5..a7c768b7d70c4f 100644 --- a/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml @@ -214,13 +214,11 @@ tests: IDs." verification: | ./chip-tool powersource read event-list 1 1 - On TH(chip-tool), Verify that the DUT response provides a list of supported events. This list can be empty or contain following optional event IDs: if PS.S.E00(WiredFaultChange) : 0 if PS.S.E01(BatFaultChange): 1 if PS.S.E02(BatChargeFaultChange): 2 Optionally the list can also contain manufacturer specific event IDs. - [1676465733.563197][27987:27989] CHIP:DMG: } [1676465733.563336][27987:27989] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_002F Attribute 0x0000_FFFA DataVersion: 2315782406 [1676465733.563366][27987:27989] CHIP:TOO: EventList: 1 entries @@ -230,7 +228,7 @@ tests: [1676465733.563514][27987:27989] CHIP:EM: Flushed pending ack for MessageCounter:80009006 on exchange 56136i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_PS_2_1.yaml b/src/app/tests/suites/certification/Test_TC_PS_2_1.yaml index bbb1476278d079..f03d09dd85779d 100644 --- a/src/app/tests/suites/certification/Test_TC_PS_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_PS_2_1.yaml @@ -252,7 +252,7 @@ tests: attribute: "BatCommonDesignation" response: constraints: - type: int32u + type: enum16 minValue: 0 maxValue: 80 @@ -284,7 +284,7 @@ tests: attribute: "BatApprovedChemistry" response: constraints: - type: int32u + type: enum16 minValue: 0 maxValue: 32 diff --git a/src/app/tests/suites/certification/Test_TC_REFALM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_REFALM_1_1.yaml index 57410bc6a0eed5..a13b45da41082a 100644 --- a/src/app/tests/suites/certification/Test_TC_REFALM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_REFALM_1_1.yaml @@ -80,7 +80,6 @@ tests: ./chip-tool refrigeratoralarm read event-list 1 1 Verify " EventList attribute " consists the list may contain optional events(1) on the TH(Chip-tool) Log: Below is the sample log provided for the raspi platform: - [1689677416.105596][18367:18369] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0057 Attribute 0x0000_FFFA DataVersion: 1517282962 [1689677416.105625][18367:18369] CHIP:TOO: EventList: 1 entries [1689677416.105635][18367:18369] CHIP:TOO: [1]: 0 diff --git a/src/app/tests/suites/certification/Test_TC_REFALM_2_2.yaml b/src/app/tests/suites/certification/Test_TC_REFALM_2_2.yaml index 108b767c66978f..ac82c955979496 100644 --- a/src/app/tests/suites/certification/Test_TC_REFALM_2_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_REFALM_2_2.yaml @@ -33,21 +33,26 @@ tests: - label: "Step 2: Ensure that the door on the DUT is closed" verification: | - + Ensure that the door on the DUT is closed disabled: true - label: "Step 3: TH reads from the DUT the State attribute" PICS: REFALM.S.A0002 verification: | - Verify that the DUT response contains a 32-bit value with bit 0 set to 0 + ./chip-tool refrigeratoralarm read state 1 1 + On TH(chip-tool), Verify that the DUT response contains a 32-bit value with bit 0 set to 0. + + [1688447820.603249][4247:4249] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0057 Attribute 0x0000_0002 DataVersion: 1795162772 + [1688447820.603415][4247:4249] CHIP:TOO: State: 1 + [1688447820.603708][4247:4249] CHIP:EM: <<< [E:2198i S:4260 M:156565261 (Ack:46517349)] (S) Msg TX to 1:0000000000000001 [10DB] --- Type 0000:10 (SecureChannel:StandaloneAck) disabled: true - label: "Step 4: Manually open the door on the DUT" verification: | - + Manually open the door on the DUT disabled: true - - label: "Step 5: after a few seconds, TH reads State attribute from DUT" + - label: "Step 5: Wait for the time defined in PIXIT.REFALM.AlarmThreshold" verification: | Wait for the time defined in PIXIT.REFALM.AlarmThreshold disabled: true @@ -55,46 +60,72 @@ tests: - label: "Step 6: TH reads from the DUT the State attribute" PICS: REFALM.S.A0002 verification: | - Verify that the DUT response contains a 32-bit value with bit 0 set to 1 + ./chip-tool refrigeratoralarm read state 1 1 + On TH(chip-tool), Verify that the DUT response contains a 32-bit value with bit 0 set to 0. + + [1688447820.603249][4247:4249] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0057 Attribute 0x0000_0002 DataVersion: 1795162772 + [1688447820.603415][4247:4249] CHIP:TOO: State: 1 + [1688447820.603708][4247:4249] CHIP:EM: <<< [E:2198i S:4260 M:156565261 (Ack:46517349)] (S) Msg TX to 1:0000000000000001 [10DB] --- Type 0000:10 (SecureChannel:StandaloneAck) disabled: true - label: "Step 7: Ensure that the door on the DUT is closed" verification: | - + Ensure that the door on the DUT is closed disabled: true - label: "Step 8: TH reads from the DUT the State attribute" PICS: REFALM.S.A0002 verification: | - Verify that the DUT response contains a 32-bit value with bit 0 set to 0 + ./chip-tool refrigeratoralarm read state 1 1 + On TH(chip-tool), Verify that the DUT response contains a 32-bit value with bit 0 set to 0. + + [1688447820.603249][4247:4249] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0057 Attribute 0x0000_0002 DataVersion: 1795162772 + [1688447820.603415][4247:4249] CHIP:TOO: State: 0 + [1688447820.603708][4247:4249] CHIP:EM: <<< [E:2198i S:4260 M:156565261 (Ack:46517349)] (S) Msg TX to 1:0000000000000001 [10DB] --- Type 0000:10 (SecureChannel:StandaloneAck) disabled: true - label: "Step 9: TH sends Reset command to the DUT" PICS: REFALM.S.C00.Rsp verification: | - Verify DUT responds w/ status UNSUPPORTED_COMMAND(0x81) + Reset command is not implemeted in Chip-tool disabled: true - label: "Step 10: TH sends ModifyEnabledAlarms command to the DUT" PICS: REFALM.S.C01.Rsp verification: | - Verify DUT responds w/ status UNSUPPORTED_COMMAND(0x81) + ModifyEnabledAlarms is not implemeted in Chip-tool disabled: true - label: "Step 11: Set up subscription to the Notify event." PICS: REFALM.S.E00 && REFALM.S.A0002 verification: | - Verify that the DUT response contains a 32-bit value with bit 0 set to 0 + Please use Interactive mode to subscribe the OperationalError event + Here the command to enter interactive mode after provision :- + ./chip-tool interactive start + + Please subscribe to the Notify event by sending below mentioned command + refrigeratoralarm subscribe-event notify 2 10 1 1 + + [1690959967.087585][3549:3551] CHIP:EM: Rxd Ack; Removing MessageCounter:144404037 from Retrans Table on exchange 19895i + [1690959967.087651][3549:3551] CHIP:DMG: ReportDataMessage = + [1690959967.087684][3549:3551] CHIP:DMG: { + [1690959967.087712][3549:3551] CHIP:DMG: SubscriptionId = 0x959257ec, + [1690959967.087743][3549:3551] CHIP:DMG: InteractionModelRevision = 1 + [1690959967.087770][3549:3551] CHIP:DMG: } + [1690959967.087813][3549:3551] CHIP:DMG: MoveToState ReadClient[0xffff80010ac0]: Moving to [AwaitingSu] + [1690959967.087923][3549:3551] CHIP:EM: <<< [E:19895i S:58037 M:144404038 (Ack:133694741)] (S) Msg TX to 1:0000000000000001 [7C8C] --- Type 0001:01 (IM:StatusResponse) + [1690959967.087966][3549:3551] CHIP:IN: (S) Sending msg 144404038 on secure session with LSID: 58037 disabled: true - label: "Step 12: Repeat steps 4 then 5" PICS: REFALM.S.E00 verification: | - After step 5 (repeated), receive a Notify event with the State attribute bit 0 set to 1. + Repeat steps 4 - Manually open the door on the DUT + then 5 - Wait for the time defined in PIXIT.REFALM.AlarmThreshold disabled: true - label: "Step 13: Repeat step 7" PICS: REFALM.S.E00 verification: | - Receive a Notify event with the State attribute bit 0 set to 0. + Repeat step 7 - that is Ensure that the door on the DUT is closed disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RH_1_1.yaml b/src/app/tests/suites/certification/Test_TC_RH_1_1.yaml index 59d78f962099e6..47c2f78e3c9ad3 100644 --- a/src/app/tests/suites/certification/Test_TC_RH_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_RH_1_1.yaml @@ -99,14 +99,12 @@ tests: ./chip-tool relativehumiditymeasurement read event-list 1 1 Verify " EventList " consists the list of supported events, in this cluster in RPI the value is 0 on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - [1676357956.011759][8095:8097] CHIP:DMG: } [1676357956.011914][8095:8097] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0405 Attribute 0x0000_FFFA DataVersion: 3619476420 [1676357956.011967][8095:8097] CHIP:TOO: EventList: 0 entries - cluster: "LogCommands" cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_RNCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_RNCONC_1_1.yaml index 87ff6e151b4ef5..34fc1cd767ad2d 100644 --- a/src/app/tests/suites/certification/Test_TC_RNCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_RNCONC_1_1.yaml @@ -313,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4l: TH reads the AttributeList attribute from the DUT. 1.The + list SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.The list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool radonconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1687339472.989878][5068:5070] CHIP:TOO: AttributeList: 17 entries + [1687339472.989951][5068:5070] CHIP:TOO: [1]: 0 + [1687339472.990012][5068:5070] CHIP:TOO: [2]: 1 + [1687339472.990070][5068:5070] CHIP:TOO: [3]: 2 + [1687339472.990128][5068:5070] CHIP:TOO: [4]: 3 + [1687339472.990186][5068:5070] CHIP:TOO: [5]: 4 + [1687339472.990243][5068:5070] CHIP:TOO: [6]: 5 + [1687339472.990301][5068:5070] CHIP:TOO: [7]: 6 + [1687339472.990358][5068:5070] CHIP:TOO: [8]: 7 + [1687339472.990415][5068:5070] CHIP:TOO: [9]: 8 + [1687339472.990473][5068:5070] CHIP:TOO: [10]: 9 + [1687339472.990531][5068:5070] CHIP:TOO: [11]: 10 + [1687339472.990590][5068:5070] CHIP:TOO: [12]: 65528 + [1687339472.990648][5068:5070] CHIP:TOO: [13]: 65529 + [1687339472.990707][5068:5070] CHIP:TOO: [14]: 65530 + [1687339472.990765][5068:5070] CHIP:TOO: [15]: 65531 + [1687339472.990824][5068:5070] CHIP:TOO: [16]: 65532 + [1687339472.990882][5068:5070] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool radonconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042F Attribute 0x0000_FFFA DataVersion: 3741862926 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,64 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool radonconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042F Attribute 0x0000_FFF9 DataVersion: 3741862926 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool radonconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042F Attribute 0x0000_FFF8 DataVersion: 3741862926 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_1.yaml index 2120365090be5e..b2944016faeebc 100644 --- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_1.yaml @@ -39,7 +39,7 @@ tests: constraints: type: int16u - - label: "TH reads the FeatureMap attribute from the DUT" + - label: "Step 3: TH reads the FeatureMap attribute from the DUT" PICS: " !RVCCLEANM.S.F00 " command: "readAttribute" attribute: "FeatureMap" @@ -49,8 +49,8 @@ tests: type: bitmap32 - label: - "Given RVCCLEANM.S.F00(DEPONOFF) ensure featuremap has the correct bit - set" + "Step 3: Given RVCCLEANM.S.F00(DEPONOFF) ensure featuremap has the + correct bit set" PICS: RVCCLEANM.S.F00 command: "readAttribute" attribute: "FeatureMap" @@ -78,8 +78,8 @@ tests: contains: [0, 1, 65528, 65529, 65531, 65532, 65533] - label: - "TH reads the optional attribute(StartUpMode) in AttributeList from - the DUT" + "Step 4b: TH reads the optional attribute(StartUpMode) in + AttributeList from the DUT" PICS: RVCCLEANM.S.A0002 command: "readAttribute" attribute: "AttributeList" @@ -89,8 +89,8 @@ tests: contains: [2] - label: - "Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional - attribute(OnMode) is in AttributeList from the DUT" + "Step 4c: Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and + optional attribute(OnMode) is in AttributeList from the DUT" PICS: RVCCLEANM.S.F00 command: "readAttribute" attribute: "AttributeList" @@ -100,8 +100,8 @@ tests: contains: [3] - label: - "Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional - attribute(OnMode) is not in AttributeList from the DUT" + "Step 4c: Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and + optional attribute(OnMode) is not in AttributeList from the DUT" PICS: " !RVCCLEANM.S.F00 " command: "readAttribute" attribute: "AttributeList" @@ -110,8 +110,50 @@ tests: type: list excludes: [3] - - label: "Read the global attribute: EventList from the DUT" - PICS: PICS_EVENT_LIST_ENABLED && RVCCLEANM.S.Afffa + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4d: TH reads the AttributeList attribute from the DUT. 1.The + list SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.The list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvccleanmode read attribute-list 1 1 + + Verify the "AttributeList " should include the mandatory attributes (values 0, 1), + - global attributes (value 65533, 65532, 65531, 65530, 65529 and 65528) and + - list may include optional attribute(value 0x0002), if MOD.S.A0002(StartUpMode) supports, + - list contains feature dependent attribute (values 0x0003), if MOD.S.F00(DEPONOFF) is true on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690182240.730688][14970:14972] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_FFFB DataVersion: 3145953005 + [1690182240.730708][14970:14972] CHIP:TOO: AttributeList: 10 entries + [1690182240.730713][14970:14972] CHIP:TOO: [1]: 0 + [1690182240.730716][14970:14972] CHIP:TOO: [2]: 1 + [1690182240.730719][14970:14972] CHIP:TOO: [3]: 2 + [1690182240.730722][14970:14972] CHIP:TOO: [4]: 3 + [1690182240.730725][14970:14972] CHIP:TOO: [5]: 65528 + [1690182240.730728][14970:14972] CHIP:TOO: [6]: 65529 + [1690182240.730731][14970:14972] CHIP:TOO: [7]: 65530 + [1690182240.730734][14970:14972] CHIP:TOO: [8]: 65531 + [1690182240.730737][14970:14972] CHIP:TOO: [9]: 65532 + [1690182240.730740][14970:14972] CHIP:TOO: [10]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList from the DUT" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -120,8 +162,36 @@ tests: type: list - label: - "Read the global attribute AcceptedCommandList. Check if it contains - id 0x0 (ChangeToMode)" + "Step 5b: Read the global attribute: EventList from the DUT. 1.The + list SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvccleanmode read event-list 1 1 + + Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690182289.222668][14980:14982] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_FFFA DataVersion: 3145953005 + [1690182289.222680][14980:14982] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: + "Step 6a: Read the global attribute AcceptedCommandList. Check if it + contains id 0x0 (ChangeToMode)" PICS: RVCCLEANM.S.C00.Rsp command: "readAttribute" attribute: "AcceptedCommandList" @@ -131,8 +201,36 @@ tests: type: list - label: - "Read the global attribute: GeneratedCommandList. Check if it contains - id 0x1 (ChangeToModeResponse)" + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvccleanmode read accepted-command-list 1 1 + + Verify the "AcceptedCommandList" contains a list of mandatory commands (value 0) on the TH (Chip-tool) and below is the sample log provided for the raspi platform: + + [1690182317.442730][14983:14985] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_FFF9 DataVersion: 3145953005 + [1690182317.442800][14983:14985] CHIP:TOO: AcceptedCommandList: 1 entries + [1690182317.442827][14983:14985] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: + "Step 7a: Read the global attribute: GeneratedCommandList. Check if it + contains id 0x1 (ChangeToModeResponse)" PICS: RVCCLEANM.S.C01.Tx command: "readAttribute" attribute: "GeneratedCommandList" @@ -140,3 +238,31 @@ tests: value: [1] constraints: type: list + + - label: + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvccleanmode read generated-command-list 1 1 + + Verify "GeneratedCommandList" contains a list of mandatory commands (value 1) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690182346.463002][14993:14995] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_FFF8 DataVersion: 3145953005 + [1690182346.463028][14993:14995] CHIP:TOO: GeneratedCommandList: 1 entries + [1690182346.463039][14993:14995] CHIP:TOO: [1]: 1 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_2.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_2.yaml deleted file mode 100644 index 2d10dafd07ee91..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_1_2.yaml +++ /dev/null @@ -1,116 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 92.2.1. [TC-RVCCLEANM-1.2] Cluster attributes with DUT as Server - -PICS: - - RVCCLEANM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: "Precondition" - verification: | - This test case is verified after the device is provisioned. Pls provision device first, Pass appropriate nodeID in the below command - disabled: true - - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the SupportedModes attribute." - PICS: RVCCLEANM.S.A0000 - verification: | - ./chip-tool rvccleanmode read supported-modes 1 1 - - Verify that the DUT response contains list of ModeOptionsStruct entries. - - Verify that list should contain at least one entry - - Verify that each ModeOptionsStruct entry has a unique Mode field value and Label field value - - ModeOptionsStruct entry’s ModeTags field is not empty, then Verify the values of the Value fields that are not larger than 16 bits, for each Value field: Is the semantic tag value a defined common tag value (Auto(0x0000), Quick(0x0001), Quiet(0x0002), LowNoise(0x0003), LowEnergy(0x0004), Vacation(0x0005), Min(0x0006), Max(0x0007), Night(0x0008), Day(0x0009)) or a defined cluster alias tag value (RapidCool, RapidFreeze) or in the MfgTags (0x8000 to 0xBFFF) range - - If the Value field is in the MfgTags (0x8000 to 0xBFFF) range, the TagName field is a string with a length between 1 and 64 - - Verify that at least one ModeOptionsStruct entry includes either the RapidCool semantic tag or the RapidFreeze semantic tag in the SemanticTags field - - Save the Mode field values as supported_modes_dut on the TH (Chip-tool) and below is the sample log provided for the raspi platform: - - [1690182376.583167][14996:14998] CHIP:DMG: } - [1690182376.583260][14996:14998] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0000 DataVersion: 3145953005 - [1690182376.583288][14996:14998] CHIP:TOO: SupportedModes: 3 entries - [1690182376.583301][14996:14998] CHIP:TOO: [1]: { - [1690182376.583304][14996:14998] CHIP:TOO: Label: Vacuum - [1690182376.583307][14996:14998] CHIP:TOO: Mode: 0 - [1690182376.583311][14996:14998] CHIP:TOO: ModeTags: 1 entries - [1690182376.583316][14996:14998] CHIP:TOO: [1]: { - [1690182376.583319][14996:14998] CHIP:TOO: Value: 16385 - [1690182376.583322][14996:14998] CHIP:TOO: } - [1690182376.583325][14996:14998] CHIP:TOO: } - [1690182376.583331][14996:14998] CHIP:TOO: [2]: { - [1690182376.583333][14996:14998] CHIP:TOO: Label: Wash - [1690182376.583336][14996:14998] CHIP:TOO: Mode: 1 - [1690182376.583340][14996:14998] CHIP:TOO: ModeTags: 1 entries - [1690182376.583344][14996:14998] CHIP:TOO: [1]: { - [1690182376.583347][14996:14998] CHIP:TOO: Value: 16386 - [1690182376.583349][14996:14998] CHIP:TOO: } - [1690182376.583352][14996:14998] CHIP:TOO: } - [1690182376.583357][14996:14998] CHIP:TOO: [3]: { - [1690182376.583360][14996:14998] CHIP:TOO: Label: Deep clean - [1690182376.583362][14996:14998] CHIP:TOO: Mode: 2 - [1690182376.583366][14996:14998] CHIP:TOO: ModeTags: 2 entries - [1690182376.583369][14996:14998] CHIP:TOO: [1]: { - [1690182376.583372][14996:14998] CHIP:TOO: Value: 7 - [1690182376.583375][14996:14998] CHIP:TOO: } - [1690182376.583378][14996:14998] CHIP:TOO: [2]: { - [1690182376.583380][14996:14998] CHIP:TOO: Value: 16384 - [1690182376.583383][14996:14998] CHIP:TOO: } - [1690182376.583385][14996:14998] CHIP:TOO: } - disabled: true - - - label: "Step 3: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer and the value is from supported_modes_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690182411.579845][15004:15006] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3145953005 - [1690182411.579857][15004:15006] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: "Step 4: TH reads from the DUT the OnMode attribute." - PICS: RVCCLEANM.S.A0003 - verification: | - ./chip-tool rvccleanmode read on-mode 1 1 - - Verify on TH(chip-tool) logs, OnMode attribute value is an integer and the value is from supported_modes_dut (As per spec default value is null) , below is the sample log provided for the raspi platform, Here OnMode attribute value is Null - - [1690182436.721527][15012:15014] CHIP:DMG: } - [1690182436.721673][15012:15014] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0003 DataVersion: 3145953005 - [1690182436.721723][15012:15014] CHIP:TOO: OnMode: null - disabled: true - - - label: "Step 5: TH reads from the DUT the StartUpMode attribute." - PICS: RVCCLEANM.S.A0002 - verification: | - ./chip-tool rvccleanmode read start-up-mode 1 1 - - Verify on TH(chip-tool) logs, StartUpMode attribute value is an integer(As per spec default value is null) and value is from supported_modes_dut, below is the sample log provided for the raspi platform, Here StartUpMode attribute value is Null - - [1690182475.587786][15022:15024] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0002 DataVersion: 3145953005 - [1690182475.587797][15022:15024] CHIP:TOO: StartUpMode: null - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_2_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_2_1.yaml deleted file mode 100644 index 4d0da130791b6c..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_2_1.yaml +++ /dev/null @@ -1,241 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 92.3.1. [TC-RVCCLEANM-2.1] Change to Mode functionality with DUT as Server - -PICS: - - RVCCLEANM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the SupportedModes attribute." - PICS: RVCCLEANM.S.A0000 - verification: | - ./chip-tool rvccleanmode read supported-modes 1 1 - - Verify that the DUT response contains list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut on the TH (Chip-tool) and below is the sample log provided for the raspi platform: - - [1690182376.583260][14996:14998] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0000 DataVersion: 3145953005 - [1690182376.583288][14996:14998] CHIP:TOO: SupportedModes: 3 entries - [1690182376.583301][14996:14998] CHIP:TOO: [1]: { - [1690182376.583304][14996:14998] CHIP:TOO: Label: Vacuum - [1690182376.583307][14996:14998] CHIP:TOO: Mode: 0 - [1690182376.583311][14996:14998] CHIP:TOO: ModeTags: 1 entries - [1690182376.583316][14996:14998] CHIP:TOO: [1]: { - [1690182376.583319][14996:14998] CHIP:TOO: Value: 16385 - [1690182376.583322][14996:14998] CHIP:TOO: } - [1690182376.583325][14996:14998] CHIP:TOO: } - [1690182376.583331][14996:14998] CHIP:TOO: [2]: { - [1690182376.583333][14996:14998] CHIP:TOO: Label: Wash - [1690182376.583336][14996:14998] CHIP:TOO: Mode: 1 - [1690182376.583340][14996:14998] CHIP:TOO: ModeTags: 1 entries - [1690182376.583344][14996:14998] CHIP:TOO: [1]: { - [1690182376.583347][14996:14998] CHIP:TOO: Value: 16386 - [1690182376.583349][14996:14998] CHIP:TOO: } - [1690182376.583352][14996:14998] CHIP:TOO: } - [1690182376.583357][14996:14998] CHIP:TOO: [3]: { - [1690182376.583360][14996:14998] CHIP:TOO: Label: Deep clean - [1690182376.583362][14996:14998] CHIP:TOO: Mode: 2 - [1690182376.583366][14996:14998] CHIP:TOO: ModeTags: 2 entries - [1690182376.583369][14996:14998] CHIP:TOO: [1]: { - [1690182376.583372][14996:14998] CHIP:TOO: Value: 7 - [1690182376.583375][14996:14998] CHIP:TOO: } - [1690182376.583378][14996:14998] CHIP:TOO: [2]: { - [1690182376.583380][14996:14998] CHIP:TOO: Value: 16384 - [1690182376.583383][14996:14998] CHIP:TOO: } - [1690182376.583385][14996:14998] CHIP:TOO: } - disabled: true - - - label: "Step 3: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut - - Select a value which is NOT in supported_modes_dut and save it as invalid_mode_th, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690182411.579845][15004:15006] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3145953005 - [1690182411.579857][15004:15006] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 4: TH sends a ChangeToMode command to the DUT with NewMode set - to old_current_mode_dut" - PICS: RVCCLEANM.S.C00.Rsp - verification: | - ./chip-tool rvccleanmode change-to-mode 0 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690182553.733326][15036:15038] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Command 0x0000_0001 - [1690182553.733341][15036:15038] CHIP:TOO: ChangeToModeResponse: { - [1690182553.733348][15036:15038] CHIP:TOO: status: 0 - [1690182553.733351][15036:15038] CHIP:TOO: } - disabled: true - - - label: - "Step 5: Manually put the device in a state from which it will FAIL to - transition to PIXIT.RVCCLEANM.MODE_CHANGE_FAIL" - PICS: PIXIT.RVCCLEANM.CAN_TEST_MODE_FAILURE - verification: | - Manual operation required - disabled: true - - - label: "Step 6: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690182411.579845][15004:15006] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3145953005 - [1690182411.579857][15004:15006] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set - to PIXIT.RVCCLEANM.MODE_CHANGE_FAIL" - PICS: PIXIT.RVCCLEANM.CAN_TEST_MODE_FAILURE && RVCCLEANM.S.C00.Rsp - verification: | - First change the mode to cleaning after that try to change the mode to any other modes (Vaccum, Deep clean, Wash ) - - ./chip-tool rvcrunmode change-to-mode 1 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690262143.410054][28190:28192] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690262143.410070][28190:28192] CHIP:TOO: ChangeToModeResponse: { - [1690262143.410076][28190:28192] CHIP:TOO: status: 0 - [1690262143.410079][28190:28192] CHIP:TOO: } - - ./chip-tool rvccleanmode change-to-mode 2 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a GenericFailure(0x02) status response and StatusText field has a length between 1 and 64, below is the sample log provided for the raspi platform: - - [1690262155.519185][28202:28204] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Command 0x0000_0001 - [1690262155.519202][28202:28204] CHIP:TOO: ChangeToModeResponse: { - [1690262155.519206][28202:28204] CHIP:TOO: status: 64 - [1690262155.519210][28202:28204] CHIP:TOO: statusText: Cannot change the cleaning mode during a clean - [1690262155.519213][28202:28204] CHIP:TOO: } - disabled: true - - - label: "Step 8: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool), CurrentMode attribute value is an integer value and equal to old_current_mode_dut below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690182411.579845][15004:15006] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3145953005 - [1690182411.579857][15004:15006] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 9: Manually put the device in a state from which it will - SUCCESSFULLY transition to PIXIT.RVCCLEANM.MODE_CHANGE_OK" - verification: | - Manual operation required - disabled: true - - - label: "Step 10: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690182411.579845][15004:15006] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3145953005 - [1690182411.579857][15004:15006] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 11: TH sends a ChangeToMode command to the DUT with NewMode set - to PIXIT.RVCCLEANM.MODE_CHANGE_OK" - PICS: RVCCLEANM.S.C00.Rsp - verification: | - Change to mode is not allowed from cleaning to any other mode(Vaccum, Deep clean, Wash ), Please switch the mode to idle and then try to change to other modes - - ./chip-tool rvcrunmode change-to-mode 0 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690262367.604437][28315:28317] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690262367.604496][28315:28317] CHIP:TOO: ChangeToModeResponse: { - [1690262367.604517][28315:28317] CHIP:TOO: status: 0 - [1690262367.604529][28315:28317] CHIP:TOO: } - - - ./chip-tool rvccleanmode change-to-mode 2 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690262376.067598][28323:28325] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Command 0x0000_0001 - [1690262376.067612][28323:28325] CHIP:TOO: ChangeToModeResponse: { - [1690262376.067618][28323:28325] CHIP:TOO: status: 0 - [1690262376.067621][28323:28325] CHIP:TOO: } - disabled: true - - - label: "Step 12: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value and same as step 11, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 2 - - [1690262464.326501][28342:28344] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 2064453499 - [1690262464.326542][28342:28344] CHIP:TOO: CurrentMode: 2 - disabled: true - - - label: - "Step 13: TH sends a ChangeToMode command to the DUT with NewMode set - to invalid_mode_th" - PICS: RVCCLEANM.S.C00.Rsp - verification: | - ./chip-tool rvccleanmode change-to-mode 4 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a UnsupportedMode(0x01) status response and below is the sample log provided for the raspi platform: - - [1690262496.596029][28351:28353] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Command 0x0000_0001 - [1690262496.596080][28351:28353] CHIP:TOO: ChangeToModeResponse: { - [1690262496.596117][28351:28353] CHIP:TOO: status: 1 - [1690262496.596120][28351:28353] CHIP:TOO: } - disabled: true - - - label: "Step 14: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value and same as step 12, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 2 - - [1690262464.326501][28342:28344] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 2064453499 - [1690262464.326542][28342:28344] CHIP:TOO: CurrentMode: 2 - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_2.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_2.yaml deleted file mode 100644 index 5e5b97cf0cd5a0..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_2.yaml +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 92.4.2. [TC-RVCCLEANM-3.2] Startup Mode functionality with DUT as Server - -PICS: - - RVCCLEANM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: "Precondition" - verification: | - This test case is verified after the device is provisioned. Pls provision device first, Pass appropriate nodeID in the below command - disabled: true - - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the StartUpMode attribute." - PICS: RVCCLEANM.S.A0002 - verification: | - ./chip-tool rvccleanmode read start-up-mode 1 1 - - On TH(chip-tool), Verify StartUpMode attribute value is an integer value or null - - Save the value as startup_mode_dut and below is the sample log provided for the raspi platform, Here StartUpMode value is null - - NOTE: if startup_mode_dut is null proceed to step 3. Else save startup_mode_dut as new_start_up_mode_th and proceed to step 5. - - [1690545840.189340][3104:3106] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0002 DataVersion: 3338736524 - [1690545840.189408][3104:3106] CHIP:TOO: StartUpMode: null - disabled: true - - - label: "Step 3: TH reads from the DUT the SupportedModes attribute." - PICS: RVCCLEANM.S.A0000 - verification: | - ./chip-tool rvccleanmode read supported-modes 1 1 - - On TH(chip-tool) log, Verify DUT response contains a list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut - - Select a value from supported_modes_dut and save the value as new_start_up_mode_th, below is the sample log provided for the raspi platform: - - [1690183637.107558][15230:15232] CHIP:TOO: SupportedModes: 3 entries - [1690183637.107597][15230:15232] CHIP:TOO: [1]: { - [1690183637.107608][15230:15232] CHIP:TOO: Label: Vacuum - [1690183637.107618][15230:15232] CHIP:TOO: Mode: 0 - [1690183637.107633][15230:15232] CHIP:TOO: ModeTags: 1 entries - [1690183637.107651][15230:15232] CHIP:TOO: [1]: { - [1690183637.107662][15230:15232] CHIP:TOO: Value: 16385 - [1690183637.107670][15230:15232] CHIP:TOO: } - [1690183637.107679][15230:15232] CHIP:TOO: } - [1690183637.107700][15230:15232] CHIP:TOO: [2]: { - [1690183637.107708][15230:15232] CHIP:TOO: Label: Wash - [1690183637.107718][15230:15232] CHIP:TOO: Mode: 1 - [1690183637.107730][15230:15232] CHIP:TOO: ModeTags: 1 entries - [1690183637.107744][15230:15232] CHIP:TOO: [1]: { - [1690183637.107753][15230:15232] CHIP:TOO: Value: 16386 - [1690183637.107765][15230:15232] CHIP:TOO: } - [1690183637.107774][15230:15232] CHIP:TOO: } - [1690183637.107793][15230:15232] CHIP:TOO: [3]: { - [1690183637.107801][15230:15232] CHIP:TOO: Label: Deep clean - [1690183637.107811][15230:15232] CHIP:TOO: Mode: 2 - [1690183637.107823][15230:15232] CHIP:TOO: ModeTags: 2 entries - [1690183637.107837][15230:15232] CHIP:TOO: [1]: { - [1690183637.107846][15230:15232] CHIP:TOO: Value: 7 - [1690183637.107856][15230:15232] CHIP:TOO: } - [1690183637.107885][15230:15232] CHIP:TOO: [2]: { - [1690183637.107888][15230:15232] CHIP:TOO: Value: 16384 - [1690183637.107890][15230:15232] CHIP:TOO: } - [1690183637.107894][15230:15232] CHIP:TOO: } - disabled: true - - - label: - "Step 4: TH writes to the DUT the StartUpMode attribute with the - new_start_up_mode_th value" - PICS: RVCCLEANM.S.A0002 - verification: | - ./chip-tool rvccleanmode write start-up-mode 0 1 1 - - On TH(chip-tool) log, Verify that DUT responds with a successful (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690183561.346360][15209:15211] CHIP:DMG: StatusIB = - [1690183561.346364][15209:15211] CHIP:DMG: { - [1690183561.346367][15209:15211] CHIP:DMG: status = 0x00 (SUCCESS), - [1690183561.346369][15209:15211] CHIP:DMG: }, - disabled: true - - - label: "Step 5: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - On TH(chip-tool), Verify CurrentMode attribute value is an integer value - - Save the value as old_current_mode_dut and below is the sample log provided for the raspi platform, Here CurrentMode value is 0 - - NOTE: If startup_mode_dut is equal to old_current_mode_dut proceed to step 6. Else proceed to step 8. - - [1690183605.342520][15217:15219] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 3992778259 - [1690183605.342539][15217:15219] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: "Step 6: TH reads from the DUT the SupportedModes attribute." - PICS: RVCCLEANM.S.A0000 - verification: | - ./chip-tool rvccleanmode read supported-modes 1 1 - - On TH(chip-tool) log, Verify DUT response contains a list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut - - Select a value from supported_modes_dut different from startup_mode_dut. Save the value as new_mode_th., below is the sample log provided for the raspi platform: - - [1690183637.107558][15230:15232] CHIP:TOO: SupportedModes: 3 entries - [1690183637.107597][15230:15232] CHIP:TOO: [1]: { - [1690183637.107608][15230:15232] CHIP:TOO: Label: Vacuum - [1690183637.107618][15230:15232] CHIP:TOO: Mode: 0 - [1690183637.107633][15230:15232] CHIP:TOO: ModeTags: 1 entries - [1690183637.107651][15230:15232] CHIP:TOO: [1]: { - [1690183637.107662][15230:15232] CHIP:TOO: Value: 16385 - [1690183637.107670][15230:15232] CHIP:TOO: } - [1690183637.107679][15230:15232] CHIP:TOO: } - [1690183637.107700][15230:15232] CHIP:TOO: [2]: { - [1690183637.107708][15230:15232] CHIP:TOO: Label: Wash - [1690183637.107718][15230:15232] CHIP:TOO: Mode: 1 - [1690183637.107730][15230:15232] CHIP:TOO: ModeTags: 1 entries - [1690183637.107744][15230:15232] CHIP:TOO: [1]: { - [1690183637.107753][15230:15232] CHIP:TOO: Value: 16386 - [1690183637.107765][15230:15232] CHIP:TOO: } - [1690183637.107774][15230:15232] CHIP:TOO: } - [1690183637.107793][15230:15232] CHIP:TOO: [3]: { - [1690183637.107801][15230:15232] CHIP:TOO: Label: Deep clean - [1690183637.107811][15230:15232] CHIP:TOO: Mode: 2 - [1690183637.107823][15230:15232] CHIP:TOO: ModeTags: 2 entries - [1690183637.107837][15230:15232] CHIP:TOO: [1]: { - [1690183637.107846][15230:15232] CHIP:TOO: Value: 7 - [1690183637.107856][15230:15232] CHIP:TOO: } - [1690183637.107885][15230:15232] CHIP:TOO: [2]: { - [1690183637.107888][15230:15232] CHIP:TOO: Value: 16384 - [1690183637.107890][15230:15232] CHIP:TOO: } - [1690183637.107894][15230:15232] CHIP:TOO: } - disabled: true - - - label: - "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set - to new_mode_th" - PICS: RVCCLEANM.S.C00.Rsp - verification: | - ./chip-tool rvccleanmode change-to-mode 1 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690183675.346665][15234:15236] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Command 0x0000_0001 - [1690183675.346731][15234:15236] CHIP:TOO: ChangeToModeResponse: { - [1690183675.346753][15234:15236] CHIP:TOO: status: 0 - [1690183675.346768][15234:15236] CHIP:TOO: } - disabled: true - - - label: "Step 8: Physically power cycle the device" - verification: | - Physically power cycle the device. - disabled: true - - - label: "Step 9: TH reads from the DUT the StartUpMode attribute." - PICS: RVCCLEANM.S.A0002 - verification: | - ./chip-tool rvccleanmode read start-up-mode 1 1 - - On TH(chip-tool), Verify StartUpMode attribute value is an integer - - Save the value as startup_mode_dut and below is the sample log provided for the raspi platform, Here StartUpMode value is 0 - - [1690545840.189340][3104:3106] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0002 DataVersion: 3338736524 - [1690545840.189408][3104:3106] CHIP:TOO: StartUpMode: 0 - disabled: true - - - label: "Step 10: TH reads from the DUT the CurrentMode attribute." - PICS: RVCCLEANM.S.A0001 - verification: | - ./chip-tool rvccleanmode read current-mode 1 1 - - On TH(chip-tool), Verify that CurrentMode attribute value is an integer value and is equal to new_start_up_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690347752.080278][43423:43425] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0055 Attribute 0x0000_0001 DataVersion: 1382495026 - [1690347752.080330][43423:43425] CHIP:TOO: CurrentMode: 0 - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_1_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_1_1.yaml index a18554e6955246..2dd8e49519a21a 100644 --- a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_1_1.yaml @@ -133,6 +133,17 @@ tests: type: list contains: [0, 3] + - label: "Step 7: Read the global attribute: GeneratedCommandList" + PICS: + " !RVCOPSTATE.S.C00.Rsp && !RVCOPSTATE.S.C01.Rsp && + !RVCOPSTATE.S.C02.Rsp && !RVCOPSTATE.S.C03.Rsp " + command: "readAttribute" + attribute: "GeneratedCommandList" + response: + value: [] + constraints: + type: list + - label: "Step 7: Read the global attribute: GeneratedCommandList" PICS: " RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp diff --git a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_1.yaml deleted file mode 100644 index fc2ed926cc0fc5..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_1.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 226.2.1. [TC-RVCOPSTATE-2.1] Attribute verification [DUT as Server] - -PICS: - - RVCOPSTATE.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)" - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the PhaseList attribute" - PICS: RVCOPSTATE.S.A0000 - verification: | - ./chip-tool roboticvacuumoperationalstate read phaselist 1 1 - - Via the TH (chip-tool), verify: - - that PhaseList attribute value contains either null or a list of strings. - - that the list has no more than 32 entries. on TH(chip-tool) - disabled: true - - - label: "Step 3: TH reads from the DUT the CurrentPhase attribute" - PICS: RVCOPSTATE.S.A0001 - verification: | - ./chip-tool roboticvacuumoperationalstate read currentphase 1 1 - - Via the TH (chip-tool), verify: - - if the value from Step 1 was null, verify that this is also null. - - otherwise, verify that the CurrentPhase attribute value contains contains an integer between 0 and the size of the list from step 1 minus 1. - disabled: true - - - label: "Step 4: TH reads from the DUT the CountdownTime attribute" - PICS: RVCOPSTATE.S.A0002 - verification: | - ./chip-tool roboticvacuumoperationalstate read countdowntime 1 1 - - Via the TH (chip-tool), verify: - - that CountdownTime attribute contains either null our a uint32 value - - if non-null, verify that the value is in the range 0 to 259200 - disabled: true - - - label: "Step 5: TH reads from the DUT the OperationalStateList attribute" - PICS: RVCOPSTATE.S.A0003 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalstatelist 1 1 - - Via the TH (chip-tool), verify: - - the provided list contains the Error state (an entry with an ID of 0x03). - - all entries include an ID (enum8) and a label (string) - - all provided IDs are in the allowed range - disabled: true - - - label: "Step 6: TH reads from the DUT the OperationalState attribute" - PICS: RVCOPSTATE.S.A0004 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalstate 1 1 - - Via the TH (chip-tool), verify: - - the response includes an ID (enum8) amd a label (string) - - the provided ID is found in the set provided in step 4 - - the provided ID is in the allowed range - disabled: true - - - label: "Step 7: TH reads from the DUT the OperationalError attribute" - PICS: RVCOPSTATE.S.A0005 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalerror 1 1 - - Via the TH (chip-tool), verify: - - the response includes an ID (enum8), a label (string), and additional details (string) - - if the label is null, verify the additional details is also null - - the provided ID is in the allowed range - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_3.yaml b/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_3.yaml deleted file mode 100644 index 3152a828ee0935..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCOPSTATE_2_3.yaml +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 226.2.3. [TC-RVCOPSTATE-2.3] Pause and Resume commands [DUT as Server] - -PICS: - - RVCOPSTATE.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: "Step 1: TH reads from the DUT the OperationalStateList attribute" - PICS: RVCOPSTATE.S.A0003 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalstatelist 1 1 - - Via the TH (chip-tool), verify: - - all entries include an ID (enum8) and a label (string) - - all provided IDs are in the allowed range - - the list includes IDs for Error (0x03), Running (0x01), and Paused (0x02) - disabled: true - - - label: "Step 2: TH sends Pause command to the DUT" - PICS: RVCOPSTATE.S.C00.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate pause 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x00 (NoError) - disabled: true - - - label: "Step 3: TH reads from the DUT the OperationalState attribute" - PICS: RVCOPSTATE.S.A0004 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalstate 1 1 - - Via the TH (chip-tool), verify: - - the response has an operationalstateID field that is set to 0x02 (Paused) - disabled: true - - - label: "Step 4: TH reads from the DUT the CountdownTime attribute" - PICS: RVCOPSTATE.S.A0002 - verification: | - ./chip-tool roboticvacuumoperationalstate read countdowntime 1 1 - - Via the TH (chip-tool), verify: - - that CountdownTime attribute contains either null our a uint32 value - - if non-null, verify that the value is in the range 1 to 259200 - - store the value in 'initialcountdown-time' - disabled: true - - - label: "Step 5: TH reads from the DUT the CountdownTime attribute" - PICS: RVCOPSTATE.S.A0002 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalerror 1 1 - - Via the TH (chip-tool), verify: - - that CountdownTime attribute contains either null our a uint32 value - - if non-null, verify that the value is in the range 1 to 259200 - - that the value is the same as 'initialcountdown-time' - disabled: true - - - label: "Step 6: TH sends Pause command to the DUT" - PICS: RVCOPSTATE.S.C00.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate pause 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x00 (NoError) - disabled: true - - - label: "Step 7: TH sends Resume command to the DUT" - PICS: RVCOPSTATE.S.C03.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate resume 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x00 (NoError) - disabled: true - - - label: "Step 8: TH reads from the DUT the OperationalState attribute" - PICS: RVCOPSTATE.S.A0004 - verification: | - ./chip-tool roboticvacuumoperationalstate read operationalstate 1 1 - - Via the TH (chip-tool), verify: - - the response has an operationalstateID field that is set to 0x01 (Running) - disabled: true - - - label: "Step 9: TH sends Resume command to the DUT" - PICS: RVCOPSTATE.S.C03.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate resume 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x00 (NoError) - disabled: true - - - label: "Step 10: TH sends Pause command to the DUT" - PICS: RVCOPSTATE.S.C00.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate pause 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x03 (CommandInvalidInState) - disabled: true - - - label: "Step 11: TH sends Resume command to the DUT" - PICS: RVCOPSTATE.S.C03.Rsp - verification: | - ./chip-tool roboticvacuumoperationalstate resume 1 1 - - Via the TH (chip-tool), verify: - - the response is an instance of OperationalCommandResponse - - The ErrorStateID field is set to 0x03 (CommandInvalidInState) - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_1.yaml index 9588d6434f7b31..376e2b661b6f83 100644 --- a/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_1.yaml @@ -23,7 +23,7 @@ config: endpoint: 1 tests: - - label: "Wait for the commissioned device to be retrieved" + - label: "Step 1: Wait for the commissioned device to be retrieved" cluster: "DelayCommands" command: "WaitForCommissionee" arguments: @@ -31,7 +31,7 @@ tests: - name: "nodeId" value: nodeId - - label: "TH reads the ClusterRevision attribute from the DUT" + - label: "Step 2: TH reads the ClusterRevision attribute from the DUT" command: "readAttribute" attribute: "ClusterRevision" response: @@ -39,7 +39,7 @@ tests: constraints: type: int16u - - label: "TH reads the FeatureMap attribute from the DUT" + - label: "Step 3a: TH reads the FeatureMap attribute from the DUT" PICS: " !RVCRUNM.S.F00 " command: "readAttribute" attribute: "FeatureMap" @@ -49,8 +49,8 @@ tests: type: bitmap32 - label: - "Given RVCRUNM.S.F00(DEPONOFF) ensure featuremap has the correct bit - set" + "Step 3b: Given RVCRUNM.S.F00(DEPONOFF) ensure featuremap has the + correct bit set" PICS: RVCRUNM.S.F00 command: "readAttribute" attribute: "FeatureMap" @@ -59,7 +59,7 @@ tests: type: bitmap32 hasMasksSet: [0x1] - - label: "TH reads the AttributeList attribute from the DUT" + - label: "Step 4a: TH reads the AttributeList attribute from the DUT" PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" @@ -68,7 +68,7 @@ tests: type: list contains: [0, 1, 65528, 65529, 65530, 65531, 65532, 65533] - - label: "TH reads the AttributeList attribute from the DUT" + - label: "Step 4a: TH reads the AttributeList attribute from the DUT" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" @@ -78,8 +78,8 @@ tests: contains: [0, 1, 65528, 65529, 65531, 65532, 65533] - label: - "TH reads the optional attribute(StartUpMode) in AttributeList from - the DUT" + "Step 4b: TH reads the optional attribute(StartUpMode) in + AttributeList from the DUT" PICS: RVCRUNM.S.A0002 command: "readAttribute" attribute: "AttributeList" @@ -89,8 +89,8 @@ tests: contains: [2] - label: - "Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional - attribute(OnMode) is in AttributeList from the DUT" + "Step 4c: Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and + optional attribute(OnMode) is in AttributeList from the DUT" PICS: RVCRUNM.S.F00 command: "readAttribute" attribute: "AttributeList" @@ -100,8 +100,8 @@ tests: contains: [3] - label: - "Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional - attribute(OnMode) is not in AttributeList from the DUT" + "Step 4d: Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and + optional attribute(OnMode) is not in AttributeList from the DUT" PICS: " !RVCRUNM.S.F00 " command: "readAttribute" attribute: "AttributeList" @@ -110,8 +110,50 @@ tests: type: list excludes: [3] - - label: "Read the global attribute: EventList from the DUT" - PICS: PICS_EVENT_LIST_ENABLED && RVCRUNM.S.Afffa + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4e: Check for mandatory attributes in AttributeList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.The list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvcrunmode read attribute-list 1 1 + + Verify the "AttributeList " should include the mandatory attributes (values 0, 1), + - global attributes (value 65533, 65532, 65531, 65530, 65529 and 65528) and + - list may include optional attribute(value 0x0002), if MOD.S.A0002(StartUpMode) supports, + - list contains feature dependent attribute (values 0x0003), if MOD.S.F00(DEPONOFF) is true on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690177332.943953][6264:6266] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_FFFB DataVersion: 551764487 + [1690177332.944121][6264:6266] CHIP:TOO: AttributeList: 10 entries + [1690177332.944191][6264:6266] CHIP:TOO: [1]: 0 + [1690177332.944255][6264:6266] CHIP:TOO: [2]: 1 + [1690177332.944312][6264:6266] CHIP:TOO: [3]: 2 + [1690177332.944368][6264:6266] CHIP:TOO: [4]: 3 + [1690177332.944425][6264:6266] CHIP:TOO: [5]: 65528 + [1690177332.944482][6264:6266] CHIP:TOO: [6]: 65529 + [1690177332.944538][6264:6266] CHIP:TOO: [7]: 65530 + [1690177332.944594][6264:6266] CHIP:TOO: [8]: 65531 + [1690177332.944650][6264:6266] CHIP:TOO: [9]: 65532 + [1690177332.944707][6264:6266] CHIP:TOO: [10]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList from the DUT" + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "EventList" response: @@ -120,8 +162,36 @@ tests: type: list - label: - "Read the global attribute AcceptedCommandList. Check if it contains - id 0x0 (ChangeToMode)" + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvcrunmode read event-list 1 1 + + Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690177367.986733][6269:6271] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_FFFA DataVersion: 551764487 + [1690177367.986879][6269:6271] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: + "Step 6a: Read the global attribute AcceptedCommandList. Check if it + contains id 0x0 (ChangeToMode)" PICS: RVCRUNM.S.C00.Rsp command: "readAttribute" attribute: "AcceptedCommandList" @@ -131,8 +201,36 @@ tests: type: list - label: - "Read the global attribute: GeneratedCommandList. Check if it contains - id 0x1 (ChangeToModeResponse)" + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvcrunmode read accepted-command-list 1 1 + + Verify the "AcceptedCommandList" contains a list of mandatory commands (value 0) on the TH (Chip-tool) and below is the sample log provided for the raspi platform: + + [1690177423.741225][6275:6277] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_FFF9 DataVersion: 551764487 + [1690177423.741380][6275:6277] CHIP:TOO: AcceptedCommandList: 1 entries + [1690177423.741452][6275:6277] CHIP:TOO: [1]: 0 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: + "Step 7a: Read the global attribute: GeneratedCommandList. Check if it + contains id 0x1 (ChangeToModeResponse)" PICS: RVCRUNM.S.C01.Tx command: "readAttribute" attribute: "GeneratedCommandList" @@ -140,3 +238,31 @@ tests: value: [1] constraints: type: list + + - label: + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool rvcrunmode read generated-command-list 1 1 + + Verify " GeneratedCommandList" contains a list of mandatory commands (value 1) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: + + [1690177455.913441][6278:6280] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_FFF8 DataVersion: 551764487 + [1690177455.913595][6278:6280] CHIP:TOO: GeneratedCommandList: 1 entries + [1690177455.913666][6278:6280] CHIP:TOO: [1]: 1 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_2.yaml b/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_2.yaml deleted file mode 100644 index 75fb98f6ff69b1..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCRUNM_1_2.yaml +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 87.2.1. [TC-RVCRUNM-1.2] Cluster attributes with DUT as Server - -PICS: - - RVCRUNM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: "Precondition" - verification: | - This test case is verified after the device is provisioned. Pls provision device first, Pass appropriate nodeID in the below command - disabled: true - - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the SupportedModes attribute." - PICS: RVCRUNM.S.A0000 - verification: | - ./chip-tool rvcrunmode read supported-modes 1 1 - - Verify that the DUT response contains list of ModeOptionsStruct entries. - - Verify that list should contain at least one entry - - Verify that each ModeOptionsStruct entry has a unique Mode field value and Label field value - - ModeOptionsStruct entry’s ModeTags field is not empty, then Verify the values of the Value fields that are not larger than 16 bits, for each Value field: Is the semantic tag value a defined common tag value (Auto(0x0000), Quick(0x0001), Quiet(0x0002), LowNoise(0x0003), LowEnergy(0x0004), Vacation(0x0005), Min(0x0006), Max(0x0007), Night(0x0008), Day(0x0009)) or a defined cluster alias tag value (RapidCool, RapidFreeze) or in the MfgTags (0x8000 to 0xBFFF) range - - If the Value field is in the MfgTags (0x8000 to 0xBFFF) range, the TagName field is a string with a length between 1 and 64 - - Verify that at least one ModeOptionsStruct entry includes either the RapidCool semantic tag or the RapidFreeze semantic tag in the SemanticTags field - - Save the Mode field values as supported_modes_dut on the TH (Chip-tool) and below is the sample log provided for the raspi platform: - - [1690177496.793840][6284:6286] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0000 DataVersion: 551764487 - [1690177496.794090][6284:6286] CHIP:TOO: SupportedModes: 3 entries - [1690177496.794285][6284:6286] CHIP:TOO: [1]: { - [1690177496.794343][6284:6286] CHIP:TOO: Label: Idle - [1690177496.794396][6284:6286] CHIP:TOO: Mode: 0 - [1690177496.794457][6284:6286] CHIP:TOO: ModeTags: 1 entries - [1690177496.794573][6284:6286] CHIP:TOO: [1]: { - [1690177496.794631][6284:6286] CHIP:TOO: Value: 16384 - [1690177496.794682][6284:6286] CHIP:TOO: } - [1690177496.794737][6284:6286] CHIP:TOO: } - [1690177496.794809][6284:6286] CHIP:TOO: [2]: { - [1690177496.794861][6284:6286] CHIP:TOO: Label: Cleaning - [1690177496.794910][6284:6286] CHIP:TOO: Mode: 1 - [1690177496.794967][6284:6286] CHIP:TOO: ModeTags: 1 entries - [1690177496.795031][6284:6286] CHIP:TOO: [1]: { - [1690177496.795085][6284:6286] CHIP:TOO: Value: 16385 - [1690177496.795135][6284:6286] CHIP:TOO: } - [1690177496.795186][6284:6286] CHIP:TOO: } - [1690177496.795257][6284:6286] CHIP:TOO: [3]: { - [1690177496.795309][6284:6286] CHIP:TOO: Label: Mapping - [1690177496.795358][6284:6286] CHIP:TOO: Mode: 2 - [1690177496.795415][6284:6286] CHIP:TOO: ModeTags: 1 entries - [1690177496.795478][6284:6286] CHIP:TOO: [1]: { - [1690177496.795531][6284:6286] CHIP:TOO: Value: 16384 - [1690177496.795581][6284:6286] CHIP:TOO: } - [1690177496.795632][6284:6286] CHIP:TOO: } - disabled: true - - - label: "Step 3: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer and the value is from supported_modes_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690177606.359517][6295:6297] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 551764487 - [1690177606.359639][6295:6297] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: "Step 4: TH reads from the DUT the OnMode attribute." - PICS: RVCRUNM.S.A0003 - verification: | - ./chip-tool rvcrunmode read on-mode 1 1 - - Verify on TH(chip-tool) logs, OnMode attribute value is an integer and the value is from supported_modes_dut (As per spec default value is null), below is the sample log provided for the raspi platform, Here OnMode attribute value is Null - - [1690177656.364979][6304:6306] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0003 DataVersion: 551764487 - [1690177656.365109][6304:6306] CHIP:TOO: OnMode: null - disabled: true - - - label: "Step 5: TH reads from the DUT the StartUpMode attribute." - PICS: RVCRUNM.S.A0002 - verification: | - ./chip-tool rvcrunmode read start-up-mode 1 1 - - Verify on TH(chip-tool) logs, StartUpMode attribute value is an integer(As per spec default value is null) and value is from supported_modes_dut, below is the sample log provided for the raspi platform, Here StartUpMode attribute value is Null - - [1690177698.954736][6311:6313] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0002 DataVersion: 551764487 - [1690177698.954865][6311:6313] CHIP:TOO: StartUpMode: null - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCRUNM_2_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCRUNM_2_1.yaml deleted file mode 100644 index 02ecb4f0a3d981..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCRUNM_2_1.yaml +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 87.3.1. [TC-RVCRUNM-2.1] Change to Mode functionality with DUT as Server - -PICS: - - RVCRUNM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the SupportedModes attribute." - PICS: RVCRUNM.S.A0000 - verification: | - ./chip-tool rvcrunmode read supported-modes 1 1 - - Verify that the DUT response contains list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut on the TH (Chip-tool) and below is the sample log provided for the raspi platform: - - [1690177742.429087][6315:6317] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0000 DataVersion: 551764487 - [1690177742.429341][6315:6317] CHIP:TOO: SupportedModes: 3 entries - [1690177742.429483][6315:6317] CHIP:TOO: [1]: { - [1690177742.429540][6315:6317] CHIP:TOO: Label: Idle - [1690177742.429595][6315:6317] CHIP:TOO: Mode: 0 - [1690177742.429658][6315:6317] CHIP:TOO: ModeTags: 1 entries - [1690177742.429732][6315:6317] CHIP:TOO: [1]: { - [1690177742.429791][6315:6317] CHIP:TOO: Value: 16384 - [1690177742.429842][6315:6317] CHIP:TOO: } - [1690177742.429892][6315:6317] CHIP:TOO: } - [1690177742.429967][6315:6317] CHIP:TOO: [2]: { - [1690177742.430020][6315:6317] CHIP:TOO: Label: Cleaning - [1690177742.430070][6315:6317] CHIP:TOO: Mode: 1 - [1690177742.430188][6315:6317] CHIP:TOO: ModeTags: 1 entries - [1690177742.430263][6315:6317] CHIP:TOO: [1]: { - [1690177742.430320][6315:6317] CHIP:TOO: Value: 16385 - [1690177742.430374][6315:6317] CHIP:TOO: } - [1690177742.430427][6315:6317] CHIP:TOO: } - [1690177742.430501][6315:6317] CHIP:TOO: [3]: { - [1690177742.430555][6315:6317] CHIP:TOO: Label: Mapping - [1690177742.430605][6315:6317] CHIP:TOO: Mode: 2 - [1690177742.430664][6315:6317] CHIP:TOO: ModeTags: 1 entries - [1690177742.430729][6315:6317] CHIP:TOO: [1]: { - [1690177742.430784][6315:6317] CHIP:TOO: Value: 16384 - [1690177742.430901][6315:6317] CHIP:TOO: } - [1690177742.430966][6315:6317] CHIP:TOO: } - disabled: true - - - label: "Step 3: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut - - Select a value which is NOT in supported_modes_dut and save it as invalid_mode_th, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690177776.069002][6321:6323] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 551764487 - [1690177776.069137][6321:6323] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 4: TH sends a ChangeToMode command to the DUT with NewMode set - to old_current_mode_dut" - PICS: RVCRUNM.S.C00.Rsp - verification: | - ./chip-tool rvcrunmode change-to-mode 1 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690177967.451381][6333:6335] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690177967.451491][6333:6335] CHIP:TOO: ChangeToModeResponse: { - [1690177967.451542][6333:6335] CHIP:TOO: status: 0 - [1690177967.451590][6333:6335] CHIP:TOO: } - disabled: true - - - label: - "Step 5: Manually put the device in a state from which it will FAIL to - transition to PIXIT.RVCRUNM.MODE_CHANGE_FAIL" - PICS: PIXIT.RVCRUNM.CAN_TEST_MODE_FAILURE - verification: | - Manual operation required - disabled: true - - - label: "Step 6: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 1 - - [1690202974.725219][18214:18216] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 2507484088 - [1690202974.725506][18214:18216] CHIP:TOO: CurrentMode: 1 - disabled: true - - - label: - "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set - to PIXIT.RVCRUNM.MODE_CHANGE_FAIL" - PICS: PIXIT.RVCRUNM.CAN_TEST_MODE_FAILURE && RVCRUNM.S.C00.Rsp - verification: | - ./chip-tool rvcrunmode change-to-mode 2 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a GenericFailure(0x02) status response and StatusText field has a length between 1 and 64, below is the sample log provided for the raspi platform: - - [1690178461.944185][6368:6370] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690178461.944369][6368:6370] CHIP:TOO: ChangeToModeResponse: { - [1690178461.944457][6368:6370] CHIP:TOO: status: 2 - [1690178461.944517][6368:6370] CHIP:TOO: statusText: Change to the mapping mode is only allowed from idle - [1690178461.944578][6368:6370] CHIP:TOO: } - disabled: true - - - label: "Step 8: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool), CurrentMode attribute value is an integer value and equal to old_current_mode_dut below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 1 - - [1690203073.106487][18256:18258] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 468915104 - [1690203073.106525][18256:18258] CHIP:TOO: CurrentMode: 1 - disabled: true - - - label: - "Step 9: Manually put the device in a state from which it will - SUCCESSFULLY transition to PIXIT.RVCRUNM.MODE_CHANGE_OK" - verification: | - Manual operation required - disabled: true - - - label: "Step 10: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value, - - Save the value as old_current_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 1 - - [1690203090.571985][18263:18265] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 468915104 - [1690203090.571996][18263:18265] CHIP:TOO: CurrentMode: 1 - disabled: true - - - label: - "Step 11: TH sends a ChangeToMode command to the DUT with NewMode set - to PIXIT.RVCRUNM.MODE_CHANGE_OK" - PICS: RVCRUNM.S.C00.Rsp - verification: | - ./chip-tool rvcrunmode change-to-mode 0 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690178355.021382][6358:6360] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690178355.021533][6358:6360] CHIP:TOO: ChangeToModeResponse: { - [1690178355.021692][6358:6360] CHIP:TOO: status: 0 - [1690178355.021750][6358:6360] CHIP:TOO: } - disabled: true - - - label: "Step 12: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value and same as step 11, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690203144.862081][18275:18277] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 468915105 - [1690203144.862121][18275:18277] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: - "Step 13: TH sends a ChangeToMode command to the DUT with NewMode set - to invalid_mode_th" - PICS: RVCRUNM.S.C00.Rsp - verification: | - ./chip-tool rvcrunmode change-to-mode 5 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a UnsupportedMode(0x01) status response and below is the sample log provided for the raspi platform: - - [1690178736.566529][6381:6383] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690178736.566677][6381:6383] CHIP:TOO: ChangeToModeResponse: { - [1690178736.566761][6381:6383] CHIP:TOO: status: 1 - [1690178736.566816][6381:6383] CHIP:TOO: } - disabled: true - - - label: "Step 14: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - Verify on TH(chip-tool) logs, CurrentMode attribute value is an integer value and same as step 12, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690203158.762178][18282:18284] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 468915105 - [1690203158.762194][18282:18284] CHIP:TOO: CurrentMode: 0 - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_2.yaml b/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_2.yaml deleted file mode 100644 index 47f0fdfb340d75..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_2.yaml +++ /dev/null @@ -1,216 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 87.4.2. [TC-RVCRUNM-3.2] Startup Mode functionality with DUT as Server - -PICS: - - RVCRUNM.S - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: "Precondition" - verification: | - This test case is verified after the device is provisioned. Pls provision device first, Pass appropriate nodeID in the below command - disabled: true - - - label: "Note" - verification: | - To Execute the TC-RVCRUNM-3.2 test case using reboot in raspi device we followed the below suggested way: - - To run a reboot test case on raspi, run the app with --KVS flag with a file in local directory and pass that file to the command to launch the app. Steps - - step-1: create a file using touch command , something like touch mytest.txt - step-2: chmod 777 mytest.txt - step-3: launch the app ./chip-all-clusters-app --KVS ./mytest.txt - - if you launch the app with the above commands and provision the app, even when you reboot the app with 'sudo reboot' , next time you launch the app with 'sudo ./out/all-clusters-app/chip-all-clusters-app --KVS ./mytest.txt' , you can run read/write attribs and commands without reprovisioning the device. - disabled: true - - - label: - "Step 1: Commission DUT to TH (can be skipped if done in a preceding - test)." - verification: | - - disabled: true - - - label: "Step 2: TH reads from the DUT the StartUpMode attribute." - PICS: RVCRUNM.S.A0002 - verification: | - ./chip-tool rvcrunmode read start-up-mode 1 1 - - On TH(chip-tool), Verify StartUpMode attribute value is an integer. - - Save the value as startup_mode_dut - - If startup_mode_dut is null proceed to step 3. Else save startup_mode_dut as new_start_up_mode_th and proceed to step 5. - and below is the sample log provided for the raspi platform: - - Here StartUpMode value is null proced to step3 - - [1690543468.611591][2895:2897] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0002 DataVersion: 2245114918 - [1690543468.611648][2895:2897] CHIP:TOO: StartUpMode: null - disabled: true - - - label: "Step 3: TH reads from the DUT the SupportedModes attribute." - PICS: RVCRUNM.S.A0000 - verification: | - ./chip-tool rvcrunmode read supported-modes 1 1 - - On TH(chip-tool) log, Verify DUT response contains a list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut - - Select a value from supported_modes_dut and save the value as new_start_up_mode_th, below is the sample log provided for the raspi platform: - - [1690179857.830697][14130:14132] CHIP:DMG: } - [1690179857.831035][14130:14132] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0000 DataVersion: 290070852 - [1690179857.831058][14130:14132] CHIP:TOO: SupportedModes: 3 entries - [1690179857.831069][14130:14132] CHIP:TOO: [1]: { - [1690179857.831072][14130:14132] CHIP:TOO: Label: Idle - [1690179857.831077][14130:14132] CHIP:TOO: Mode: 0 - [1690179857.831082][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831090][14130:14132] CHIP:TOO: [1]: { - [1690179857.831093][14130:14132] CHIP:TOO: Value: 16384 - [1690179857.831096][14130:14132] CHIP:TOO: } - [1690179857.831099][14130:14132] CHIP:TOO: } - [1690179857.831104][14130:14132] CHIP:TOO: [2]: { - [1690179857.831107][14130:14132] CHIP:TOO: Label: Cleaning - [1690179857.831109][14130:14132] CHIP:TOO: Mode: 1 - [1690179857.831112][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831115][14130:14132] CHIP:TOO: [1]: { - [1690179857.831118][14130:14132] CHIP:TOO: Value: 16385 - [1690179857.831121][14130:14132] CHIP:TOO: } - [1690179857.831124][14130:14132] CHIP:TOO: } - [1690179857.831128][14130:14132] CHIP:TOO: [3]: { - [1690179857.831131][14130:14132] CHIP:TOO: Label: Mapping - [1690179857.831133][14130:14132] CHIP:TOO: Mode: 2 - [1690179857.831135][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831138][14130:14132] CHIP:TOO: [1]: { - [1690179857.831141][14130:14132] CHIP:TOO: Value: 16384 - [1690179857.831143][14130:14132] CHIP:TOO: } - [1690179857.831146][14130:14132] CHIP:TOO: } - disabled: true - - - label: - "Step 4: TH writes to the DUT the StartUpMode attribute with the - new_start_up_mode_th value" - PICS: RVCRUNM.S.A0002 - verification: | - ./chip-tool rvcrunmode write start-up-mode 0 1 1 - - On TH(chip-tool) log, Verify that DUT responds with a successful (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690179737.189558][14110:14112] CHIP:DMG: StatusIB = - [1690179737.189576][14110:14112] CHIP:DMG: { - [1690179737.189592][14110:14112] CHIP:DMG: status = 0x00 (SUCCESS), - [1690179737.189607][14110:14112] CHIP:DMG: }, - disabled: true - - - label: "Step 5: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - On TH(chip-tool), Verify that CurrentMode attribute value is an integer value - - Save the value as old_current_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - NOTE: If startup_mode_dut is equal to old_current_mode_dut proceed to step 6. Else proceed to step 8. - - [1690180034.919766][14170:14172] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 1228902958 - [1690180034.919778][14170:14172] CHIP:TOO: CurrentMode: 0 - disabled: true - - - label: "Step 6: TH reads from the DUT the SupportedModes attribute." - PICS: RVCRUNM.S.A0000 - verification: | - ./chip-tool rvcrunmode read supported-modes 1 1 - - On TH(chip-tool) log, Verify DUT response contains a list of ModeOptionsStruct entries - - Verify that the list has two or more entries - - Save the Mode field values as supported_modes_dut - - Select a value from supported_modes_dut different from startup_mode_dut. Save the value as new_mode_th, below is the sample log provided for the raspi platform: - - [1690179857.830697][14130:14132] CHIP:DMG: } - [1690179857.831035][14130:14132] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0000 DataVersion: 290070852 - [1690179857.831058][14130:14132] CHIP:TOO: SupportedModes: 3 entries - [1690179857.831069][14130:14132] CHIP:TOO: [1]: { - [1690179857.831072][14130:14132] CHIP:TOO: Label: Idle - [1690179857.831077][14130:14132] CHIP:TOO: Mode: 0 - [1690179857.831082][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831090][14130:14132] CHIP:TOO: [1]: { - [1690179857.831093][14130:14132] CHIP:TOO: Value: 16384 - [1690179857.831096][14130:14132] CHIP:TOO: } - [1690179857.831099][14130:14132] CHIP:TOO: } - [1690179857.831104][14130:14132] CHIP:TOO: [2]: { - [1690179857.831107][14130:14132] CHIP:TOO: Label: Cleaning - [1690179857.831109][14130:14132] CHIP:TOO: Mode: 1 - [1690179857.831112][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831115][14130:14132] CHIP:TOO: [1]: { - [1690179857.831118][14130:14132] CHIP:TOO: Value: 16385 - [1690179857.831121][14130:14132] CHIP:TOO: } - [1690179857.831124][14130:14132] CHIP:TOO: } - [1690179857.831128][14130:14132] CHIP:TOO: [3]: { - [1690179857.831131][14130:14132] CHIP:TOO: Label: Mapping - [1690179857.831133][14130:14132] CHIP:TOO: Mode: 2 - [1690179857.831135][14130:14132] CHIP:TOO: ModeTags: 1 entries - [1690179857.831138][14130:14132] CHIP:TOO: [1]: { - [1690179857.831141][14130:14132] CHIP:TOO: Value: 16384 - [1690179857.831143][14130:14132] CHIP:TOO: } - [1690179857.831146][14130:14132] CHIP:TOO: } - disabled: true - - - label: - "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set - to new_mode_th" - PICS: RVCRUNM.S.C00.Rsp - verification: | - ./chip-tool rvcrunmode change-to-mode 1 1 1 - - Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a SUCCESS (value 0x00) status response and below is the sample log provided for the raspi platform: - - [1690179905.782387][14141:14143] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Command 0x0000_0001 - [1690179905.782401][14141:14143] CHIP:TOO: ChangeToModeResponse: { - [1690179905.782405][14141:14143] CHIP:TOO: status: 0 - [1690179905.782408][14141:14143] CHIP:TOO: } - disabled: true - - - label: "Step 8: Physically power cycle the device" - verification: | - Physically power cycle the device. - disabled: true - - - label: "Step 9: TH reads from the DUT the StartUpMode attribute." - PICS: RVCRUNM.S.A0002 - verification: | - ./chip-tool rvcrunmode read start-up-mode 1 1 - - On TH(chip-tool), Verify StartUpMode attribute value is an integer. - - Save the value as new_start_up_mode_dut and is equal to new_start_up_mode_th, below is the sample log provided for the raspi platform: - - Here StartUpMode value is 0 - - [1690544350.025546][2955:2957] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0002 DataVersion: 3877802510 - [1690544350.025630][2955:2957] CHIP:TOO: StartUpMode: 0 - disabled: true - - - label: "Step 10: TH reads from the DUT the CurrentMode attribute." - PICS: RVCRUNM.S.A0001 - verification: | - ./chip-tool rvcrunmode read current-mode 1 1 - - On TH(chip-tool), Verify that CurrentMode attribute value is an integer value and is equal to new_start_up_mode_dut, below is the sample log provided for the raspi platform, Here CurrentMode attribute value is 0 - - [1690180034.919766][14170:14172] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0054 Attribute 0x0000_0001 DataVersion: 1228902958 - [1690180034.919778][14170:14172] CHIP:TOO: CurrentMode: 0 - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_SC_3_6.yaml b/src/app/tests/suites/certification/Test_TC_SC_3_6.yaml deleted file mode 100644 index 0a01a9cbb52d08..00000000000000 --- a/src/app/tests/suites/certification/Test_TC_SC_3_6.yaml +++ /dev/null @@ -1,310 +0,0 @@ -# Copyright (c) 2023 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default - -name: 22.3.6. [TC-SC-3.6] CASE Resource validation - -config: - nodeId: 0x12344321 - cluster: "Basic Information" - endpoint: 0 - -tests: - - label: - "Step 1: RD1X, RD2X, RD3X, RD4X, RD5X each send 1 Subscribe Request - Messages to DUT.(Total - 15 active subscriptions) They can subscribe - to any attribute. Once all subscriptions are active, change the value - of the attribute that has been subscribed to" - verification: | - Send 1 Subscriptionrequest message from each Reference Device(Eg. RD1...) to DUT and verify all the subscription requests are succes, and change the value of all the attributes by sending write command, after sending write commanfd verify on each of these Reference Devices that the appropriate attribute value has been received. Example commands given below are using 4 reference device (User can use 15 reference device and send the below command in from each reference device) - - - on the first reference device enter: - - onoff subscribe on-time 10 100 1 1 - [1657715218.149357][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715218.149399][5956:5961] CHIP:DMG: { - [1657715218.149432][5956:5961] CHIP:DMG: SubscriptionId = 0xea8e5b3b, - [1657715218.149465][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715218.149504][5956:5961] CHIP:DMG: [ - [1657715218.149535][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715218.149581][5956:5961] CHIP:DMG: { - [1657715218.149619][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715218.149663][5956:5961] CHIP:DMG: { - [1657715218.149711][5956:5961] CHIP:DMG: DataVersion = 0x734a2d83, - [1657715218.149755][5956:5961] CHIP:DMG: AttributePathIB = - [1657715218.149802][5956:5961] CHIP:DMG: { - [1657715218.149849][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715218.149895][5956:5961] CHIP:DMG: Cluster = 0x6, - [1657715218.149942][5956:5961] CHIP:DMG: Attribute = 0x0000_4001, - [1657715218.149983][5956:5961] CHIP:DMG: } - [1657715218.150027][5956:5961] CHIP:DMG: - [1657715218.150075][5956:5961] CHIP:DMG: Data = 0, - [1657715218.150118][5956:5961] CHIP:DMG: }, - [1657715218.150165][5956:5961] CHIP:DMG: - [1657715218.150201][5956:5961] CHIP:DMG: }, - [1657715218.150245][5956:5961] CHIP:DMG: - [1657715218.150275][5956:5961] CHIP:DMG: ], - [1657715218.150313][5956:5961] CHIP:DMG: - [1657715218.150343][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715218.150372][5956:5961] CHIP:DMG: } - [1657715218.150529][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_4001 DataVersion: 1934241155 - [1657715218.150599][5956:5961] CHIP:TOO: OnTime: 0 - [1657715218.150646][5956:5961] CHIP:DMG: MoveToState ReadClient[0xffff94008e40]: Moving to - - - On the 2nd reference device - - levelcontrol subscribe on-level 100 1000 1 1 - [1657715273.668717][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715273.668784][5956:5961] CHIP:DMG: { - [1657715273.668846][5956:5961] CHIP:DMG: SubscriptionId = 0xb6497be6, - [1657715273.668908][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715273.668984][5956:5961] CHIP:DMG: [ - [1657715273.669046][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715273.669126][5956:5961] CHIP:DMG: { - [1657715273.669190][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715273.669261][5956:5961] CHIP:DMG: { - [1657715273.669378][5956:5961] CHIP:DMG: DataVersion = 0x319eeda7, - [1657715273.669460][5956:5961] CHIP:DMG: AttributePathIB = - [1657715273.669540][5956:5961] CHIP:DMG: { - [1657715273.669620][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715273.669706][5956:5961] CHIP:DMG: Cluster = 0x8, - [1657715273.669792][5956:5961] CHIP:DMG: Attribute = 0x0000_0011, - [1657715273.669875][5956:5961] CHIP:DMG: } - [1657715273.669961][5956:5961] CHIP:DMG: - [1657715273.670043][5956:5961] CHIP:DMG: Data = NULL - [1657715273.670119][5956:5961] CHIP:DMG: }, - [1657715273.670199][5956:5961] CHIP:DMG: - [1657715273.670267][5956:5961] CHIP:DMG: }, - [1657715273.670341][5956:5961] CHIP:DMG: - [1657715273.670400][5956:5961] CHIP:DMG: ], - [1657715273.670474][5956:5961] CHIP:DMG: - [1657715273.670533][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715273.670591][5956:5961] CHIP:DMG: } - [1657715273.670803][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0008 Attribute 0x0000_0011 DataVersion: 832499111 - [1657715273.670879][5956:5961] CHIP:TOO: on level: null - [1657715273.670967][5956:5961] CHIP:DMG: MoveToState ReadClient[0xffff94008f30]: Moving to [AwaitingSu] - - on 3rd reference device - - onoff subscribe start-up-on-off 100 1000 1 1 - [1657715343.924200][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715343.924269][5956:5961] CHIP:DMG: { - [1657715343.924330][5956:5961] CHIP:DMG: SubscriptionId = 0x9fce63ae, - [1657715343.924392][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715343.924470][5956:5961] CHIP:DMG: [ - [1657715343.924532][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715343.924612][5956:5961] CHIP:DMG: { - [1657715343.924678][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715343.924750][5956:5961] CHIP:DMG: { - [1657715343.924833][5956:5961] CHIP:DMG: DataVersion = 0x734a2d84, - [1657715343.924909][5956:5961] CHIP:DMG: AttributePathIB = - [1657715343.924992][5956:5961] CHIP:DMG: { - [1657715343.925074][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715343.925159][5956:5961] CHIP:DMG: Cluster = 0x6, - [1657715343.925245][5956:5961] CHIP:DMG: Attribute = 0x0000_4003, - [1657715343.925382][5956:5961] CHIP:DMG: } - [1657715343.925470][5956:5961] CHIP:DMG: - [1657715343.925561][5956:5961] CHIP:DMG: Data = NULL - [1657715343.925631][5956:5961] CHIP:DMG: }, - [1657715343.925713][5956:5961] CHIP:DMG: - [1657715343.925776][5956:5961] CHIP:DMG: }, - [1657715343.925851][5956:5961] CHIP:DMG: - [1657715343.925910][5956:5961] CHIP:DMG: ], - [1657715343.925985][5956:5961] CHIP:DMG: - [1657715343.926046][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715343.926104][5956:5961] CHIP:DMG: } - [1657715343.926315][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_4003 DataVersion: 1934241156 - [1657715343.926395][5956:5961] CHIP:TOO: StartUpOnOff: null - [1657715343.926485][5956:5961] CHIP:DMG: MoveToState ReadClient[0xffff94008c80]: Moving to [AwaitingSu] - - on the 4th reference device - - basic subscribe node-label 10 100 1 0 - [1657715505.138806][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715505.138881][5956:5961] CHIP:DMG: { - [1657715505.138943][5956:5961] CHIP:DMG: SubscriptionId = 0xd002abb6, - [1657715505.139045][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715505.139128][5956:5961] CHIP:DMG: [ - [1657715505.139190][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715505.139498][5956:5961] CHIP:DMG: { - [1657715505.139600][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715505.139713][5956:5961] CHIP:DMG: { - [1657715505.139824][5956:5961] CHIP:DMG: DataVersion = 0x1b93dc30, - [1657715505.139932][5956:5961] CHIP:DMG: AttributePathIB = - [1657715505.140020][5956:5961] CHIP:DMG: { - [1657715505.140112][5956:5961] CHIP:DMG: Endpoint = 0x0, - [1657715505.140202][5956:5961] CHIP:DMG: Cluster = 0x28, - [1657715505.140289][5956:5961] CHIP:DMG: Attribute = 0x0000_0005, - [1657715505.140370][5956:5961] CHIP:DMG: } - [1657715505.140560][5956:5961] CHIP:DMG: - [1657715505.140657][5956:5961] CHIP:DMG: Data = "", - [1657715505.140741][5956:5961] CHIP:DMG: }, - [1657715505.140825][5956:5961] CHIP:DMG: - [1657715505.140893][5956:5961] CHIP:DMG: }, - [1657715505.140972][5956:5961] CHIP:DMG: - [1657715505.141031][5956:5961] CHIP:DMG: ], - [1657715505.141105][5956:5961] CHIP:DMG: - [1657715505.141165][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715505.141223][5956:5961] CHIP:DMG: } - [1657715505.141471][5956:5961] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0028 Attribute 0x0000_0005 DataVersion: 462674992 - [1657715505.141554][5956:5961] CHIP:TOO: NodeLabel: - [1657715505.141643][5956:5961] CHIP:DMG: MoveToState ReadClient[0xffff94008c80]: Moving to [AwaitingSu] - - - - on the first reference device enter below mentioned commands to change the attribute values - - onoff write on-time 1 1 1 - [1657715232.758666][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715232.758698][5956:5961] CHIP:DMG: { - [1657715232.758724][5956:5961] CHIP:DMG: SubscriptionId = 0xea8e5b3b, - [1657715232.758753][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715232.758782][5956:5961] CHIP:DMG: [ - [1657715232.758803][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715232.758832][5956:5961] CHIP:DMG: { - [1657715232.758854][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715232.758880][5956:5961] CHIP:DMG: { - [1657715232.758911][5956:5961] CHIP:DMG: DataVersion = 0x734a2d84, - [1657715232.758936][5956:5961] CHIP:DMG: AttributePathIB = - [1657715232.758962][5956:5961] CHIP:DMG: { - [1657715232.758989][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715232.759030][5956:5961] CHIP:DMG: Cluster = 0x6, - [1657715232.759071][5956:5961] CHIP:DMG: Attribute = 0x0000_4001, - [1657715232.759104][5956:5961] CHIP:DMG: } - [1657715232.759140][5956:5961] CHIP:DMG: - [1657715232.759174][5956:5961] CHIP:DMG: Data = 1, - [1657715232.759203][5956:5961] CHIP:DMG: }, - [1657715232.759235][5956:5961] CHIP:DMG: - [1657715232.759261][5956:5961] CHIP:DMG: }, - [1657715232.759292][5956:5961] CHIP:DMG: - [1657715232.759317][5956:5961] CHIP:DMG: ], - [1657715232.759348][5956:5961] CHIP:DMG: - [1657715232.759373][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715232.759398][5956:5961] CHIP:DMG: } - [1657715232.759493][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_4001 DataVersion: 1934241156 - [1657715232.759530][5956:5961] CHIP:TOO: OnTime: 1 - [1657715232.759576][5956:5961] CHIP:DMG: Refresh LivenessCheckTime for 125000 milliseconds with SubscriptionId = 0xea8e5b3b - - - - on the 2nd reference device enter below mentioned commands to change the attribute values - - levelcontrol write on-level 1 1 1 - [1657715287.200431][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715287.200491][5956:5961] CHIP:DMG: { - [1657715287.200557][5956:5961] CHIP:DMG: SubscriptionId = 0xb6497be6, - [1657715287.200622][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715287.200701][5956:5961] CHIP:DMG: [ - [1657715287.200765][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715287.200848][5956:5961] CHIP:DMG: { - [1657715287.200921][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715287.201012][5956:5961] CHIP:DMG: { - [1657715287.201094][5956:5961] CHIP:DMG: DataVersion = 0x319eeda8, - [1657715287.201180][5956:5961] CHIP:DMG: AttributePathIB = - [1657715287.201263][5956:5961] CHIP:DMG: { - [1657715287.201403][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715287.201501][5956:5961] CHIP:DMG: Cluster = 0x8, - [1657715287.201596][5956:5961] CHIP:DMG: Attribute = 0x0000_0011, - [1657715287.201686][5956:5961] CHIP:DMG: } - [1657715287.201889][5956:5961] CHIP:DMG: - [1657715287.201987][5956:5961] CHIP:DMG: Data = 1, - [1657715287.202074][5956:5961] CHIP:DMG: }, - [1657715287.202157][5956:5961] CHIP:DMG: - [1657715287.202221][5956:5961] CHIP:DMG: }, - [1657715287.202296][5956:5961] CHIP:DMG: - [1657715287.202354][5956:5961] CHIP:DMG: ], - [1657715287.202429][5956:5961] CHIP:DMG: - [1657715287.202488][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715287.202546][5956:5961] CHIP:DMG: } - [1657715287.202754][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0008 Attribute 0x0000_0011 DataVersion: 832499112 - [1657715287.202838][5956:5961] CHIP:TOO: on level: 1 - [1657715287.202937][5956:5961] CHIP:DMG: Refresh LivenessCheckTime for 125000 milliseconds with SubscriptionId = 0xb6497be6 Peer = 01:0000000000000001 - - - - - on the 3rd reference device enter below mentioned commands to change the attribute values - - onoff write start-up-on-off 1 1 1 - [1657715357.628508][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715357.628536][5956:5961] CHIP:DMG: { - [1657715357.628561][5956:5961] CHIP:DMG: SubscriptionId = 0x9fce63ae, - [1657715357.628586][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715357.628618][5956:5961] CHIP:DMG: [ - [1657715357.628643][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715357.628676][5956:5961] CHIP:DMG: { - [1657715357.628702][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715357.628735][5956:5961] CHIP:DMG: { - [1657715357.628763][5956:5961] CHIP:DMG: DataVersion = 0x734a2d85, - [1657715357.628791][5956:5961] CHIP:DMG: AttributePathIB = - [1657715357.628822][5956:5961] CHIP:DMG: { - [1657715357.628853][5956:5961] CHIP:DMG: Endpoint = 0x1, - [1657715357.628882][5956:5961] CHIP:DMG: Cluster = 0x6, - [1657715357.628914][5956:5961] CHIP:DMG: Attribute = 0x0000_4003, - [1657715357.628944][5956:5961] CHIP:DMG: } - [1657715357.628977][5956:5961] CHIP:DMG: - [1657715357.629009][5956:5961] CHIP:DMG: Data = 1, - [1657715357.629037][5956:5961] CHIP:DMG: }, - [1657715357.629068][5956:5961] CHIP:DMG: - [1657715357.629093][5956:5961] CHIP:DMG: }, - [1657715357.629123][5956:5961] CHIP:DMG: - [1657715357.629147][5956:5961] CHIP:DMG: ], - [1657715357.629177][5956:5961] CHIP:DMG: - [1657715357.629201][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715357.629225][5956:5961] CHIP:DMG: } - [1657715357.629340][5956:5961] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0006 Attribute 0x0000_4003 DataVersion: 1934241157 - [1657715357.629432][5956:5961] CHIP:TOO: StartUpOnOff: 1 - [1657715357.629480][5956:5961] CHIP:DMG: Refresh LivenessCheckTime for 125000 milliseconds with SubscriptionId = 0x9fce63ae Peer = 01:0000000000000001 - - - - - - - on the 4th reference device enter below mentioned commands to change the attribute values - - - basic write node-label 1 1 0 - [1657715530.832949][5956:5961] CHIP:DMG: ReportDataMessage = - [1657715530.832977][5956:5961] CHIP:DMG: { - [1657715530.833000][5956:5961] CHIP:DMG: SubscriptionId = 0xfd355fe5, - [1657715530.833024][5956:5961] CHIP:DMG: AttributeReportIBs = - [1657715530.833063][5956:5961] CHIP:DMG: [ - [1657715530.833091][5956:5961] CHIP:DMG: AttributeReportIB = - [1657715530.833133][5956:5961] CHIP:DMG: { - [1657715530.833165][5956:5961] CHIP:DMG: AttributeDataIB = - [1657715530.833205][5956:5961] CHIP:DMG: { - [1657715530.833243][5956:5961] CHIP:DMG: DataVersion = 0x1b93dc31, - [1657715530.833279][5956:5961] CHIP:DMG: AttributePathIB = - [1657715530.833342][5956:5961] CHIP:DMG: { - [1657715530.833382][5956:5961] CHIP:DMG: Endpoint = 0x0, - [1657715530.833422][5956:5961] CHIP:DMG: Cluster = 0x28, - [1657715530.833466][5956:5961] CHIP:DMG: Attribute = 0x0000_0005, - [1657715530.833505][5956:5961] CHIP:DMG: } - [1657715530.833546][5956:5961] CHIP:DMG: - [1657715530.833587][5956:5961] CHIP:DMG: Data = "1", - [1657715530.833623][5956:5961] CHIP:DMG: }, - [1657715530.833662][5956:5961] CHIP:DMG: - [1657715530.833693][5956:5961] CHIP:DMG: }, - [1657715530.833730][5956:5961] CHIP:DMG: - [1657715530.833760][5956:5961] CHIP:DMG: ], - [1657715530.833794][5956:5961] CHIP:DMG: - [1657715530.833822][5956:5961] CHIP:DMG: InteractionModelRevision = 1 - [1657715530.833851][5956:5961] CHIP:DMG: } - [1657715530.833959][5956:5961] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0028 Attribute 0x0000_0005 DataVersion: 462674993 - [1657715530.833999][5956:5961] CHIP:TOO: NodeLabel: 1 - [1657715530.834171][5956:5961] CHIP:DMG: Refresh LivenessCheckTime for 125000 milliseconds with SubscriptionId = 0xfd355fe5 Peer = 01:0000000000000001 - disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_SWTCH_1_1.yaml b/src/app/tests/suites/certification/Test_TC_SWTCH_1_1.yaml index f36c320453f30f..5213f66e66dc3a 100644 --- a/src/app/tests/suites/certification/Test_TC_SWTCH_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_SWTCH_1_1.yaml @@ -141,8 +141,8 @@ tests: - label: "Step 5a: Read the global attribute: EventList " PICS: - "PICS_EVENT_LIST_ENABLED && !SWTCH.S.F00 && !SWTCH.S.F01 && - !SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 " + "!SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 && + !SWTCH.S.F04 " command: "readAttribute" attribute: "EventList" response: @@ -172,8 +172,8 @@ tests: "Step 5d: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)" PICS: - PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 - && !SWTCH.S.F04 + " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && + !SWTCH.S.F03 && !SWTCH.S.F04 " command: "readAttribute" attribute: "EventList" response: @@ -185,8 +185,8 @@ tests: "Step 5e: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)" PICS: - PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 - && !SWTCH.S.F04 + " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 + && !SWTCH.S.F04 " command: "readAttribute" attribute: "EventList" response: @@ -198,8 +198,8 @@ tests: "Step 5f: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) " PICS: - PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 - && SWTCH.S.F04 + " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && + !SWTCH.S.F03 && SWTCH.S.F04 " command: "readAttribute" attribute: "EventList" response: @@ -211,8 +211,8 @@ tests: "Step 5g: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) " PICS: - PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 - && SWTCH.S.F04 + " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 + && SWTCH.S.F04 " command: "readAttribute" attribute: "EventList" response: @@ -224,9 +224,9 @@ tests: command: "readAttribute" attribute: "AcceptedCommandList" response: + value: [] constraints: type: list - contains: [] - label: "Step 7: Read the global attribute: GeneratedCommandList" command: "readAttribute" diff --git a/src/app/tests/suites/certification/Test_TC_S_1_1.yaml b/src/app/tests/suites/certification/Test_TC_S_1_1.yaml index f35ea918bbd8a9..93be11fdee2487 100644 --- a/src/app/tests/suites/certification/Test_TC_S_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_S_1_1.yaml @@ -11,7 +11,6 @@ # 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. -# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default name: 123.1.1. [TC-S-1.1] Global attributes with server as DUT @@ -60,8 +59,10 @@ tests: constraints: type: bitmap32 - - label: "Step 4a: Read AttributeList (global attribute 65531)" - PICS: PICS_EVENT_LIST_ENABLED && S.S.A0005 + - label: + "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is + true" + PICS: S.S.A0005 && PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -85,8 +86,10 @@ tests: 65533, ] - - label: "Step 4a: Read AttributeList (global attribute 65531)" - PICS: "!PICS_EVENT_LIST_ENABLED && S.S.A0005" + - label: + "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is + true" + PICS: S.S.A0005 && !PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -95,8 +98,10 @@ tests: contains: [0, 1, 2, 3, 4, 5, 6, 7, 65528, 65529, 65531, 65532, 65533] - - label: "Step 4b: Read AttributeList (global attribute 65531)" - PICS: PICS_EVENT_LIST_ENABLED && (!S.S.A0005) + - label: + "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is + false" + PICS: " !S.S.A0005 && PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -119,8 +124,10 @@ tests: 65533, ] - - label: "Step 4b: Read AttributeList (global attribute 65531)" - PICS: "!PICS_EVENT_LIST_ENABLED && (!S.S.A0005)" + - label: + "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is + false" + PICS: " !S.S.A0005 && !PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: diff --git a/src/app/tests/suites/certification/Test_TC_TCCM_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TCCM_1_1.yaml index b9977898b1d5ec..ea76d9b267cd75 100644 --- a/src/app/tests/suites/certification/Test_TC_TCCM_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TCCM_1_1.yaml @@ -74,9 +74,7 @@ tests: - label: "Step 5: TH reads from the DUT the EventList attribute." verification: | ./chip-tool refrigeratorandtemperaturecontrolledcabinetmode read event-list 1 1 - Verify "EventList" contains a list of supported events, for this cluster the list is emty(0 entries) on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - [1690189614.840538][16147:16149] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0052 Attribute 0x0000_FFFA DataVersion: 473867547 [1690189614.840589][16147:16149] CHIP:TOO: EventList: 0 entries disabled: true diff --git a/src/app/tests/suites/certification/Test_TC_TCTL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TCTL_1_1.yaml index 1f847993f8e79f..b86b24051b7926 100644 --- a/src/app/tests/suites/certification/Test_TC_TCTL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TCTL_1_1.yaml @@ -118,7 +118,6 @@ tests: verification: | ./chip-tool temperaturecontrol read event-list 1 1 Verify " EventList attribute " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform: - [1689770528.788582][9233:9235] CHIP:DMG: InteractionModelRevision = 1 [1689770528.788587][9233:9235] CHIP:DMG: } [1689770528.788671][9233:9235] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0056 Attribute 0x0000_FFFA DataVersion: 2844459846 diff --git a/src/app/tests/suites/certification/Test_TC_TIMESYNC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TIMESYNC_1_1.yaml index 89775774e07c39..57b5be93ad9170 100644 --- a/src/app/tests/suites/certification/Test_TC_TIMESYNC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TIMESYNC_1_1.yaml @@ -156,7 +156,6 @@ tests: 0xFFFD, ] - # Optional - label: "TS4: Check for mandatory attributes in AttributeList" PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" @@ -250,6 +249,59 @@ tests: constraints: excludes: [0x0003] + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "TS4: Check for mandatory attributes in AttributeList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) + 2.The list MAY contain values in the Manufacturer Extensible + Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. + 3.The list SHALL NOT contain any values in the Test Vendor or invalid + range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool timesynchronization read attribute-list 1 0 + + Via the TH (chip-tool), verify: + -that AttributeList attribute contains list of supported attributes. + -that the list has mandatory attributes, optional attributes, supported features and Global attributes. + + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1688648771.261160][149504:149506] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0038 Attribute 0x0000_FFFB DataVersion: 1776331179 + [1688648771.261232][149504:149506] CHIP:TOO: AttributeList: 18 entries + [1688648771.261237][149504:149506] CHIP:TOO: [1]: 0 + [1688648771.261240][149504:149506] CHIP:TOO: [2]: 1 + [1688648771.261242][149504:149506] CHIP:TOO: [3]: 2 + [1688648771.261245][149504:149506] CHIP:TOO: [4]: 3 + [1688648771.261248][149504:149506] CHIP:TOO: [5]: 4 + [1688648771.261251][149504:149506] CHIP:TOO: [6]: 5 + [1688648771.261253][149504:149506] CHIP:TOO: [7]: 6 + [1688648771.261256][149504:149506] CHIP:TOO: [8]: 7 + [1688648771.261259][149504:149506] CHIP:TOO: [9]: 8 + [1688648771.261262][149504:149506] CHIP:TOO: [10]: 10 + [1688648771.261265][149504:149506] CHIP:TOO: [11]: 11 + [1688648771.261268][149504:149506] CHIP:TOO: [12]: 12 + [1688648771.261270][149504:149506] CHIP:TOO: [13]: 65528 + [1688648771.261273][149504:149506] CHIP:TOO: [14]: 65529 + [1688648771.261276][149504:149506] CHIP:TOO: [15]: 65530 + [1688648771.261279][149504:149506] CHIP:TOO: [16]: 65531 + [1688648771.261282][149504:149506] CHIP:TOO: [17]: 65532 + [1688648771.261284][149504:149506] CHIP:TOO: [18]: 65533 + [1688648771.261316][149504:149506] CHIP:EM: <<< [E:655i S:4249 M:65517419 (Ack:79799053)] (S) Msg TX to 1:0000000000000001 [3784] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1688648771.261321][149504:149506] CHIP:IN: (S) Sending msg 65517419 on secure session with LSID: 4249 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + # Note - additional exclusions not handled here ########################## @@ -264,7 +316,7 @@ tests: constraints: contains: [0x03] - # Feature TZ + #Feature TZ - label: "TS5: Check for TZ feature-based events in EventList" PICS: PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F00 command: "readAttribute" @@ -281,7 +333,7 @@ tests: constraints: excludes: [0x00, 0x01, 0x02] - # Feature TSC + #Feature TSC - label: "TS5: Check for TSC feature-based events in EventList" PICS: PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F03 command: "readAttribute" @@ -289,6 +341,7 @@ tests: response: constraints: contains: [0x04] + - label: "TS5: Check for TSC feature-based events not in EventList" PICS: "PICS_EVENT_LIST_ENABLED && !TIMESYNC.S.F03" command: "readAttribute" @@ -297,6 +350,51 @@ tests: constraints: excludes: [0x04] + - label: + "TS5: TH reads from the DUT the EventList attribute. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The + list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool timesynchronization read event-list 1 0 + + Via the TH (chip-tool), verify: + The list SHALL include all the mandatory entries: 0x03 + The list include entries based on feature support: + 0x00 SHALL be included if and only if TIMESYNC.S.F00(TZ) + 0x01 SHALL be included if and only if TIMESYNC.S.F00(TZ) + 0x02 SHALL be included if and only if TIMESYNC.S.F00(TZ) + 0x04 SHALL be included if and only if TIMESYNC.S.F03(TSC) + + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1688648817.829533][149513:149515] CHIP:DMG: } + [1688648817.829584][149513:149515] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0038 Attribute 0x0000_FFFA DataVersion: 1776331179 + [1688648817.829600][149513:149515] CHIP:TOO: EventList: 5 entries + [1688648817.829606][149513:149515] CHIP:TOO: [1]: 0 + [1688648817.829607][149513:149515] CHIP:TOO: [2]: 1 + [1688648817.829609][149513:149515] CHIP:TOO: [3]: 2 + [1688648817.829610][149513:149515] CHIP:TOO: [4]: 3 + [1688648817.829612][149513:149515] CHIP:TOO: [5]: 4 + [1688648817.829644][149513:149515] CHIP:EM: <<< [E:37598i S:15729 M:18516326 (Ack:233541454)] (S) Msg TX to 1:0000000000000001 [3784] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1688648817.829648][149513:149515] CHIP:IN: (S) Sending msg 18516326 on secure session with LSID: 15729 + [1688648817.829657][149513:149515] CHIP:EM: Flushed pending ack for MessageCounter:233541454 on exchange 37598i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + # Note - additional exclusions not handled here ########################## @@ -364,13 +462,51 @@ tests: constraints: excludes: [0x01] + - label: + "TS6: Check for mandatory commands in AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool timesynchronization read accepted-command-list 1 0 + + Via the TH (chip-tool), verify: + -that AcceptedCommandList attribute contains list of supported commands and that list has 5 entries . + + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1688648876.860364][149529:149531] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0038 Attribute 0x0000_FFF9 DataVersion: 1776331179 + [1688648876.860405][149529:149531] CHIP:TOO: AcceptedCommandList: 5 entries + [1688648876.860415][149529:149531] CHIP:TOO: [1]: 0 + [1688648876.860421][149529:149531] CHIP:TOO: [2]: 1 + [1688648876.860427][149529:149531] CHIP:TOO: [3]: 2 + [1688648876.860433][149529:149531] CHIP:TOO: [4]: 4 + [1688648876.860439][149529:149531] CHIP:TOO: [5]: 5 + [1688648876.860502][149529:149531] CHIP:EM: <<< [E:14853i S:24555 M:248733556 (Ack:60358064)] (S) Msg TX to 1:0000000000000001 [3784] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1688648876.860516][149529:149531] CHIP:IN: (S) Sending msg 248733556 on secure session with LSID: 24555 + [1688648876.860554][149529:149531] CHIP:EM: Flushed pending ack for MessageCounter:60358064 on exchange 14853i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + # NOTE: exclusions not checked ########################## # TS 7: GeneratedCommandList ########################## # Feature TZ - - label: "TS6: Check for TZ feature-based commands in AcceptedCommandList" + - label: "TS7: Check for TZ feature-based commands in GeneratedCommandList" PICS: TIMESYNC.S.F00 command: "readAttribute" attribute: "GeneratedCommandList" @@ -379,10 +515,46 @@ tests: contains: [0x03] - label: - "TS6: Check for TZ feature-based commands in not AcceptedCommandList" + "TS7: Check for TZ feature-based commands in not GeneratedCommandList" PICS: "!TIMESYNC.S.F00" command: "readAttribute" attribute: "GeneratedCommandList" response: constraints: excludes: [0x03] + + - label: + "TS7: Check for mandatory commands in GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool timesynchronization read generated-command-list 1 0 + + Via the TH (chip-tool), verify: + -that GeneratedCommandList attribute contains list of supported commands. + -that list has 1(command id-3) entries for this cluster based on DUT implementation. + + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1688648846.603041][149522:149524] CHIP:DMG: } + [1688648846.603137][149522:149524] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0038 Attribute 0x0000_FFF8 DataVersion: 1776331179 + [1688648846.603172][149522:149524] CHIP:TOO: GeneratedCommandList: 1 entries + [1688648846.603183][149522:149524] CHIP:TOO: [1]: 3 + [1688648846.603255][149522:149524] CHIP:EM: <<< [E:41394i S:2765 M:235105515 (Ack:166644135)] (S) Msg TX to 1:0000000000000001 [3784] --- Type 0000:10 (SecureChannel:StandaloneAck) + [1688648846.603270][149522:149524] CHIP:IN: (S) Sending msg 235105515 on secure session with LSID: 2765 + [1688648846.603316][149522:149524] CHIP:EM: Flushed pending ack for MessageCounter:166644135 on exchange 41394i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_TMP_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TMP_1_1.yaml index 6dddc6a8f78d5f..52792256be90dc 100644 --- a/src/app/tests/suites/certification/Test_TC_TMP_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TMP_1_1.yaml @@ -97,6 +97,7 @@ tests: IDs." verification: | ./chip-tool temperaturemeasurement read event-list 1 1 + On TH(chip-tool), Verify that the DUT response provides a list of supported events. For this cluster the list is usually empty but it can contain manufacturer specific event IDs. [1676466045.154072][28094:28096] CHIP:DMG: } [1676466045.154196][28094:28096] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0402 Attribute 0x0000_FFFA DataVersion: 3399649825 @@ -105,7 +106,7 @@ tests: [1676466045.154323][28094:28096] CHIP:IN: (S) Sending msg 190747810 on secure session with LSID: 5317 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml index 0ec5d4dfe2d042..cefd166e28065b 100644 --- a/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml @@ -625,6 +625,7 @@ tests: IDs." verification: | ./chip-tool thermostat read event-list 1 1 + On TH(chip-tool), Verify that the DUT response provides a list of supported events. For this cluster the list is usually empty but it can contain manufacturer specific event IDs. [1676466998.893033][29061:29063] CHIP:DMG: } [1676466998.893114][29061:29063] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0201 Attribute 0x0000_FFFA DataVersion: 2603128677 @@ -633,7 +634,7 @@ tests: [1676466998.893221][29061:29063] CHIP:IN: (S) Sending msg 190799889 on secure session with LSID: 59401 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml index 0d5de8b817ae5a..5880ab6abd29d4 100644 --- a/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml @@ -65,7 +65,50 @@ tests: type: list contains: [0, 1, 2, 65528, 65529, 65531, 65532, 65533] - - label: "Step 5: Read the global attribute: AcceptedCommandList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4b: Read the global attribute: AttributeList. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool thermostatuserinterfaceconfiguration read attribute-list 1 1 + + Via the TH (chip-tool), verify: + - that AttributeList attribute contains list of supported attributes. + -that the list has mandatory attributes, Tolerance attribute (If that optional attribute is true) and global attributes. + + Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation. + + [1676293075.930307][3422:3424] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0204 Attribute 0x0000_FFFB DataVersion: 1373411682 + [1676293075.930387][3422:3424] CHIP:TOO: AttributeList: 9 entries + [1676293075.930414][3422:3424] CHIP:TOO: [1]: 0 + [1676293075.930437][3422:3424] CHIP:TOO: [2]: 1 + [1676293075.930458][3422:3424] CHIP:TOO: [3]: 2 + [1676293075.930480][3422:3424] CHIP:TOO: [4]: 65528 + [1676293075.930502][3422:3424] CHIP:TOO: [5]: 65529 + [1676293075.930524][3422:3424] CHIP:TOO: [6]: 65530 + [1676293075.930547][3422:3424] CHIP:TOO: [7]: 65531 + [1676293075.930569][3422:3424] CHIP:TOO: [8]: 65532 + [1676293075.930590][3422:3424] CHIP:TOO: [9]: 65533 + [1676293075.930795][3422:3424] CHIP:EM: <<< [E:40240i M:140476277 (Ack:118115868)] (S) Msg TX to 1:000000 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -73,7 +116,37 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: GeneratedCommandList" + - label: + "Step 5b: Read the global attribute: AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool thermostatuserinterfaceconfiguration read accepted-command-list 1 1 + + Via the TH (chip-tool), verify: + -that AcceptedCommandList attribute contains list of supported commands. + -that list has empty(0 entries) for this cluster and it may contain manufacturer specific command IDs. + + [1653990551.782477][6688:6693] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0204 Attribute 0x0000_FFF9 DataVersion: 398536759 + [1653990551.782585][6688:6693] CHIP:TOO: AcceptedCommandList: 0 entries + [1653990551.782710][6688:6693] CHIP:EM: Sending Standalone Ack for MessageCounter:925369 on exchange 6142i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: @@ -81,6 +154,36 @@ tests: constraints: type: list + - label: + "Step 6b: Read the global attribute: GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool thermostatuserinterfaceconfiguration read generated-command-list 1 1 + + Via the TH (chip-tool), verify: + -that GeneratedCommandList attribute contains list of supported commands. + -that list has empty(0 entries) for this cluster. + + [1653990618.773396][6698:6703] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0204 Attribute 0x0000_FFF8 DataVersion: 398536759 + [1653990618.773518][6698:6703] CHIP:TOO: GeneratedCommandList: 0 entries + [1653990618.773666][6698:6703] CHIP:EM: Sending Standalone Ack for MessageCounter:161554 on exchange 23764i + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + #Manufacturer specific event IDs check not possible - label: "Step 7: Read EventList attribute from the DUT.For this cluster the @@ -88,6 +191,7 @@ tests: IDs." verification: | ./chip-tool thermostatuserinterfaceconfiguration read event-list 1 1 + On TH(chip-tool), Verify that the DUT response provides a list of supported events. For this cluster the list is usually empty but it can contain manufacturer specific event IDs. [1676466144.926927][28127:28129] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0204 Attribute 0x0000_FFFA DataVersion: 317726044 [1676466144.926964][28127:28129] CHIP:TOO: EventList: 0 entries @@ -96,7 +200,7 @@ tests: [1676466144.927067][28127:28129] CHIP:EM: Flushed pending ack for MessageCounter:156666885 on exchange 22756i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_TVOCCONC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TVOCCONC_1_1.yaml index 4dfe7de1773721..ff5ef4e560d878 100644 --- a/src/app/tests/suites/certification/Test_TC_TVOCCONC_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_TVOCCONC_1_1.yaml @@ -313,7 +313,55 @@ tests: type: list excludes: [10] - - label: "Step 5l: Read the global attribute: EventList" + #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 + - label: + "Step 4b: Read the global attribute: AttributeList. 1.The list SHALL + NOT contain any additional values in the standard or scoped range: + (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list + MAY contain values in the Manufacturer Extensible Identifier (MEI) + range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI + range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list + SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool totalvolatileorganiccompoundsconcentrationmeasurement read attribute-list 1 1 + + Via the TH (chip-tool), verify that the AttributeList attribute contains + - Mandatory entries:0x0009, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc & 0xfffd + - Optional entries:- 0x0007 + - Based on feature support:- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x000a + + [1687339255.386215][5005:5007] CHIP:TOO: AttributeList: 17 entries + [1687339255.386288][5005:5007] CHIP:TOO: [1]: 0 + [1687339255.386349][5005:5007] CHIP:TOO: [2]: 1 + [1687339255.386407][5005:5007] CHIP:TOO: [3]: 2 + [1687339255.386464][5005:5007] CHIP:TOO: [4]: 3 + [1687339255.386526][5005:5007] CHIP:TOO: [5]: 4 + [1687339255.386583][5005:5007] CHIP:TOO: [6]: 5 + [1687339255.386640][5005:5007] CHIP:TOO: [7]: 6 + [1687339255.386696][5005:5007] CHIP:TOO: [8]: 7 + [1687339255.386753][5005:5007] CHIP:TOO: [9]: 8 + [1687339255.386810][5005:5007] CHIP:TOO: [10]: 9 + [1687339255.386868][5005:5007] CHIP:TOO: [11]: 10 + [1687339255.386925][5005:5007] CHIP:TOO: [12]: 65528 + [1687339255.386983][5005:5007] CHIP:TOO: [13]: 65529 + [1687339255.387041][5005:5007] CHIP:TOO: [14]: 65530 + [1687339255.387098][5005:5007] CHIP:TOO: [15]: 65531 + [1687339255.387155][5005:5007] CHIP:TOO: [16]: 65532 + [1687339255.387213][5005:5007] CHIP:TOO: [17]: 65533 + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 5a: Read the global attribute: EventList" command: "readAttribute" attribute: "EventList" PICS: PICS_EVENT_LIST_ENABLED @@ -322,7 +370,35 @@ tests: constraints: type: list - - label: "Step 6: Read the global attribute: AcceptedCommandList" + - label: + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. + The list MAY contain values in the Manufacturer Extensible Identifier + (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed + MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The + list SHALL NOT contain any values in the Test Vendor or invalid range: + (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - + 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the + allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool totalvolatileorganiccompoundsconcentrationmeasurement read event-list 1 1 + + Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685965965.418394][11855:11857] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042E Attribute 0x0000_FFFA DataVersion: 1180043964 + [1685965965.418498][11855:11857] CHIP:TOO: EventList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 6a: Read the global attribute: AcceptedCommandList" command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -330,10 +406,64 @@ tests: constraints: type: list - - label: "Step 7: Read the global attribute: GeneratedCommandList" + - label: + "Step 6b: Read the global attribute: AcceptedCommandList. 1. The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3. The list SHALL NOT contain any + values in the Test Vendor or invalid range: (0x0000_0100 - + 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - + 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool totalvolatileorganiccompoundsconcentrationmeasurement read accepted-command-list 1 1 + + Via the TH (chip-tool), verify that the AcceptedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966056.111188][11860:11862] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042E Attribute 0x0000_FFF9 DataVersion: 1180043964 + [1685966056.111377][11860:11862] CHIP:TOO: AcceptedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" + + - label: "Step 7a: Read the global attribute: GeneratedCommandList" command: "readAttribute" attribute: "GeneratedCommandList" response: value: [] constraints: type: list + + - label: + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list + SHALL NOT contain any additional values in the standard or scoped + range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in + the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - + 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), + these values SHALL be ignored. 3.The list SHALL NOT contain any values + in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), + (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where + XXXX is the allowed MEI range (0x0001 - 0xFFF1)" + verification: | + ./chip-tool totalvolatileorganiccompoundsconcentrationmeasurement read generated-command-list 1 1 + + Via the TH (chip-tool), verify that the GeneratedCommandList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT + + [1685966085.385740][11867:11869] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_042E Attribute 0x0000_FFF8 DataVersion: 1180043964 + [1685966085.385829][11867:11869] CHIP:TOO: GeneratedCommandList: 0 entries + cluster: "LogCommands" + command: "UserPrompt" + PICS: PICS_USER_PROMPT + arguments: + values: + - name: "message" + value: "Please enter 'y' for success" + - name: "expectedValue" + value: "y" diff --git a/src/app/tests/suites/certification/Test_TC_ULABEL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ULABEL_1_1.yaml index 74de325fd20f8e..17970de7312fdb 100644 --- a/src/app/tests/suites/certification/Test_TC_ULABEL_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_ULABEL_1_1.yaml @@ -32,7 +32,6 @@ tests: value: nodeId - label: "Step 2: Read the global attribute: ClusterRevision" - PICS: ULABEL.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -41,7 +40,6 @@ tests: type: int16u - label: "Step 3: Read the global attribute: FeatureMap" - PICS: ULABEL.S.Afffc command: "readAttribute" attribute: "FeatureMap" response: @@ -50,7 +48,7 @@ tests: type: bitmap32 - label: "Step 4a: Read the global attribute: AttributeList" - PICS: PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -58,9 +56,8 @@ tests: type: list contains: [0, 65528, 65529, 65530, 65531, 65532, 65533] - #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570 - label: "Step 4a: Read the global attribute: AttributeList" - PICS: "!PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -97,7 +94,7 @@ tests: [1676293294.574170][3554:3556] CHIP:EM: <<< [E:29683i M:71170844 (Ack:159730489)] (S) Msg TX to 1:0000000 cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ULABEL.S.Afffb + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -117,13 +114,12 @@ tests: ./chip-tool userlabel read event-list 1 0 Verify "EventList" contains a list of supported events, for this cluster the list SHALL be empty(0 entries) on the TH(Chip-tool) Log: - 1676373264.278073][11583:11585] CHIP:DMG: } [1676373264.278133][11583:11585] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0041 Attribute 0x0000_FFFA DataVersion: 916074662 [1676373264.278155][11583:11585] CHIP:TOO: EventList: 0 entries cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ULABEL.S.Afffa + PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED arguments: values: - name: "message" @@ -150,7 +146,7 @@ tests: [1652851830.120217][2420:2425] CHIP:EM: Sending Standalone Ack for MessageCounter:11833674 on exchange 50545i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ULABEL.S.Afff9 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" @@ -177,7 +173,7 @@ tests: [1652851867.076907][2427:2432] CHIP:EM: Sending Standalone Ack for MessageCounter:16707612 on exchange 9749i cluster: "LogCommands" command: "UserPrompt" - PICS: PICS_USER_PROMPT && ULABEL.S.Afff8 + PICS: PICS_USER_PROMPT arguments: values: - name: "message" diff --git a/src/app/tests/suites/certification/Test_TC_WNCV_1_1.yaml b/src/app/tests/suites/certification/Test_TC_WNCV_1_1.yaml index 4f4ec40afcb134..b8417fe63a2046 100644 --- a/src/app/tests/suites/certification/Test_TC_WNCV_1_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_WNCV_1_1.yaml @@ -35,7 +35,6 @@ tests: ### Attribute[0xFFFD]: ClusterRevision ======================================= - label: "Step 2: TH reads from the DUT the (0xFFFD) ClusterRevision attribute" - PICS: WNCV.S.Afffd command: "readAttribute" attribute: "ClusterRevision" response: @@ -47,8 +46,8 @@ tests: - label: "Step 3a: TH reads from the DUT the (0xFFFC) FeatureMap attribute" PICS: - " WNCV.S.Afffc && !WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && - !WNCV.S.F03 && !WNCV.S.F04 " + "!WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && !WNCV.S.F03 && + !WNCV.S.F04 " command: "readAttribute" attribute: "FeatureMap" response: @@ -113,7 +112,7 @@ tests: - label: "Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute" - PICS: PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb + PICS: PICS_EVENT_LIST_ENABLED command: "readAttribute" attribute: "AttributeList" response: @@ -124,7 +123,7 @@ tests: - label: "Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute" - PICS: "!PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb" + PICS: "!PICS_EVENT_LIST_ENABLED" command: "readAttribute" attribute: "AttributeList" response: @@ -134,7 +133,7 @@ tests: - label: "Step 4b: TH reads optional attribute(SafetyStatus) in AttributeList" - PICS: WNCV.S.Afffb && WNCV.S.A001a + PICS: WNCV.S.A001a command: "readAttribute" attribute: "AttributeList" response: @@ -145,7 +144,7 @@ tests: - label: "Step 4c: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 & WNCV.S.F03) attribute in AttributeList" - PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03 && WNCV.S.Afffb + PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03 command: "readAttribute" attribute: "AttributeList" response: @@ -156,7 +155,7 @@ tests: - label: "Step 4d: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 ) attribute in AttributeList" - PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.Afffb + PICS: WNCV.S.F00 && WNCV.S.F02 command: "readAttribute" attribute: "AttributeList" response: @@ -167,7 +166,7 @@ tests: - label: "Step 4e: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 & WNCV.S.F03) attribute in AttributeList" - PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03 && WNCV.S.Afffb + PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03 command: "readAttribute" attribute: "AttributeList" response: @@ -178,7 +177,7 @@ tests: - label: "Step 4f: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 ) attribute in AttributeList" - PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.Afffb + PICS: WNCV.S.F01 && WNCV.S.F04 command: "readAttribute" attribute: "AttributeList" response: @@ -198,7 +197,6 @@ tests: - label: "Step 6a: TH reads from the DUT the (0xFFF9) AcceptedCommandList attribute" - PICS: WNCV.S.Afff9 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -209,7 +207,7 @@ tests: - label: "Step 6b: TH reads Feature dependent(WNCV.S.F00 & WNCV.S.F02) command in AcceptedCommandList" - PICS: WNCV.S.Afff9 && WNCV.S.F00 && WNCV.S.F02 + PICS: WNCV.S.F00 && WNCV.S.F02 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -220,7 +218,7 @@ tests: - label: "Step 6c: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F03) command in AcceptedCommandList" - PICS: WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F03 + PICS: WNCV.S.F01 && WNCV.S.F03 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -231,7 +229,7 @@ tests: - label: "Step 6d: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F04) command in AcceptedCommandList" - PICS: WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F04 + PICS: WNCV.S.F01 && WNCV.S.F04 command: "readAttribute" attribute: "AcceptedCommandList" response: @@ -242,7 +240,6 @@ tests: - label: "Step 7: TH reads from the DUT the (0xFFF8) GeneratedCommandList attribute" - PICS: WNCV.S.Afff8 command: "readAttribute" attribute: "GeneratedCommandList" response: diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values index 24826e89021967..6025a953f089ca 100644 --- a/src/app/tests/suites/certification/ci-pics-values +++ b/src/app/tests/suites/certification/ci-pics-values @@ -33,12 +33,7 @@ TMP.C.AO-WRITE=0 # Software Diagnostics DGSW.S=1 -DGSW.S.Afffd=1 -DGSW.S.Afffc=1 -DGSW.S.Afffb=1 -DGSW.S.Afffa=1 -DGSW.S.Afff9=1 -DGSW.S.Afff8=1 + DGSW.S.F00=1 DGSW.S.E00=1 @@ -94,12 +89,6 @@ WNCV.S.A0002=1 WNCV.S.A001a=1 WNCV.S.C05.Rsp=1 WNCV.S.C08.Rsp=1 -WNCV.S.Afffd=1 -WNCV.S.Afffc=1 -WNCV.S.Afffb=1 -WNCV.S.Afffa=1 -WNCV.S.Afff9=1 -WNCV.S.Afff8=1 WNCV.S.C01.Rsp=1 WNCV.S.C00.Rsp=1 WNCV.S.C02.Rsp=1 @@ -581,13 +570,6 @@ PRS.S.A0014=0 PRS.S.F00=0 PRS.M.PressureChange=0 -PRS.S.Afffd=1 -PRS.S.Afffc=1 -PRS.S.Afffb=1 -PRS.S.Afffa=1 -PRS.S.Afff9=1 -PRS.S.Afff8=1 - PRS.C=0 PRS.C.AM-READ=0 PRS.C.AM-WRITE=0 @@ -788,12 +770,7 @@ LTIME.S=1 LTIME.S.A0000=1 LTIME.S.A0001=1 LTIME.S.A0002=1 -LTIME.S.Afff8=1 -LTIME.S.Afff9=1 -LTIME.S.Afffa=1 -LTIME.S.Afffb=1 -LTIME.S.Afffc=1 -LTIME.S.Afffd=1 + LTIME.S.A0000.12HR=1 LTIME.S.A0000.24HR=1 @@ -814,12 +791,7 @@ LTIME.C.A0000.24HR=1 LUNIT.S=1 LUNIT.S.F00=1 LUNIT.S.A0000=1 -LUNIT.S.Afff8=1 -LUNIT.S.Afff9=1 -LUNIT.S.Afffa=1 -LUNIT.S.Afffb=1 -LUNIT.S.Afffc=1 -LUNIT.S.Afffd=1 + LUNIT.TempUnit.Fahrenheit=1 LUNIT.TempUnit.Celsius=1 LUNIT.TempUnit.Kelvin=1 @@ -876,23 +848,10 @@ ULABEL.S.A0000=1 ULABEL.C.A0000=1 ULABEL.C=0 -ULABEL.S.Afffd=1 -ULABEL.S.Afffc=1 -ULABEL.S.Afffb=1 -ULABEL.S.Afffa=1 -ULABEL.S.Afff9=1 -ULABEL.S.Afff8=1 - # Fixed Label FLABEL.S=1 FLABEL.S.A0000=1 -FLABEL.S.Afffd=1 -FLABEL.S.Afffc=1 -FLABEL.S.Afffb=1 -FLABEL.S.Afffa=1 -FLABEL.S.Afff9=1 -FLABEL.S.Afff8=1 FLABEL.C=1 FLABEL.C.A0000=1 @@ -932,12 +891,6 @@ MCORE.BDX.SynchronousReceiver=0 MCORE.BDX.SynchronousSender=0 # General Diagnostics Cluster -DGGEN.S.Afffd=1 -DGGEN.S.Afffc=1 -DGGEN.S.Afffb=1 -DGGEN.S.Afffa=1 -DGGEN.S.Afff9=1 -DGGEN.S.Afff8=1 DGGEN.S=1 DGGEN.S.A0000=1 @@ -975,12 +928,7 @@ FLW.S.A0002=1 FLW.S.A0003=1 FLW.M.FlowChange=1 -FLW.S.Afffd=1 -FLW.S.Afffc=1 -FLW.S.Afffb=1 -FLW.S.Afffa=1 -FLW.S.Afff9=1 -FLW.S.Afff8=1 + FLW.C=1 @@ -1040,13 +988,6 @@ PCC.S.E0e=0 PCC.S.E0f=0 PCC.S.E10=0 -PCC.S.Afffd=1 -PCC.S.Afffc=1 -PCC.S.Afffb=1 -PCC.S.Afffa=1 -PCC.S.Afff9=1 -PCC.S.Afff8=1 - PCC.C=0 PCC.C.AM-READ=0 PCC.C.AM-WRITE=0 @@ -1113,12 +1054,6 @@ TSUIC.S.A0002=1 # Binding BIND.S=1 BIND.S.A0000=1 -BIND.S.Afffd=1 -BIND.S.Afffc=1 -BIND.S.Afffb=1 -BIND.S.Afffa=1 -BIND.S.Afff9=1 -BIND.S.Afff8=1 BIND.C=0 @@ -1173,12 +1108,7 @@ MCORE.DD.COMMISSIONING_SUBTYPE_T=1 DGETH.S=1 DGETH.S.C00.Rsp=1 -DGETH.S.Afffd=1 -DGETH.S.Afffc=1 -DGETH.S.Afffb=1 -DGETH.S.Afffa=1 -DGETH.S.Afff9=1 -DGETH.S.Afff8=1 + DGETH.C=1 DGETH.C.C00.Tx=1 @@ -1320,12 +1250,6 @@ BOOL.C.AO-WRITE=0 # Diagnostics Logs Cluster DLOG.S=1 -DLOG.S.Afffd=1 -DLOG.S.Afffc=1 -DLOG.S.Afffb=1 -DLOG.S.Afffa=1 -DLOG.S.Afff9=1 -DLOG.S.Afff8=1 DLOG.S.C00.Rsp=1 DLOG.S.C01.Tx=1 @@ -1767,12 +1691,7 @@ BINFO.S.A0011=0 BINFO.S.A0012=1 BINFO.S.A0013=1 BINFO.S.A0014=1 -BINFO.S.Afffd=1 -BINFO.S.Afffc=1 -BINFO.S.Afffb=1 -BINFO.S.Afffa=1 -BINFO.S.Afff9=1 -BINFO.S.Afff8=1 + # Events BINFO.S.E00=1 BINFO.S.E01=1 @@ -1809,12 +1728,7 @@ BINFO.C.E02=1 BINFO.C.E03=1 # NetworkCommissioning Cluster -CNET.S.Afffd=1 -CNET.S.Afffc=1 -CNET.S.Afffb=1 -CNET.S.Afffa=1 -CNET.S.Afff9=1 -CNET.S.Afff8=1 + # Server Attributes CNET.S=1 CNET.S.A0000=1 @@ -1870,12 +1784,6 @@ CNET.C.F02=0 # Node Operational Credential # Server Attributes OPCREDS.S=1 -OPCREDS.S.Afffd=1 -OPCREDS.S.Afffc=1 -OPCREDS.S.Afffb=1 -OPCREDS.S.Afffa=1 -OPCREDS.S.Afff9=1 -OPCREDS.S.Afff8=1 OPCREDS.S.A0000=1 OPCREDS.S.A0001=1 @@ -1925,6 +1833,17 @@ OPCREDS.C.C0b.Tx=1 OPSTATE.S=1 OPSTATE.C=1 +#ManuallyControlled + +OPSTATE.S.M.ST_STOPPED=1 +OPSTATE.S.M.ST_RUNNING=1 +OPSTATE.S.M.ST_PAUSED=1 +OPSTATE.S.M.ST_ERROR=1 +OPSTATE.S.M.ERR_NO_ERROR=1 +OPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME=1 +OPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION=1 +OPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE=1 + # Server Attributes OPSTATE.S.A0000=1 @@ -2047,12 +1966,7 @@ ACL.S.A0003=1 ACL.S.A0004=1 ACL.S.E00=1 ACL.S.E01=1 -ACL.S.Afffd=1 -ACL.S.Afffc=1 -ACL.S.Afffb=1 -ACL.S.Afffa=1 -ACL.S.Afff9=1 -ACL.S.Afff8=1 + ACL.C=1 ACL.C.E00=0 @@ -2296,7 +2210,7 @@ ACFREMON.S.A0002=1 ACFREMON.S.A0003=1 ACFREMON.S.A0004=1 ACFREMON.S.A0005=1 -ACFREMON.S.C00.Rsp=0 +ACFREMON.S.C00.Rsp=1 # Air Quality AIRQUAL.C=0 @@ -2558,7 +2472,6 @@ RVCCLEANM.S.A0000=1 RVCCLEANM.S.A0001=1 RVCCLEANM.S.A0002=1 RVCCLEANM.S.A0003=1 -RVCCLEANM.S.Afffa=1 #Feature RVCCLEANM.S.F00=1 @@ -2573,6 +2486,28 @@ PIXIT.RVCCLEANM.CAN_TEST_MODE_FAILURE=1 RVCOPSTATE.S=1 RVCOPSTATE.C=1 +#ManuallyControlled + +RVCOPSTATE.S.M.ST_STOPPED=1 +RVCOPSTATE.S.M.ST_RUNNING=1 +RVCOPSTATE.S.M.ST_PAUSED=1 +RVCOPSTATE.S.M.ST_ERROR=1 +RVCOPSTATE.S.M.ST_SEEKING_CHARGER=1 +RVCOPSTATE.S.M.ST_CHARGING=1 +RVCOPSTATE.S.M.ST_DOCKED=1 +RVCOPSTATE.S.M.ERR_NO_ERROR=1 +RVCOPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME=1 +RVCOPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION=1 +RVCOPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE=1 +RVCOPSTATE.S.M.ERR_FAILED_TO_FIND_CHARGING_DOCK=1 +RVCOPSTATE.S.M.ERR_STUCK=1 +RVCOPSTATE.S.M.ERR_DUST_BIN_MISSING=1 +RVCOPSTATE.S.M.ERR_DUST_BIN_FULL=1 +RVCOPSTATE.S.M.ERR_WATER_TANK_EMPTY=1 +RVCOPSTATE.S.M.ERR_WATER_TANK_MISSING=1 +RVCOPSTATE.S.M.ERR_WATER_TANK_LID_OPEN=1 +RVCOPSTATE.S.M.ERR_MOP_CLEANING_PAD_MISSING=1 + #Events RVCOPSTATE.S.E00=1 RVCOPSTATE.S.E01=1 @@ -2606,7 +2541,6 @@ RVCRUNM.S.A0000=1 RVCRUNM.S.A0001=1 RVCRUNM.S.A0002=1 RVCRUNM.S.A0003=1 -RVCRUNM.S.Afffa=1 #Commands RVCRUNM.S.C00.Rsp=1 @@ -2685,9 +2619,6 @@ ICDM.S.C03.Rsp=1 ICDM.C.C00.Rsp=1 ICDM.S.C01.Tx=1 - - - # Smoke CO Alarm Cluster SMOKECO.S=1 SMOKECO.S.F00=1 diff --git a/src/app/tests/suites/ciTests.json b/src/app/tests/suites/ciTests.json index 25ba9a6b338a2b..93746a43470d09 100644 --- a/src/app/tests/suites/ciTests.json +++ b/src/app/tests/suites/ciTests.json @@ -177,6 +177,11 @@ ], "PowerSourceConfiguration": ["Test_TC_PSCFG_1_1", "Test_TC_PSCFG_2_1"], "RelativeHumidityMeasurement": ["Test_TC_RH_1_1", "Test_TC_RH_2_1"], + "RoboticVacuumCleaner": [ + "Test_TC_RVCCLEANM_1_1", + "Test_TC_RVCRUNM_1_1", + "Test_TC_RVCOPSTATE_1_1" + ], "SecureChannel": [], "SmokeCOAlarm": [ "Test_TC_SMOKECO_1_1", @@ -285,15 +290,12 @@ "DL_LockUnlock", "DL_Schedules", "Test_TC_DRLK_1_1", - "Test_TC_DRLK_2_2", - "Test_TC_DRLK_2_3", "Test_TC_DRLK_2_4", "Test_TC_DRLK_2_5", "Test_TC_DRLK_2_6", "Test_TC_DRLK_2_7", "Test_TC_DRLK_2_8", - "Test_TC_DRLK_2_11", - "Test_TC_DRLK_2_12" + "Test_TC_DRLK_2_11" ], "Groups": [ "TestGroupMessaging", diff --git a/src/app/tests/suites/manualTests.json b/src/app/tests/suites/manualTests.json index c57af2d95df63d..df76b9d101193d 100644 --- a/src/app/tests/suites/manualTests.json +++ b/src/app/tests/suites/manualTests.json @@ -61,7 +61,8 @@ "Test_TC_DA_1_1", "Test_TC_DA_1_3", "Test_TC_DA_1_4", - "Test_TC_DA_1_6" + "Test_TC_DA_1_6", + "Test_TC_DA_1_8" ], "DishwasherAlarm": [ "Test_TC_DISHALM_1_1", @@ -292,23 +293,13 @@ ], "RVCCleanMode": [ "Test_TC_RVCCLEANM_1_1", - "Test_TC_RVCCLEANM_1_2", - "Test_TC_RVCCLEANM_2_1", "Test_TC_RVCCLEANM_3_1", - "Test_TC_RVCCLEANM_3_2", "Test_TC_RVCCLEANM_3_3" ], - "RVCOperationalState": [ - "Test_TC_RVCOPSTATE_2_1", - "Test_TC_RVCOPSTATE_2_2", - "Test_TC_RVCOPSTATE_2_3" - ], + "RVCOperationalState": ["Test_TC_RVCOPSTATE_2_2"], "RVCRunMode": [ "Test_TC_RVCRUNM_1_1", - "Test_TC_RVCRUNM_1_2", - "Test_TC_RVCRUNM_2_1", "Test_TC_RVCRUNM_3_1", - "Test_TC_RVCRUNM_3_2", "Test_TC_RVCRUNM_3_3" ], "TemperatureControlledCabinetMode": [ diff --git a/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml index e27710d26f8c8f..8ef8ba9279e646 100644 --- a/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml @@ -31,6 +31,11 @@ limitations under the License. + + + + + General Descriptor diff --git a/src/app/zap-templates/zcl/data-model/chip/scene.xml b/src/app/zap-templates/zcl/data-model/chip/scene.xml index 313d921a93e41b..903d07b3a1670b 100644 --- a/src/app/zap-templates/zcl/data-model/chip/scene.xml +++ b/src/app/zap-templates/zcl/data-model/chip/scene.xml @@ -232,5 +232,8 @@ limitations under the License. + + + diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp index 8cb41b167169cc..e37b058f7a67e4 100644 --- a/src/controller/CHIPDeviceController.cpp +++ b/src/controller/CHIPDeviceController.cpp @@ -2150,7 +2150,7 @@ void DeviceCommissioner::ParseFabrics() if (mPairingDelegate != nullptr) { - mPairingDelegate->OnFabricCheck(info); + mPairingDelegate->OnFabricCheck(info.nodeId); } CommissioningDelegate::CommissioningReport report; @@ -2399,7 +2399,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio break; case CommissioningStage::kCheckForMatchingFabric: { // Read the current fabrics - if (params.GetCheckForMatchingFabric()) + if (!params.GetCheckForMatchingFabric()) { // We don't actually want to do this step, so just bypass it ChipLogProgress(Controller, "kCheckForMatchingFabric step called without parameter set, skipping"); diff --git a/src/controller/DevicePairingDelegate.h b/src/controller/DevicePairingDelegate.h index e46d7c158ffb62..80d6296d52109c 100644 --- a/src/controller/DevicePairingDelegate.h +++ b/src/controller/DevicePairingDelegate.h @@ -87,7 +87,7 @@ class DLL_EXPORT DevicePairingDelegate * @brief * Called when MatchingFabricInfo returned from target */ - virtual void OnFabricCheck(const MatchingFabricInfo & info) {} + virtual void OnFabricCheck(NodeId matchingNodeId) {} /** * @brief diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter index f024e626d4ed2a..1824759d5c876d 100644 --- a/src/controller/data_model/controller-clusters.matter +++ b/src/controller/data_model/controller-clusters.matter @@ -160,6 +160,9 @@ client cluster Groups = 4 { client cluster Scenes = 5 { bitmap Feature : BITMAP32 { kSceneNames = 0x1; + kExplicit = 0x2; + kTableSize = 0x4; + kFabricScenes = 0x8; } bitmap ScenesCopyMode : BITMAP8 { @@ -566,6 +569,10 @@ client cluster PulseWidthModulation = 28 { /** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ client cluster Descriptor = 29 { + bitmap Feature : BITMAP32 { + kTagList = 0x1; + } + struct DeviceTypeStruct { devtype_id deviceType = 0; int16u revision = 1; diff --git a/src/controller/java/AndroidCallbacks.cpp b/src/controller/java/AndroidCallbacks.cpp index f6d9499d8f8d2a..daa7f9ef8abcb0 100644 --- a/src/controller/java/AndroidCallbacks.cpp +++ b/src/controller/java/AndroidCallbacks.cpp @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2020-2021 Project CHIP Authors + * Copyright (c) 2020-2023 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -488,15 +490,12 @@ CHIP_ERROR InvokeCallback::CreateInvokeElement(const app::ConcreteCommandPath & TLV::TLVReader readerForJavaTLV; TLV::TLVReader readerForJson; readerForJavaTLV.Init(*apData); - readerForJson.Init(*apData); // Create TLV byte array to pass to Java layer size_t bufferLen = readerForJavaTLV.GetRemainingLength() + readerForJavaTLV.GetLengthRead(); std::unique_ptr buffer = std::unique_ptr(new uint8_t[bufferLen]); uint32_t size = 0; - // The TLVReader's read head is not pointing to the first element in the container, instead of the container itself, use - // a TLVWriter to get a TLV with a normalized TLV buffer (Wrapped with an anonymous tag, no extra "end of container" tag - // at the end.) + TLV::TLVWriter writer; writer.Init(buffer.get(), bufferLen); err = writer.CopyElement(TLV::AnonymousTag(), readerForJavaTLV); @@ -505,11 +504,13 @@ CHIP_ERROR InvokeCallback::CreateInvokeElement(const app::ConcreteCommandPath & chip::ByteArray jniByteArray(env, reinterpret_cast(buffer.get()), size); // Convert TLV to JSON - Json::Value json; + std::string json; + readerForJson.Init(buffer.get(), size); + err = readerForJson.Next(); + ReturnErrorOnFailure(err); err = TlvToJson(readerForJson, json); ReturnErrorOnFailure(err); - - UtfString jsonString(env, JsonToString(json).c_str()); + UtfString jsonString(env, json.c_str()); outObj = env->CallStaticObjectMethod(invokeElementCls, invokeElementCtor, static_cast(aPath.mEndpointId), static_cast(aPath.mClusterId), static_cast(aPath.mCommandId), jniByteArray.jniValue(), jsonString.jniValue()); @@ -614,6 +615,7 @@ void ReportCallback::ReportError(jobject attributePath, jobject eventPath, const CHIP_ERROR err = CHIP_NO_ERROR; JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + ChipLogError(Controller, "ReportCallback::ReportError is called with %u", errorCode); jthrowable exception; err = AndroidControllerExceptions::GetInstance().CreateAndroidControllerException(env, message, errorCode, exception); VerifyOrReturn( @@ -722,7 +724,7 @@ void WriteAttributesCallback::ReportError(jobject attributePath, const char * me CHIP_ERROR err = CHIP_NO_ERROR; JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); - ChipLogError(Controller, "WriteAttributesCallback ReportError is called"); + ChipLogError(Controller, "WriteAttributesCallback::ReportError is called with %u", errorCode); jthrowable exception; err = AndroidControllerExceptions::GetInstance().CreateAndroidControllerException(env, message, errorCode, exception); VerifyOrReturn(err == CHIP_NO_ERROR, @@ -825,7 +827,7 @@ void InvokeCallback::ReportError(const char * message, ChipError::StorageType er CHIP_ERROR err = CHIP_NO_ERROR; JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); - ChipLogError(Controller, "InvokeCallback ReportError is called"); + ChipLogError(Controller, "InvokeCallback::ReportError is called with %u", errorCode); jthrowable exception; err = AndroidControllerExceptions::GetInstance().CreateAndroidControllerException(env, message, errorCode, exception); VerifyOrReturn( diff --git a/src/controller/java/BUILD.gn b/src/controller/java/BUILD.gn index e967b0bd007936..a2865ffd326c1c 100644 --- a/src/controller/java/BUILD.gn +++ b/src/controller/java/BUILD.gn @@ -104,7 +104,10 @@ shared_library("jni") { deps += [ "${chip_root}/src/platform/Linux" ] } - cflags = [ "-Wno-unknown-pragmas" ] + cflags = [ + "-Wno-unknown-pragmas", + "-Wconversion", + ] output_dir = "${root_out_dir}/lib/jni" } else { @@ -143,7 +146,10 @@ if (chip_link_tests) { deps += [ "${chip_root}/src/platform/Linux" ] } - cflags = [ "-Wno-unknown-pragmas" ] + cflags = [ + "-Wno-unknown-pragmas", + "-Wconversion", + ] output_dir = "${root_out_dir}/lib/jni" } else { diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index 64c7dac4774785..be7bfa6b28008f 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -46,6 +46,8 @@ #include #include #include +#include +#include #include #include #include @@ -340,20 +342,21 @@ JNI_METHOD(jlong, newDeviceController)(JNIEnv * env, jobject self, jobject contr SuccessOrExit(err); { - uint64_t fabricId = env->CallLongMethod(controllerParams, getFabricId); - uint16_t listenPort = env->CallIntMethod(controllerParams, getUdpListenPort); - uint16_t controllerVendorId = env->CallIntMethod(controllerParams, getControllerVendorId); + uint64_t fabricId = static_cast(env->CallLongMethod(controllerParams, getFabricId)); + uint16_t listenPort = static_cast(env->CallIntMethod(controllerParams, getUdpListenPort)); + uint16_t controllerVendorId = static_cast(env->CallIntMethod(controllerParams, getControllerVendorId)); jobject keypairDelegate = env->CallObjectMethod(controllerParams, getKeypairDelegate); jbyteArray rootCertificate = (jbyteArray) env->CallObjectMethod(controllerParams, getRootCertificate); jbyteArray intermediateCertificate = (jbyteArray) env->CallObjectMethod(controllerParams, getIntermediateCertificate); jbyteArray operationalCertificate = (jbyteArray) env->CallObjectMethod(controllerParams, getOperationalCertificate); jbyteArray ipk = (jbyteArray) env->CallObjectMethod(controllerParams, getIpk); - uint16_t failsafeTimerSeconds = env->CallIntMethod(controllerParams, getFailsafeTimerSeconds); - uint16_t caseFailsafeTimerSeconds = env->CallIntMethod(controllerParams, getCASEFailsafeTimerSeconds); + uint16_t failsafeTimerSeconds = static_cast(env->CallIntMethod(controllerParams, getFailsafeTimerSeconds)); + uint16_t caseFailsafeTimerSeconds = + static_cast(env->CallIntMethod(controllerParams, getCASEFailsafeTimerSeconds)); bool attemptNetworkScanWiFi = env->CallBooleanMethod(controllerParams, getAttemptNetworkScanWiFi); bool attemptNetworkScanThread = env->CallBooleanMethod(controllerParams, getAttemptNetworkScanThread); bool skipCommissioningComplete = env->CallBooleanMethod(controllerParams, getSkipCommissioningComplete); - uint64_t adminSubject = env->CallLongMethod(controllerParams, getAdminSubject); + uint64_t adminSubject = static_cast(env->CallLongMethod(controllerParams, getAdminSubject)); jobject countryCodeOptional = env->CallObjectMethod(controllerParams, getCountryCode); jobject regulatoryLocationOptional = env->CallObjectMethod(controllerParams, getRegulatoryLocation); @@ -630,9 +633,9 @@ JNI_METHOD(void, pairDeviceWithAddress) RendezvousParameters rendezvousParams = RendezvousParameters() - .SetDiscriminator(discriminator) + .SetDiscriminator(static_cast(discriminator)) .SetSetupPINCode(static_cast(pinCode)) - .SetPeerAddress(Transport::PeerAddress::UDP(const_cast(addrJniString.c_str()), port)); + .SetPeerAddress(Transport::PeerAddress::UDP(const_cast(addrJniString.c_str()), static_cast(port))); CommissioningParameters commissioningParams = wrapper->GetCommissioningParameters(); if (csrNonce != nullptr) @@ -748,7 +751,7 @@ JNI_METHOD(void, establishPaseConnectionByAddress) RendezvousParameters rendezvousParams = RendezvousParameters() .SetSetupPINCode(static_cast(pinCode)) - .SetPeerAddress(Transport::PeerAddress::UDP(const_cast(addrJniString.c_str()), port)); + .SetPeerAddress(Transport::PeerAddress::UDP(const_cast(addrJniString.c_str()), static_cast(port))); err = wrapper->Controller()->EstablishPASEConnection(deviceId, rendezvousParams); @@ -871,7 +874,7 @@ CHIP_ERROR GetEpochTime(JNIEnv * env, jobject calendar, uint32_t & epochTime) universalTime.Year = static_cast(env->CallIntMethod(calendar, getMethod, yearID)); // The first month of the year in the Gregorian and Julian calendars is JANUARY which is 0. See detailed in // https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#MONTH - universalTime.Month = static_cast(env->CallIntMethod(calendar, getMethod, monthID)) + 1; + universalTime.Month = static_cast(static_cast(env->CallIntMethod(calendar, getMethod, monthID)) + 1u); universalTime.Day = static_cast(env->CallIntMethod(calendar, getMethod, dayID)); universalTime.Hour = static_cast(env->CallIntMethod(calendar, getMethod, hourID)); universalTime.Minute = static_cast(env->CallIntMethod(calendar, getMethod, minuteID)); @@ -1505,7 +1508,7 @@ JNI_METHOD(jboolean, openPairingWindowWithPIN) chip::SetupPayload setupPayload; err = AutoCommissioningWindowOpener::OpenCommissioningWindow( wrapper->Controller(), chipDevice->GetDeviceId(), System::Clock::Seconds16(duration), static_cast(iteration), - discriminator, pinCode, NullOptional, setupPayload); + static_cast(discriminator), pinCode, NullOptional, setupPayload); if (err != CHIP_NO_ERROR) { @@ -1571,7 +1574,7 @@ JNI_METHOD(jboolean, openPairingWindowWithPINCallback) chip::SetupPayload setupPayload; err = AndroidCommissioningWindowOpener::OpenCommissioningWindow( wrapper->Controller(), chipDevice->GetDeviceId(), System::Clock::Seconds16(duration), static_cast(iteration), - discriminator, pinCode, NullOptional, jcallback, setupPayload); + static_cast(discriminator), pinCode, NullOptional, jcallback, setupPayload); if (err != CHIP_NO_ERROR) { @@ -1699,11 +1702,12 @@ JNI_METHOD(void, subscribe) } app::ReadPrepareParams params(device->GetSecureSession().Value()); - params.mMinIntervalFloorSeconds = minInterval; - params.mMaxIntervalCeilingSeconds = maxInterval; + uint16_t aImTimeoutMs = static_cast(imTimeoutMs); + params.mMinIntervalFloorSeconds = static_cast(minInterval); + params.mMaxIntervalCeilingSeconds = static_cast(maxInterval); params.mKeepSubscriptions = (keepSubscriptions != JNI_FALSE); params.mIsFabricFiltered = (isFabricFiltered != JNI_FALSE); - params.mTimeout = imTimeoutMs != 0 ? System::Clock::Milliseconds32(imTimeoutMs) : System::Clock::kZero; + params.mTimeout = aImTimeoutMs != 0 ? System::Clock::Milliseconds32(aImTimeoutMs) : System::Clock::kZero; if (attributePathList != nullptr) { @@ -1857,10 +1861,13 @@ JNI_METHOD(void, write) jint imTimeoutMs) { chip::DeviceLayer::StackLock lock; - CHIP_ERROR err = CHIP_NO_ERROR; - jint listSize = 0; - auto callback = reinterpret_cast(callbackHandle); - app::WriteClient * writeClient; + CHIP_ERROR err = CHIP_NO_ERROR; + jint listSize = 0; + auto callback = reinterpret_cast(callbackHandle); + app::WriteClient * writeClient = nullptr; + uint16_t convertedTimedRequestTimeoutMs = static_cast(timedRequestTimeoutMs); + bool hasValidTlv = false; + bool hasValidJson = false; ChipLogDetail(Controller, "IM write() called"); @@ -1870,9 +1877,9 @@ JNI_METHOD(void, write) VerifyOrExit(attributeList != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT); SuccessOrExit(err = JniReferences::GetInstance().GetListSize(attributeList, listSize)); - writeClient = Platform::New(device->GetExchangeManager(), callback->GetChunkedWriteCallback(), - timedRequestTimeoutMs != 0 ? Optional(timedRequestTimeoutMs) - : Optional::Missing()); + writeClient = Platform::New( + device->GetExchangeManager(), callback->GetChunkedWriteCallback(), + convertedTimedRequestTimeoutMs != 0 ? Optional(convertedTimedRequestTimeoutMs) : Optional::Missing()); for (uint8_t i = 0; i < listSize; i++) { @@ -1886,15 +1893,15 @@ JNI_METHOD(void, write) jmethodID hasDataVersionMethod = nullptr; jmethodID getDataVersionMethod = nullptr; jmethodID getTlvByteArrayMethod = nullptr; + jmethodID getJsonStringMethod = nullptr; jobject endpointIdObj = nullptr; jobject clusterIdObj = nullptr; jobject attributeIdObj = nullptr; jbyteArray tlvBytesObj = nullptr; bool hasDataVersion = false; Optional dataVersion = Optional(); - ; - jbyte * tlvBytesObjBytes = nullptr; - jsize length = 0; + uint8_t * tlvBytes = nullptr; + size_t length = 0; TLV::TLVReader reader; SuccessOrExit(err = JniReferences::GetInstance().GetListItem(attributeList, i, attributeItem)); @@ -1939,14 +1946,47 @@ JNI_METHOD(void, write) tlvBytesObj = static_cast(env->CallObjectMethod(attributeItem, getTlvByteArrayMethod)); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); - VerifyOrExit(tlvBytesObj != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT); - - tlvBytesObjBytes = env->GetByteArrayElements(tlvBytesObj, nullptr); - VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); - length = env->GetArrayLength(tlvBytesObj); - VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + if (tlvBytesObj != nullptr) + { + jbyte * tlvBytesObjBytes = env->GetByteArrayElements(tlvBytesObj, nullptr); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + length = static_cast(env->GetArrayLength(tlvBytesObj)); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + tlvBytes = reinterpret_cast(tlvBytesObjBytes); + hasValidTlv = true; + } + else + { + SuccessOrExit(err = JniReferences::GetInstance().FindMethod(env, attributeItem, "getJsonString", "()Ljava/lang/String;", + &getJsonStringMethod)); + jstring jsonJniString = static_cast(env->CallObjectMethod(attributeItem, getJsonStringMethod)); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + if (jsonJniString != nullptr) + { + JniUtfString jsonUtfJniString(env, jsonJniString); + uint8_t bufWithStruct[chip::app::kMaxSecureSduLengthBytes] = { 0 }; + uint8_t buf[chip::app::kMaxSecureSduLengthBytes] = { 0 }; + TLV::TLVReader tlvReader; + TLV::TLVWriter tlvWrite; + TLV::TLVType outerContainer = TLV::kTLVType_Structure; + MutableByteSpan dataWithStruct{ bufWithStruct }; + MutableByteSpan data{ buf }; + SuccessOrExit(err = JsonToTlv(std::string(jsonUtfJniString.c_str(), jsonUtfJniString.size()), dataWithStruct)); + tlvReader.Init(dataWithStruct); + SuccessOrExit(err = tlvReader.Next(TLV::kTLVType_Structure, TLV::AnonymousTag())); + SuccessOrExit(err = tlvReader.EnterContainer(outerContainer)); + SuccessOrExit(err = tlvReader.Next()); + tlvWrite.Init(data); + SuccessOrExit(err = tlvWrite.CopyElement(TLV::AnonymousTag(), tlvReader)); + SuccessOrExit(err = tlvWrite.Finalize()); + tlvBytes = buf; + length = tlvWrite.GetLengthWritten(); + hasValidJson = true; + } + } + VerifyOrExit(hasValidTlv || hasValidJson, err = CHIP_ERROR_INVALID_ARGUMENT); - reader.Init(reinterpret_cast(tlvBytesObjBytes), static_cast(length)); + reader.Init(tlvBytes, length); reader.Next(); SuccessOrExit( err = writeClient->PutPreencodedAttribute( @@ -1961,7 +2001,6 @@ JNI_METHOD(void, write) callback->mWriteClient = writeClient; exit: - if (err != CHIP_NO_ERROR) { ChipLogError(Controller, "JNI IM Write Error: %s", err.AsString()); @@ -1987,24 +2026,28 @@ JNI_METHOD(void, invoke) jint imTimeoutMs) { chip::DeviceLayer::StackLock lock; - CHIP_ERROR err = CHIP_NO_ERROR; - auto callback = reinterpret_cast(callbackHandle); - app::CommandSender * commandSender; - uint32_t endpointId = 0; - uint32_t clusterId = 0; - uint32_t commandId = 0; - jmethodID getEndpointIdMethod = nullptr; - jmethodID getClusterIdMethod = nullptr; - jmethodID getCommandIdMethod = nullptr; - jmethodID getTlvByteArrayMethod = nullptr; - jobject endpointIdObj = nullptr; - jobject clusterIdObj = nullptr; - jobject commandIdObj = nullptr; - jbyteArray tlvBytesObj = nullptr; - jbyte * tlvBytesObjBytes = nullptr; - jsize length = 0; + CHIP_ERROR err = CHIP_NO_ERROR; + auto callback = reinterpret_cast(callbackHandle); + app::CommandSender * commandSender = nullptr; + uint32_t endpointId = 0; + uint32_t clusterId = 0; + uint32_t commandId = 0; + jmethodID getEndpointIdMethod = nullptr; + jmethodID getClusterIdMethod = nullptr; + jmethodID getCommandIdMethod = nullptr; + jmethodID getTlvByteArrayMethod = nullptr; + jmethodID getJsonStringMethod = nullptr; + jobject endpointIdObj = nullptr; + jobject clusterIdObj = nullptr; + jobject commandIdObj = nullptr; + jbyteArray tlvBytesObj = nullptr; TLV::TLVReader reader; - TLV::TLVWriter * writer = nullptr; + TLV::TLVWriter * writer = nullptr; + uint8_t * tlvBytes = nullptr; + size_t length = 0; + bool hasValidTlv = false; + bool hasValidJson = false; + uint16_t convertedTimedRequestTimeoutMs = static_cast(timedRequestTimeoutMs); ChipLogDetail(Controller, "IM invoke() called"); @@ -2041,12 +2084,34 @@ JNI_METHOD(void, invoke) tlvBytesObj = static_cast(env->CallObjectMethod(invokeElement, getTlvByteArrayMethod)); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); - VerifyOrExit(tlvBytesObj != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT); + if (tlvBytesObj != nullptr) + { + jbyte * tlvBytesObjBytes = env->GetByteArrayElements(tlvBytesObj, nullptr); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + length = static_cast(env->GetArrayLength(tlvBytesObj)); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + tlvBytes = reinterpret_cast(tlvBytesObjBytes); + hasValidTlv = true; + } + else + { + SuccessOrExit(err = JniReferences::GetInstance().FindMethod(env, invokeElement, "getJsonString", "()Ljava/lang/String;", + &getJsonStringMethod)); + jstring jsonJniString = static_cast(env->CallObjectMethod(invokeElement, getJsonStringMethod)); + VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); + if (jsonJniString != nullptr) + { + JniUtfString jsonUtfJniString(env, jsonJniString); + uint8_t buf[chip::app::kMaxSecureSduLengthBytes] = { 0 }; + MutableByteSpan tlvEncodingLocal{ buf }; + SuccessOrExit(err = JsonToTlv(std::string(jsonUtfJniString.c_str(), jsonUtfJniString.size()), tlvEncodingLocal)); + tlvBytes = tlvEncodingLocal.data(); + length = tlvEncodingLocal.size(); + hasValidJson = true; + } + } + VerifyOrExit(hasValidTlv || hasValidJson, err = CHIP_ERROR_INVALID_ARGUMENT); - tlvBytesObjBytes = env->GetByteArrayElements(tlvBytesObj, nullptr); - VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); - length = env->GetArrayLength(tlvBytesObj); - VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); SuccessOrExit(err = commandSender->PrepareCommand(app::CommandPathParams(static_cast(endpointId), /* group id */ 0, static_cast(clusterId), static_cast(commandId), @@ -2055,12 +2120,12 @@ JNI_METHOD(void, invoke) writer = commandSender->GetCommandDataIBTLVWriter(); VerifyOrExit(writer != nullptr, err = CHIP_ERROR_INCORRECT_STATE); - reader.Init(reinterpret_cast(tlvBytesObjBytes), static_cast(length)); + reader.Init(tlvBytes, static_cast(length)); reader.Next(); SuccessOrExit(err = writer->CopyContainer(TLV::ContextTag(app::CommandDataIB::Tag::kFields), reader)); - - SuccessOrExit(err = commandSender->FinishCommand(timedRequestTimeoutMs != 0 ? Optional(timedRequestTimeoutMs) - : Optional::Missing())); + SuccessOrExit(err = commandSender->FinishCommand(convertedTimedRequestTimeoutMs != 0 + ? Optional(convertedTimedRequestTimeoutMs) + : Optional::Missing())); SuccessOrExit(err = commandSender->SendCommandRequest(device->GetSecureSession().Value(), diff --git a/src/controller/java/src/chip/devicecontroller/ControllerParams.java b/src/controller/java/src/chip/devicecontroller/ControllerParams.java index 93f9eedae343de..fdf09c0080d6ca 100644 --- a/src/controller/java/src/chip/devicecontroller/ControllerParams.java +++ b/src/controller/java/src/chip/devicecontroller/ControllerParams.java @@ -151,9 +151,6 @@ public static class Builder { private Builder() {} public Builder setFabricId(long fabricId) { - if (fabricId < 1) { - throw new IllegalArgumentException("fabricId must be > 0"); - } this.fabricId = fabricId; return this; } diff --git a/src/controller/java/src/chip/devicecontroller/model/AttributeState.java b/src/controller/java/src/chip/devicecontroller/model/AttributeState.java index db7eefc21b878d..2489dcd52f167f 100644 --- a/src/controller/java/src/chip/devicecontroller/model/AttributeState.java +++ b/src/controller/java/src/chip/devicecontroller/model/AttributeState.java @@ -25,8 +25,8 @@ public final class AttributeState { private static final String TAG = "AttributeState"; - private Object valueObject; - private byte[] tlv; + private final Object valueObject; + private final byte[] tlv; private JSONObject json; public AttributeState(Object valueObject, byte[] tlv, String jsonString) { diff --git a/src/controller/java/src/chip/devicecontroller/model/AttributeWriteRequest.java b/src/controller/java/src/chip/devicecontroller/model/AttributeWriteRequest.java index 0b74693480f5ba..792b7577efc15d 100644 --- a/src/controller/java/src/chip/devicecontroller/model/AttributeWriteRequest.java +++ b/src/controller/java/src/chip/devicecontroller/model/AttributeWriteRequest.java @@ -20,23 +20,47 @@ import java.util.Locale; import java.util.Objects; import java.util.Optional; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import org.json.JSONException; +import org.json.JSONObject; /** An attribute write request that should be used for interaction model write interaction. */ public final class AttributeWriteRequest { + private static final Logger logger = Logger.getLogger(AttributeWriteRequest.class.getName()); private final ChipPathId endpointId, clusterId, attributeId; private final Optional dataVersion; - private final byte[] tlv; + @Nullable private final byte[] tlv; + @Nullable private final JSONObject json; private AttributeWriteRequest( ChipPathId endpointId, ChipPathId clusterId, ChipPathId attributeId, - byte[] tlv, + @Nullable byte[] tlv, + @Nullable String jsonString, Optional dataVersion) { this.endpointId = endpointId; this.clusterId = clusterId; this.attributeId = attributeId; - this.tlv = tlv.clone(); + + if (tlv != null) { + this.tlv = tlv.clone(); + } else { + this.tlv = null; + } + + JSONObject jsonObject = null; + if (jsonString != null) { + try { + jsonObject = new JSONObject(jsonString); + } catch (JSONException ex) { + logger.log(Level.SEVERE, "Error parsing JSON string", ex); + } + } + + this.json = jsonObject; this.dataVersion = dataVersion; } @@ -60,8 +84,23 @@ public boolean hasDataVersion() { return dataVersion.isPresent(); } + @Nullable public byte[] getTlvByteArray() { - return tlv.clone(); + if (tlv != null) { + return tlv.clone(); + } + return null; + } + + @Nullable + public JSONObject getJson() { + return json; + } + + @Nullable + public String getJsonString() { + if (json == null) return null; + return json.toString(); } // check whether the current AttributeWriteRequest has same path as others. @@ -93,7 +132,8 @@ public String toString() { public static AttributeWriteRequest newInstance( ChipPathId endpointId, ChipPathId clusterId, ChipPathId attributeId, byte[] tlv) { - return new AttributeWriteRequest(endpointId, clusterId, attributeId, tlv, Optional.empty()); + return new AttributeWriteRequest( + endpointId, clusterId, attributeId, tlv, null, Optional.empty()); } public static AttributeWriteRequest newInstance( @@ -102,7 +142,7 @@ public static AttributeWriteRequest newInstance( ChipPathId attributeId, byte[] tlv, Optional dataVersion) { - return new AttributeWriteRequest(endpointId, clusterId, attributeId, tlv, dataVersion); + return new AttributeWriteRequest(endpointId, clusterId, attributeId, tlv, null, dataVersion); } /** Create a new {@link AttributeWriteRequest} with only concrete ids. */ @@ -113,9 +153,11 @@ public static AttributeWriteRequest newInstance( ChipPathId.forId(clusterId), ChipPathId.forId(attributeId), tlv, + null, Optional.empty()); } + /** Create a new {@link AttributeWriteRequest} with only concrete ids. */ public static AttributeWriteRequest newInstance( int endpointId, long clusterId, long attributeId, byte[] tlv, Optional dataVersion) { return new AttributeWriteRequest( @@ -123,6 +165,51 @@ public static AttributeWriteRequest newInstance( ChipPathId.forId(clusterId), ChipPathId.forId(attributeId), tlv, + null, + dataVersion); + } + + public static AttributeWriteRequest newInstance( + ChipPathId endpointId, ChipPathId clusterId, ChipPathId attributeId, String jsonString) { + return new AttributeWriteRequest( + endpointId, clusterId, attributeId, null, jsonString, Optional.empty()); + } + + /** Create a new {@link AttributeWriteRequest} with only concrete ids. */ + public static AttributeWriteRequest newInstance( + int endpointId, long clusterId, long attributeId, String jsonString) { + return new AttributeWriteRequest( + ChipPathId.forId(endpointId), + ChipPathId.forId(clusterId), + ChipPathId.forId(attributeId), + null, + jsonString, + Optional.empty()); + } + + public static AttributeWriteRequest newInstance( + ChipPathId endpointId, + ChipPathId clusterId, + ChipPathId attributeId, + String jsonString, + Optional dataVersion) { + return new AttributeWriteRequest( + endpointId, clusterId, attributeId, null, jsonString, dataVersion); + } + + /** Create a new {@link AttributeWriteRequest} with only concrete ids. */ + public static AttributeWriteRequest newInstance( + int endpointId, + long clusterId, + long attributeId, + String jsonString, + Optional dataVersion) { + return new AttributeWriteRequest( + ChipPathId.forId(endpointId), + ChipPathId.forId(clusterId), + ChipPathId.forId(attributeId), + null, + jsonString, dataVersion); } } diff --git a/src/controller/java/src/chip/devicecontroller/model/ChipEventPath.java b/src/controller/java/src/chip/devicecontroller/model/ChipEventPath.java index f3798cc826047c..2f70a97f81d614 100644 --- a/src/controller/java/src/chip/devicecontroller/model/ChipEventPath.java +++ b/src/controller/java/src/chip/devicecontroller/model/ChipEventPath.java @@ -22,8 +22,8 @@ /** An event path that should be used for requests. */ public class ChipEventPath { - private ChipPathId endpointId, clusterId, eventId; - private boolean isUrgent; + private final ChipPathId endpointId, clusterId, eventId; + private final boolean isUrgent; private ChipEventPath( ChipPathId endpointId, ChipPathId clusterId, ChipPathId eventId, boolean isUrgent) { diff --git a/src/controller/java/src/chip/devicecontroller/model/ChipPathId.java b/src/controller/java/src/chip/devicecontroller/model/ChipPathId.java index ec88838c9ede30..31511d7eda462b 100644 --- a/src/controller/java/src/chip/devicecontroller/model/ChipPathId.java +++ b/src/controller/java/src/chip/devicecontroller/model/ChipPathId.java @@ -21,8 +21,8 @@ /** Class representing a potentially wildcard identifier for endpoints/clusters/attributes. */ public class ChipPathId { - private long id; - private IdType type; + private final long id; + private final IdType type; public enum IdType { // Enum names are read by JNI code. diff --git a/src/controller/java/src/chip/devicecontroller/model/EventState.java b/src/controller/java/src/chip/devicecontroller/model/EventState.java index 72b14c1391dc93..705f453d70c197 100644 --- a/src/controller/java/src/chip/devicecontroller/model/EventState.java +++ b/src/controller/java/src/chip/devicecontroller/model/EventState.java @@ -27,13 +27,13 @@ public final class EventState { public static final int MILLIS_SINCE_EPOCH = 1; private static final String TAG = "EventState"; - private long eventNumber; - private int priorityLevel; - private int timestampType; - private long timestampValue; + private final long eventNumber; + private final int priorityLevel; + private final int timestampType; + private final long timestampValue; - private Object valueObject; - private byte[] tlv; + private final Object valueObject; + private final byte[] tlv; private JSONObject json; public EventState( diff --git a/src/controller/java/src/chip/devicecontroller/model/InvokeElement.java b/src/controller/java/src/chip/devicecontroller/model/InvokeElement.java index 2ae4b55ff423e6..1a97bf64bc012a 100644 --- a/src/controller/java/src/chip/devicecontroller/model/InvokeElement.java +++ b/src/controller/java/src/chip/devicecontroller/model/InvokeElement.java @@ -81,10 +81,16 @@ public byte[] getTlvByteArray() { } @Nullable - public JSONObject getJson() { + public JSONObject getJsonObject() { return json; } + @Nullable + public String getJsonString() { + if (json == null) return null; + return json.toString(); + } + // check whether the current InvokeElement has same path as others. @Override public boolean equals(Object object) { diff --git a/src/controller/java/src/chip/onboardingpayload/Verhoeff.kt b/src/controller/java/src/chip/onboardingpayload/Verhoeff.kt index 524c74b6462380..52974e7d32df67 100644 --- a/src/controller/java/src/chip/onboardingpayload/Verhoeff.kt +++ b/src/controller/java/src/chip/onboardingpayload/Verhoeff.kt @@ -17,29 +17,27 @@ package chip.onboardingpayload -class Verhoeff { - companion object { - fun dihedralMultiply(x: Int, y: Int, n: Int): Int { - val n2 = n * 2 - var newX = x % n2 - var newY = y % n2 - if (newX < n) { - if (newY < n) return (newX + newY) % n - return ((newX + (newY - n)) % n) + n - } - if (newY < n) return ((n + (newX - n) - newY) % n) + n - return (n + (newX - n) - (newY - n)) % n +object Verhoeff { + fun dihedralMultiply(x: Int, y: Int, n: Int): Int { + val n2 = n * 2 + var newX = x % n2 + var newY = y % n2 + if (newX < n) { + if (newY < n) return (newX + newY) % n + return ((newX + (newY - n)) % n) + n } + if (newY < n) return ((n + (newX - n) - newY) % n) + n + return (n + (newX - n) - (newY - n)) % n + } - fun dihedralInvert(value: Int, n: Int): Int { - if (value > 0 && value < n) return n - value - return value - } + fun dihedralInvert(value: Int, n: Int): Int { + if (value > 0 && value < n) return n - value + return value + } - fun permute(value: Int, permTable: ByteArray, permTableLen: Int, iterCount: Int): Int { - var newValue = value % permTableLen - if (iterCount == 0) return newValue - return permute(permTable[newValue].toInt(), permTable, permTableLen, iterCount - 1) - } + fun permute(value: Int, permTable: ByteArray, permTableLen: Int, iterCount: Int): Int { + var newValue = value % permTableLen + if (iterCount == 0) return newValue + return permute(permTable[newValue].toInt(), permTable, permTableLen, iterCount - 1) } } diff --git a/src/controller/java/tests/chip/onboardingpayload/ManualCodeTest.kt b/src/controller/java/tests/chip/onboardingpayload/ManualCodeTest.kt index 2a473f200975c0..06dca307bbfeb7 100644 --- a/src/controller/java/tests/chip/onboardingpayload/ManualCodeTest.kt +++ b/src/controller/java/tests/chip/onboardingpayload/ManualCodeTest.kt @@ -483,13 +483,13 @@ class ManualCodeTest { decimalString = representationWithoutCheckDigit + checkDigit outReprensation = ManualOnboardingPayloadParser.checkDecimalStringValidity(decimalString) - assertThat(outReprensation == representationWithoutCheckDigit) + assertThat(outReprensation).isEqualTo(representationWithoutCheckDigit) representationWithoutCheckDigit = "0000" checkDigit = Verhoeff10.computeCheckChar(representationWithoutCheckDigit) decimalString = representationWithoutCheckDigit + checkDigit outReprensation = ManualOnboardingPayloadParser.checkDecimalStringValidity(decimalString) - assertThat(outReprensation == representationWithoutCheckDigit) + assertThat(outReprensation).isEqualTo(representationWithoutCheckDigit) } /* diff --git a/src/controller/python/ChipDeviceController-ScriptBinding.cpp b/src/controller/python/ChipDeviceController-ScriptBinding.cpp index 65c8e086fae385..a7732a48361db0 100644 --- a/src/controller/python/ChipDeviceController-ScriptBinding.cpp +++ b/src/controller/python/ChipDeviceController-ScriptBinding.cpp @@ -144,6 +144,7 @@ PyChipError pychip_DeviceController_SetTimeZone(int32_t offset, uint64_t validAt PyChipError pychip_DeviceController_SetDSTOffset(int32_t offset, uint64_t validStarting, uint64_t validUntil); PyChipError pychip_DeviceController_SetDefaultNtp(const char * defaultNTP); PyChipError pychip_DeviceController_SetTrustedTimeSource(chip::NodeId nodeId, chip::EndpointId endpoint); +PyChipError pychip_DeviceController_SetCheckMatchingFabric(bool check); PyChipError pychip_DeviceController_ResetCommissioningParameters(); PyChipError pychip_DeviceController_CloseSession(chip::Controller::DeviceCommissioner * devCtrl, chip::NodeId nodeid); PyChipError pychip_DeviceController_EstablishPASESessionIP(chip::Controller::DeviceCommissioner * devCtrl, const char * peerAddrStr, @@ -189,6 +190,8 @@ PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback( PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback( chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback); +PyChipError +pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback); PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback( chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback); @@ -541,6 +544,12 @@ PyChipError pychip_DeviceController_SetTrustedTimeSource(chip::NodeId nodeId, ch return ToPyChipError(CHIP_NO_ERROR); } +PyChipError pychip_DeviceController_SetCheckMatchingFabric(bool check) +{ + sCommissioningParameters.SetCheckForMatchingFabric(check); + return ToPyChipError(CHIP_NO_ERROR); +} + PyChipError pychip_DeviceController_ResetCommissioningParameters() { sCommissioningParameters = CommissioningParameters(); @@ -693,6 +702,13 @@ PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallb return ToPyChipError(CHIP_NO_ERROR); } +PyChipError +pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback) +{ + sPairingDelegate.SetFabricCheckCallback(callback); + return ToPyChipError(CHIP_NO_ERROR); +} + const char * pychip_Stack_ErrorToString(ChipError::StorageType err) { return chip::ErrorStr(CHIP_ERROR(err)); diff --git a/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp b/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp index b1e7fa98c9df1d..9908c53c7eeeae 100644 --- a/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp +++ b/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp @@ -60,6 +60,10 @@ void ScriptDevicePairingDelegate::SetCommissioningFailureCallback(DevicePairingD { mOnCommissioningFailureCallback = callback; } +void ScriptDevicePairingDelegate::SetFabricCheckCallback(DevicePairingDelegate_OnFabricCheckFunct callback) +{ + mOnFabricCheckCallback = callback; +} void ScriptDevicePairingDelegate::SetCommissioningStatusUpdateCallback( DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback) @@ -150,6 +154,23 @@ void ScriptDevicePairingDelegate::OnOpenCommissioningWindow(NodeId deviceId, CHI mWindowOpener = nullptr; } } + +void ScriptDevicePairingDelegate::OnFabricCheck(NodeId matchingNodeId) +{ + if (matchingNodeId == kUndefinedNodeId) + { + ChipLogProgress(Zcl, "No matching fabric found"); + } + else + { + ChipLogProgress(Zcl, "Matching fabric found"); + } + if (mOnFabricCheckCallback != nullptr) + { + mOnFabricCheckCallback(matchingNodeId); + } +} + Callback::Callback * ScriptDevicePairingDelegate::GetOpenWindowCallback(Controller::CommissioningWindowOpener * context) { diff --git a/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h b/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h index b93ba94f532270..2740b6eb85e983 100644 --- a/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h +++ b/src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h @@ -46,6 +46,7 @@ typedef void (*DevicePairingDelegate_OnCommissioningFailureFunct)( typedef void (*DevicePairingDelegate_OnCommissioningStatusUpdateFunct)(PeerId peerId, chip::Controller::CommissioningStage stageCompleted, CHIP_ERROR err); +typedef void (*DevicePairingDelegate_OnFabricCheckFunct)(NodeId nodeId); } class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelegate @@ -59,6 +60,7 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega void SetCommissioningSuccessCallback(DevicePairingDelegate_OnCommissioningSuccessFunct callback); void SetCommissioningFailureCallback(DevicePairingDelegate_OnCommissioningFailureFunct callback); void SetCommissioningWindowOpenCallback(DevicePairingDelegate_OnWindowOpenCompleteFunct callback); + void SetFabricCheckCallback(DevicePairingDelegate_OnFabricCheckFunct callback); void OnStatusUpdate(Controller::DevicePairingDelegate::Status status) override; void OnPairingComplete(CHIP_ERROR error) override; void OnCommissioningComplete(NodeId nodeId, CHIP_ERROR err) override; @@ -66,6 +68,7 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega void OnCommissioningFailure(PeerId peerId, CHIP_ERROR error, CommissioningStage stageFailed, Optional additionalErrorInfo) override; void OnCommissioningStatusUpdate(PeerId peerId, CommissioningStage stageCompleted, CHIP_ERROR error) override; + void OnFabricCheck(NodeId matchingNodeId) override; Callback::Callback * GetOpenWindowCallback(Controller::CommissioningWindowOpener * context); void OnOpenCommissioningWindow(NodeId deviceId, CHIP_ERROR status, SetupPayload payload); @@ -78,6 +81,7 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega DevicePairingDelegate_OnCommissioningSuccessFunct mOnCommissioningSuccessCallback = nullptr; DevicePairingDelegate_OnCommissioningFailureFunct mOnCommissioningFailureCallback = nullptr; DevicePairingDelegate_OnCommissioningStatusUpdateFunct mOnCommissioningStatusUpdateCallback = nullptr; + DevicePairingDelegate_OnFabricCheckFunct mOnFabricCheckCallback = nullptr; Callback::Callback mOpenWindowCallback; Controller::CommissioningWindowOpener * mWindowOpener = nullptr; bool expectingPairingComplete = false; diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 5062102d3073e1..55a325fa8d3432 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -70,6 +70,8 @@ None, c_uint64, c_uint32, c_char_p, c_char_p, PyChipError) _DevicePairingDelegate_OnCommissioningStatusUpdateFunct = CFUNCTYPE( None, c_uint64, c_uint8, PyChipError) +_DevicePairingDelegate_OnFabricCheckFunct = CFUNCTYPE( + None, c_uint64) # void (*)(Device *, CHIP_ERROR). # # CHIP_ERROR is actually signed, so using c_uint32 is weird, but everything @@ -248,6 +250,7 @@ def __init__(self, name: str = ''): self.devCtrl = devCtrl self.name = name + self.fabricCheckNodeId = -1 self._Cluster = ChipClusters(builtins.chipStack) self._Cluster.InitLib(self._dmLib) @@ -267,6 +270,9 @@ def HandleCommissioningComplete(nodeid, err): self._ChipStack.commissioningCompleteEvent.set() self._ChipStack.completeEvent.set() + def HandleFabricCheck(nodeId): + self.fabricCheckNodeId = nodeId + def HandleOpenWindowComplete(nodeid: int, setupPinCode: int, setupManualCode: str, setupQRCode: str, err: PyChipError) -> None: if err.is_success: @@ -319,6 +325,9 @@ def HandlePASEEstablishmentComplete(err: PyChipError): self._dmLib.pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback( self.devCtrl, self.cbHandleCommissioningCompleteFunct) + self.cbHandleFabricCheckFunct = _DevicePairingDelegate_OnFabricCheckFunct(HandleFabricCheck) + self._dmLib.pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(self.cbHandleFabricCheckFunct) + self.cbHandleOpenWindowCompleteFunct = _DevicePairingDelegate_OnOpenWindowCompleteFunct( HandleOpenWindowComplete) self._dmLib.pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback( @@ -1348,6 +1357,9 @@ def _InitLib(self): self._dmLib.pychip_DeviceController_SetTrustedTimeSource.restype = PyChipError self._dmLib.pychip_DeviceController_SetTrustedTimeSource.argtypes = [c_uint64, c_uint16] + self._dmLib.pychip_DeviceController_SetCheckMatchingFabric.restype = PyChipError + self._dmLib.pychip_DeviceController_SetCheckMatchingFabric.argtypes = [c_bool] + self._dmLib.pychip_DeviceController_ResetCommissioningParameters.restype = PyChipError self._dmLib.pychip_DeviceController_ResetCommissioningParameters.argtypes = [] @@ -1441,6 +1453,10 @@ def _InitLib(self): c_void_p, _DevicePairingDelegate_OnCommissioningStatusUpdateFunct] self._dmLib.pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback.restype = PyChipError + self._dmLib.pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback.argtypes = [ + _DevicePairingDelegate_OnFabricCheckFunct] + self._dmLib.pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback.restype = PyChipError + self._dmLib.pychip_GetConnectedDeviceByNodeId.argtypes = [ c_void_p, c_uint64, _DeviceAvailableFunct] self._dmLib.pychip_GetConnectedDeviceByNodeId.restype = PyChipError @@ -1662,6 +1678,15 @@ def SetTrustedTimeSource(self, nodeId: int, endpoint: int): lambda: self._dmLib.pychip_DeviceController_SetTrustedTimeSource(nodeId, endpoint) ).raise_on_error() + def SetCheckMatchingFabric(self, check: bool): + self.CheckIsActive() + self._ChipStack.Call( + lambda: self._dmLib.pychip_DeviceController_SetCheckMatchingFabric(check) + ).raise_on_error() + + def GetFabricCheckResult(self) -> int: + return self.fabricCheckNodeId + def CommissionOnNetwork(self, nodeId: int, setupPinCode: int, filterType: DiscoveryFilterType = DiscoveryFilterType.NONE, filter: typing.Any = None, discoveryTimeoutMsec: int = 30000) -> PyChipError: ''' diff --git a/src/controller/python/chip/ble/LinuxImpl.cpp b/src/controller/python/chip/ble/LinuxImpl.cpp index 41e589e3c62944..c33dddd1325dcc 100644 --- a/src/controller/python/chip/ble/LinuxImpl.cpp +++ b/src/controller/python/chip/ble/LinuxImpl.cpp @@ -78,11 +78,11 @@ class ScannerDelegateImpl : public ChipDeviceScannerDelegate void SetScanner(std::unique_ptr scanner) { mScanner = std::move(scanner); } - void OnDeviceScanned(BluezDevice1 * device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) override + void OnDeviceScanned(BluezDevice1 & device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) override { if (mScanCallback) { - mScanCallback(mContext, bluez_device1_get_address(device), info.GetDeviceDiscriminator(), info.GetProductId(), + mScanCallback(mContext, bluez_device1_get_address(&device), info.GetDeviceDiscriminator(), info.GetProductId(), info.GetVendorId()); } } diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index d63180139714cf..879742b2bb0270 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -624,6 +624,9 @@ def descriptor(cls) -> ClusterObjectDescriptor: class Bitmaps: class Feature(IntFlag): kSceneNames = 0x1 + kExplicit = 0x2 + kTableSize = 0x4 + kFabricScenes = 0x8 class ScenesCopyMode(IntFlag): kCopyAllScenes = 0x1 @@ -2803,6 +2806,10 @@ def descriptor(cls) -> ClusterObjectDescriptor: featureMap: 'uint' = None clusterRevision: 'uint' = None + class Bitmaps: + class Feature(IntFlag): + kTagList = 0x1 + class Structs: @dataclass class DeviceTypeStruct(ClusterObject): diff --git a/src/credentials/CHIPCert.cpp b/src/credentials/CHIPCert.cpp index 0c5b58d2ca1c84..1c0e9d7b281f0b 100644 --- a/src/credentials/CHIPCert.cpp +++ b/src/credentials/CHIPCert.cpp @@ -309,7 +309,7 @@ CHIP_ERROR ChipCertificateSet::ValidateCert(const ChipCertificateData * cert, Va { CHIP_ERROR err = CHIP_NO_ERROR; const ChipCertificateData * caCert = nullptr; - uint8_t certType; + CertType certType; err = cert->mSubjectDN.GetCertType(certType); SuccessOrExit(err); @@ -328,7 +328,7 @@ CHIP_ERROR ChipCertificateSet::ValidateCert(const ChipCertificateData * cert, Va err = CHIP_ERROR_CERT_USAGE_NOT_ALLOWED); // Verify that the certificate type is set to Root or ICA. - VerifyOrExit(certType == kCertType_ICA || certType == kCertType_Root, err = CHIP_ERROR_WRONG_CERT_TYPE); + VerifyOrExit(certType == CertType::kICA || certType == CertType::kRoot, err = CHIP_ERROR_WRONG_CERT_TYPE); // If a path length constraint was included, verify the cert depth vs. the specified constraint. // @@ -365,7 +365,7 @@ CHIP_ERROR ChipCertificateSet::ValidateCert(const ChipCertificateData * cert, Va } // If a required certificate type has been specified, verify it against the current certificate's type. - if (context.mRequiredCertType != kCertType_NotSpecified) + if (context.mRequiredCertType != CertType::kNotSpecified) { VerifyOrExit(certType == context.mRequiredCertType, err = CHIP_ERROR_WRONG_CERT_TYPE); } @@ -569,7 +569,7 @@ void ValidationContext::Reset() mValidityPolicy = nullptr; mRequiredKeyUsages.ClearAll(); mRequiredKeyPurposes.ClearAll(); - mRequiredCertType = kCertType_NotSpecified; + mRequiredCertType = CertType::kNotSpecified; } bool ChipRDN::IsEqual(const ChipRDN & other) const @@ -667,40 +667,40 @@ CHIP_ERROR ChipDN::AddAttribute(chip::ASN1::OID oid, CharSpan val, bool isPrinta return CHIP_NO_ERROR; } -CHIP_ERROR ChipDN::GetCertType(uint8_t & certType) const +CHIP_ERROR ChipDN::GetCertType(CertType & certType) const { - uint8_t lCertType = kCertType_NotSpecified; + CertType lCertType = CertType::kNotSpecified; bool fabricIdPresent = false; bool catsPresent = false; uint8_t rdnCount = RDNCount(); - certType = kCertType_NotSpecified; + certType = CertType::kNotSpecified; for (uint8_t i = 0; i < rdnCount; i++) { if (rdn[i].mAttrOID == kOID_AttributeType_MatterRCACId) { - VerifyOrReturnError(lCertType == kCertType_NotSpecified, CHIP_ERROR_WRONG_CERT_DN); + VerifyOrReturnError(lCertType == CertType::kNotSpecified, CHIP_ERROR_WRONG_CERT_DN); - lCertType = kCertType_Root; + lCertType = CertType::kRoot; } else if (rdn[i].mAttrOID == kOID_AttributeType_MatterICACId) { - VerifyOrReturnError(lCertType == kCertType_NotSpecified, CHIP_ERROR_WRONG_CERT_DN); + VerifyOrReturnError(lCertType == CertType::kNotSpecified, CHIP_ERROR_WRONG_CERT_DN); - lCertType = kCertType_ICA; + lCertType = CertType::kICA; } else if (rdn[i].mAttrOID == kOID_AttributeType_MatterNodeId) { - VerifyOrReturnError(lCertType == kCertType_NotSpecified, CHIP_ERROR_WRONG_CERT_DN); + VerifyOrReturnError(lCertType == CertType::kNotSpecified, CHIP_ERROR_WRONG_CERT_DN); VerifyOrReturnError(IsOperationalNodeId(rdn[i].mChipVal), CHIP_ERROR_WRONG_NODE_ID); - lCertType = kCertType_Node; + lCertType = CertType::kNode; } else if (rdn[i].mAttrOID == kOID_AttributeType_MatterFirmwareSigningId) { - VerifyOrReturnError(lCertType == kCertType_NotSpecified, CHIP_ERROR_WRONG_CERT_DN); + VerifyOrReturnError(lCertType == CertType::kNotSpecified, CHIP_ERROR_WRONG_CERT_DN); - lCertType = kCertType_FirmwareSigning; + lCertType = CertType::kFirmwareSigning; } else if (rdn[i].mAttrOID == kOID_AttributeType_MatterFabricId) { @@ -717,7 +717,7 @@ CHIP_ERROR ChipDN::GetCertType(uint8_t & certType) const } } - if (lCertType == kCertType_Node) + if (lCertType == CertType::kNode) { VerifyOrReturnError(fabricIdPresent, CHIP_ERROR_WRONG_CERT_DN); } @@ -1151,7 +1151,7 @@ CHIP_ERROR ValidateChipRCAC(const ByteSpan & rcac) ChipCertificateSet certSet; ChipCertificateData certData; ValidationContext validContext; - uint8_t certType; + CertType certType; // Note that this function doesn't check RCAC NotBefore / NotAfter time validity. // It is assumed that RCAC should be valid at the time of installation by definition. @@ -1161,7 +1161,7 @@ CHIP_ERROR ValidateChipRCAC(const ByteSpan & rcac) ReturnErrorOnFailure(certSet.LoadCert(rcac, CertDecodeFlags::kGenerateTBSHash)); ReturnErrorOnFailure(certData.mSubjectDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_Root, CHIP_ERROR_WRONG_CERT_TYPE); + VerifyOrReturnError(certType == CertType::kRoot, CHIP_ERROR_WRONG_CERT_TYPE); VerifyOrReturnError(certData.mSubjectDN.IsEqual(certData.mIssuerDN), CHIP_ERROR_WRONG_CERT_TYPE); @@ -1337,10 +1337,10 @@ CHIP_ERROR ExtractCATsFromOpCert(const ByteSpan & opcert, CATValues & cats) CHIP_ERROR ExtractCATsFromOpCert(const ChipCertificateData & opcert, CATValues & cats) { uint8_t catCount = 0; - uint8_t certType; + CertType certType; ReturnErrorOnFailure(opcert.mSubjectDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_Node, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kNode, CHIP_ERROR_INVALID_ARGUMENT); const ChipDN & subjectDN = opcert.mSubjectDN; for (uint8_t i = 0; i < subjectDN.RDNCount(); ++i) diff --git a/src/credentials/CHIPCert.h b/src/credentials/CHIPCert.h index 7ceac66222ab36..f0b78df9ea2ec7 100644 --- a/src/credentials/CHIPCert.h +++ b/src/credentials/CHIPCert.h @@ -101,17 +101,17 @@ enum * * @note Cert type is an API data type only; it should never be sent over-the-wire. */ -enum +enum class CertType : uint8_t { - kCertType_NotSpecified = 0x00, /**< The certificate's type has not been specified. */ - kCertType_Root = 0x01, /**< A CHIP Root certificate. */ - kCertType_ICA = 0x02, /**< A CHIP Intermediate CA certificate. */ - kCertType_Node = 0x03, /**< A CHIP node certificate. */ - kCertType_FirmwareSigning = 0x04, /**< A CHIP firmware signing certificate. Note that CHIP doesn't - specify how firmware images are signed and implementation of - firmware image signing is manufacturer-specific. The CHIP - certificate format supports encoding of firmware signing - certificates if chosen by the manufacturer to use them. */ + kNotSpecified = 0x00, /**< The certificate's type has not been specified. */ + kRoot = 0x01, /**< A CHIP Root certificate. */ + kICA = 0x02, /**< A CHIP Intermediate CA certificate. */ + kNode = 0x03, /**< A CHIP node certificate. */ + kFirmwareSigning = 0x04, /**< A CHIP firmware signing certificate. Note that CHIP doesn't + specify how firmware images are signed and implementation of + firmware image signing is manufacturer-specific. The CHIP + certificate format supports encoding of firmware signing + certificates if chosen by the manufacturer to use them. */ }; /** X.509 Certificate Key Purpose Flags @@ -334,7 +334,7 @@ class ChipDN * * @return Returns a CHIP_ERROR on error, CHIP_NO_ERROR otherwise **/ - CHIP_ERROR GetCertType(uint8_t & certType) const; + CHIP_ERROR GetCertType(CertType & certType) const; /** * @brief Retrieve the ID of a CHIP certificate. diff --git a/src/credentials/CHIPCertificateSet.h b/src/credentials/CHIPCertificateSet.h index d3694467c74fbc..3c119a6c2ae718 100644 --- a/src/credentials/CHIPCertificateSet.h +++ b/src/credentials/CHIPCertificateSet.h @@ -70,7 +70,7 @@ struct ValidationContext validated certificate. */ BitFlags mRequiredKeyPurposes; /**< Extended Key usage extensions that should be present in the validated certificate. */ - uint8_t mRequiredCertType; /**< Required certificate type. */ + CertType mRequiredCertType; /**< Required certificate type. */ CertificateValidityPolicy * mValidityPolicy = nullptr; /**< Optional application policy to apply for certificate validity period evaluation. */ diff --git a/src/credentials/FabricTable.cpp b/src/credentials/FabricTable.cpp index 8ec4691f9f80fa..f9b7503a7bad9e 100644 --- a/src/credentials/FabricTable.cpp +++ b/src/credentials/FabricTable.cpp @@ -510,6 +510,11 @@ FabricInfo * FabricTable::GetMutableFabricByIndex(FabricIndex fabricIndex) const FabricInfo * FabricTable::FindFabricWithIndex(FabricIndex fabricIndex) const { + if (fabricIndex == kUndefinedFabricIndex) + { + return nullptr; + } + // Try to match pending fabric first if available if (HasPendingFabricUpdate() && (mPendingFabric.GetFabricIndex() == fabricIndex)) { diff --git a/src/credentials/GenerateChipX509Cert.cpp b/src/credentials/GenerateChipX509Cert.cpp index 12aacab9bf87fb..7eb0a158f5c49d 100644 --- a/src/credentials/GenerateChipX509Cert.cpp +++ b/src/credentials/GenerateChipX509Cert.cpp @@ -326,7 +326,7 @@ CHIP_ERROR EncodeTBSCert(const X509CertRequestParams & requestParams, const Cryp const Crypto::P256PublicKey & issuerPubkey, ASN1Writer & writer) { CHIP_ERROR err = CHIP_NO_ERROR; - uint8_t certType; + CertType certType; bool isCA; VerifyOrReturnError(requestParams.SerialNumber >= 0, CHIP_ERROR_INVALID_ARGUMENT); @@ -334,7 +334,7 @@ CHIP_ERROR EncodeTBSCert(const X509CertRequestParams & requestParams, const Cryp CHIP_ERROR_INVALID_ARGUMENT); ReturnErrorOnFailure(requestParams.SubjectDN.GetCertType(certType)); - isCA = (certType == kCertType_ICA || certType == kCertType_Root); + isCA = (certType == CertType::kICA || certType == CertType::kRoot); ASN1_START_SEQUENCE { @@ -405,10 +405,10 @@ CHIP_ERROR NewChipX509Cert(const X509CertRequestParams & requestParams, const Cr DLL_EXPORT CHIP_ERROR NewRootX509Cert(const X509CertRequestParams & requestParams, Crypto::P256Keypair & issuerKeypair, MutableByteSpan & x509Cert) { - uint8_t certType; + CertType certType; ReturnErrorOnFailure(requestParams.SubjectDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_Root, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kRoot, CHIP_ERROR_INVALID_ARGUMENT); VerifyOrReturnError(requestParams.SubjectDN.IsEqual(requestParams.IssuerDN), CHIP_ERROR_INVALID_ARGUMENT); return NewChipX509Cert(requestParams, issuerKeypair.Pubkey(), issuerKeypair, x509Cert); @@ -417,13 +417,13 @@ DLL_EXPORT CHIP_ERROR NewRootX509Cert(const X509CertRequestParams & requestParam DLL_EXPORT CHIP_ERROR NewICAX509Cert(const X509CertRequestParams & requestParams, const Crypto::P256PublicKey & subjectPubkey, Crypto::P256Keypair & issuerKeypair, MutableByteSpan & x509Cert) { - uint8_t certType; + CertType certType; ReturnErrorOnFailure(requestParams.SubjectDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_ICA, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kICA, CHIP_ERROR_INVALID_ARGUMENT); ReturnErrorOnFailure(requestParams.IssuerDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_Root, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kRoot, CHIP_ERROR_INVALID_ARGUMENT); return NewChipX509Cert(requestParams, subjectPubkey, issuerKeypair, x509Cert); } @@ -432,13 +432,13 @@ DLL_EXPORT CHIP_ERROR NewNodeOperationalX509Cert(const X509CertRequestParams & r const Crypto::P256PublicKey & subjectPubkey, Crypto::P256Keypair & issuerKeypair, MutableByteSpan & x509Cert) { - uint8_t certType; + CertType certType; ReturnErrorOnFailure(requestParams.SubjectDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_Node, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kNode, CHIP_ERROR_INVALID_ARGUMENT); ReturnErrorOnFailure(requestParams.IssuerDN.GetCertType(certType)); - VerifyOrReturnError(certType == kCertType_ICA || certType == kCertType_Root, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(certType == CertType::kICA || certType == CertType::kRoot, CHIP_ERROR_INVALID_ARGUMENT); return NewChipX509Cert(requestParams, subjectPubkey, issuerKeypair, x509Cert); } diff --git a/src/credentials/tests/TestChipCert.cpp b/src/credentials/tests/TestChipCert.cpp index a29f357d274c77..e17de88eee1817 100644 --- a/src/credentials/tests/TestChipCert.cpp +++ b/src/credentials/tests/TestChipCert.cpp @@ -244,13 +244,13 @@ static void TestChipCert_GetCertType_ErrorCases(nlTestSuite * inSuite, void * in for (auto chipCert : gTestCert_GetCertType_ErrorCases) { - uint8_t certType; + CertType certType; err = certSet.LoadCert(chipCert, sNullDecodeFlag); NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); err = certSet.GetCertSet()->mSubjectDN.GetCertType(certType); - NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR || certType == kCertType_NotSpecified); + NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR || certType == CertType::kNotSpecified); certSet.Clear(); } @@ -302,13 +302,13 @@ static void TestChipCert_ChipDN(nlTestSuite * inSuite, void * inContext) const static CATValues noc_cats = { { 0xABCD0001, chip::kUndefinedCAT, chip::kUndefinedCAT } }; ChipDN chip_dn; - uint8_t certType = kCertType_FirmwareSigning; // Start with non-default value + CertType certType = CertType::kFirmwareSigning; // Start with non-default value NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty()); NL_TEST_ASSERT(inSuite, chip_dn.RDNCount() == 0); NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty() == true); - NL_TEST_ASSERT(inSuite, certType == kCertType_NotSpecified); + NL_TEST_ASSERT(inSuite, certType == CertType::kNotSpecified); NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_CommonName(CharSpan(noc_rdn, strlen(noc_rdn)), false) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_MatterNodeId(0xAAAABBBBCCCCDDDD) == CHIP_NO_ERROR); @@ -321,7 +321,7 @@ static void TestChipCert_ChipDN(nlTestSuite * inSuite, void * inContext) NL_TEST_ASSERT(inSuite, chip_dn.RDNCount() == 5); NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, certType == kCertType_Node); + NL_TEST_ASSERT(inSuite, certType == CertType::kNode); uint64_t certId; NL_TEST_ASSERT(inSuite, chip_dn.GetCertChipId(certId) == CHIP_NO_ERROR); @@ -334,7 +334,7 @@ static void TestChipCert_ChipDN(nlTestSuite * inSuite, void * inContext) chip_dn.Clear(); NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty() == true); - NL_TEST_ASSERT(inSuite, certType == kCertType_NotSpecified); + NL_TEST_ASSERT(inSuite, certType == CertType::kNotSpecified); CATValues noc_cats2; chip::CATValues::Serialized serializedCATs; @@ -362,7 +362,7 @@ static void TestChipCert_CertValidation(nlTestSuite * inSuite, void * inContext) { int mSubjectCertIndex; uint8_t mValidateFlags; - uint8_t mRequiredCertType; + CertType mRequiredCertType; CHIP_ERROR mExpectedResult; int mExpectedCertIndex; int mExpectedTrustAnchorIndex; @@ -375,13 +375,9 @@ static void TestChipCert_CertValidation(nlTestSuite * inSuite, void * inContext) }; // Short-hand names to make the test cases table more concise. - enum - { - CTNS = kCertType_NotSpecified, - CTCA = kCertType_ICA, - CTNode = kCertType_Node, - CTFS = kCertType_FirmwareSigning, - }; + const auto CTNS = CertType::kNotSpecified; + const auto CTCA = CertType::kICA; + const auto CTNode = CertType::kNode; // clang-format off static const ValidationTestCase sValidationTestCases[] = { @@ -1196,28 +1192,28 @@ static void TestChipCert_CertType(nlTestSuite * inSuite, void * inContext) struct TestCase { uint8_t Cert; - uint8_t ExpectedCertType; + CertType ExpectedCertType; }; // clang-format off static TestCase sTestCases[] = { // Cert ExpectedCertType // ============================================================= - { TestCert::kRoot01, kCertType_Root }, - { TestCert::kRoot02, kCertType_Root }, - { TestCert::kICA01, kCertType_ICA }, - { TestCert::kICA02, kCertType_ICA }, - { TestCert::kICA01_1, kCertType_ICA }, - { TestCert::kFWSign01, kCertType_FirmwareSigning }, - { TestCert::kNode01_01, kCertType_Node }, - { TestCert::kNode01_02, kCertType_Node }, - { TestCert::kNode02_01, kCertType_Node }, - { TestCert::kNode02_02, kCertType_Node }, + { TestCert::kRoot01, CertType::kRoot }, + { TestCert::kRoot02, CertType::kRoot }, + { TestCert::kICA01, CertType::kICA }, + { TestCert::kICA02, CertType::kICA }, + { TestCert::kICA01_1, CertType::kICA }, + { TestCert::kFWSign01, CertType::kFirmwareSigning }, + { TestCert::kNode01_01, CertType::kNode }, + { TestCert::kNode01_02, CertType::kNode }, + { TestCert::kNode02_01, CertType::kNode }, + { TestCert::kNode02_02, CertType::kNode }, }; // clang-format on for (const auto & testCase : sTestCases) { - uint8_t certType; + CertType certType; err = certSet.Init(1); NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); diff --git a/src/credentials/tests/TestFabricTable.cpp b/src/credentials/tests/TestFabricTable.cpp index 96ed242a684310..0ed6db832f3b17 100644 --- a/src/credentials/tests/TestFabricTable.cpp +++ b/src/credentials/tests/TestFabricTable.cpp @@ -2391,6 +2391,11 @@ void TestFabricLookup(nlTestSuite * inSuite, void * inContext) NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2); NL_TEST_ASSERT(inSuite, !fabricInfo->ShouldAdvertiseIdentity()); } + + // Attempt lookup of FabricIndex 0 --> should always fail. + { + NL_TEST_ASSERT(inSuite, fabricTable.FindFabricWithIndex(0) == nullptr); + } } void TestFetchCATs(nlTestSuite * inSuite, void * inContext) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index cf4ab4c068d465..21ec9e56f737e9 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -163,11 +163,17 @@ - (void)cleanupAfterStartup { // Invalidate our MTRDevice instances before we shut down our secure // sessions and whatnot, so they don't start trying to resubscribe when we - // do the secure session shutdowns. - for (MTRDevice * device in [self.nodeIDToDeviceMap allValues]) { + // do the secure session shutdowns. Since we don't want to hold the lock + // while calling out into arbitrary invalidation code, snapshot the list of + // devices before we start invalidating. + os_unfair_lock_lock(&_deviceMapLock); + NSArray * devices = [self.nodeIDToDeviceMap allValues]; + [self.nodeIDToDeviceMap removeAllObjects]; + os_unfair_lock_unlock(&_deviceMapLock); + + for (MTRDevice * device in devices) { [device invalidate]; } - [self.nodeIDToDeviceMap removeAllObjects]; [self stopBrowseForCommissionables]; [_factory controllerShuttingDown:self]; diff --git a/src/darwin/Framework/CHIP/templates/availability.yaml b/src/darwin/Framework/CHIP/templates/availability.yaml index d49841e22c3d97..55e262b09189af 100644 --- a/src/darwin/Framework/CHIP/templates/availability.yaml +++ b/src/darwin/Framework/CHIP/templates/availability.yaml @@ -7636,6 +7636,8 @@ bitmaps: GroupKeyManagement: - Feature + Descriptor: + - Feature bitmap values: OnOff: Feature: @@ -7643,6 +7645,9 @@ GroupKeyManagement: Feature: - CacheAndSync + Descriptor: + Feature: + - TagList removed: clusters: # Clusters that really should just not be exposed, even if they're in our XML. diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h index 573551ffbe636f..ca0ab33a448ede 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h @@ -25105,6 +25105,9 @@ typedef NS_OPTIONS(uint8_t, MTRGroupsNameSupportBitmap) { typedef NS_OPTIONS(uint32_t, MTRScenesFeature) { MTRScenesFeatureSceneNames API_AVAILABLE(ios(17.0), macos(14.0), watchos(10.0), tvos(17.0)) = 0x1, + MTRScenesFeatureExplicit MTR_NEWLY_AVAILABLE = 0x2, + MTRScenesFeatureTableSize MTR_NEWLY_AVAILABLE = 0x4, + MTRScenesFeatureFabricScenes MTR_NEWLY_AVAILABLE = 0x8, } API_AVAILABLE(ios(17.0), macos(14.0), watchos(10.0), tvos(17.0)); typedef NS_OPTIONS(uint8_t, MTRScenesCopyMode) { @@ -25166,6 +25169,10 @@ typedef NS_OPTIONS(uint8_t, MTRLevelControlOptions) { MTRLevelControlOptionsCoupleColorTempToLevel API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x2, } API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)); +typedef NS_OPTIONS(uint32_t, MTRDescriptorFeature) { + MTRDescriptorFeatureTagList MTR_NEWLY_AVAILABLE = 0x1, +} MTR_NEWLY_AVAILABLE; + typedef NS_ENUM(uint8_t, MTRAccessControlEntryAuthMode) { MTRAccessControlEntryAuthModePASE API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x01, MTRAccessControlEntryAuthModeCASE API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x02, diff --git a/src/include/platform/internal/GenericConnectivityManagerImpl_NoThread.h b/src/include/platform/internal/GenericConnectivityManagerImpl_NoThread.h index 826430bdc0c143..e7af04965182fa 100755 --- a/src/include/platform/internal/GenericConnectivityManagerImpl_NoThread.h +++ b/src/include/platform/internal/GenericConnectivityManagerImpl_NoThread.h @@ -23,7 +23,7 @@ */ #pragma once - +#include #include namespace chip { @@ -120,9 +120,96 @@ template inline CHIP_ERROR GenericConnectivityManagerImpl_NoThread::_WriteThreadNetworkDiagnosticAttributeToTlv( AttributeId attributeId, app::AttributeValueEncoder & encoder) { - return CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; + // If we get here the Thread Network Diagnostic cluster is enabled on the device but doesn't run thread. + // Encode Null or default values for all attributes of the cluster. + CHIP_ERROR err = CHIP_NO_ERROR; + switch (attributeId) + { + // Encode EmptyList + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RouteTable::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::NeighborTable::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ActiveNetworkFaultsList::Id: + err = encoder.EncodeEmptyList(); + break; + // Encode Null + case app::Clusters::ThreadNetworkDiagnostics::Attributes::Channel::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RoutingRole::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::NetworkName::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::PanId::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ExtendedPanId::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::MeshLocalPrefix::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::PartitionId::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::Weighting::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::DataVersion::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::StableDataVersion::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::LeaderRouterId::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ActiveTimestamp::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::PendingTimestamp::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::Delay::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ChannelPage0Mask::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::SecurityPolicy::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::OperationalDatasetComponents::Id: + err = encoder.EncodeNull(); + break; + // Encode UINT64_T 0 + case app::Clusters::ThreadNetworkDiagnostics::Attributes::OverrunCount::Id: + err = encoder.Encode(static_cast(0)); + break; + // Encode UINT16_T 0 + case app::Clusters::ThreadNetworkDiagnostics::Attributes::DetachedRoleCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ChildRoleCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RouterRoleCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::LeaderRoleCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::AttachAttemptCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::PartitionIdChangeCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::BetterPartitionAttachAttemptCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::ParentChangeCount::Id: + err = encoder.Encode(static_cast(0)); + break; + // Encode UINT32_T 0 + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxTotalCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxUnicastCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxBroadcastCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxAckedCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxAckRequestedCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxNoAckRequestedCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxDataCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxDataPollCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxBeaconCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxBeaconRequestCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxOtherCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxRetryCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxDirectMaxRetryExpiryCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxIndirectMaxRetryExpiryCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxErrCcaCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxErrAbortCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::TxErrBusyChannelCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxTotalCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxUnicastCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxBroadcastCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxDataCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxDataPollCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxBeaconCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxBeaconRequestCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxOtherCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxAddressFilteredCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxDestAddrFilteredCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxDuplicatedCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrNoFrameCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrUnknownNeighborCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrInvalidSrcAddrCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrSecCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrFcsCount::Id: + case app::Clusters::ThreadNetworkDiagnostics::Attributes::RxErrOtherCount::Id: + err = encoder.Encode(static_cast(0)); + break; + default: + err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; + break; + } + + return err; } - } // namespace Internal } // namespace DeviceLayer } // namespace chip diff --git a/src/lib/shell/MainLoopZephyr.cpp b/src/lib/shell/MainLoopZephyr.cpp index d106bfa89fa13b..84fca4ef9d29af 100644 --- a/src/lib/shell/MainLoopZephyr.cpp +++ b/src/lib/shell/MainLoopZephyr.cpp @@ -14,37 +14,100 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include -#include - #include #include +#include #include +#include + +#include +#include +#include + +using namespace chip; +using namespace chip::DeviceLayer; + +namespace { + +K_MUTEX_DEFINE(sShellMutex); +K_CONDVAR_DEFINE(sCommandResultCondVar); +CHIP_ERROR sCommandResult; + +// RAII helper for synchronizing access to resources shared between the Zephyr's shell thread, +// which reads and parses the user input, and the the Matter thread, which executes a Matter +// shell command and reports the result back to the shell thread. +class ShellGuard +{ +public: + ShellGuard() { k_mutex_lock(&sShellMutex, K_FOREVER); } + ~ShellGuard() { k_mutex_unlock(&sShellMutex); } -using chip::Shell::Engine; + CHIP_ERROR WaitForCommandResult() + { + k_condvar_wait(&sCommandResultCondVar, &sShellMutex, K_FOREVER); + return sCommandResult; + } -static int cmd_matter(const struct shell * shell, size_t argc, char ** argv) + void PutCommandResult(CHIP_ERROR error) + { + sCommandResult = error; + k_condvar_signal(&sCommandResultCondVar); + } +}; + +void ExecCommandInMatterThread(intptr_t argvAsInt) { - chip::Shell::streamer_set_shell(shell); - return (Engine::Root().ExecCommand(argc - 1, argv + 1) == CHIP_NO_ERROR) ? 0 : -ENOEXEC; + char ** argv = reinterpret_cast(argvAsInt); + int argc = 0; + + while (argv[argc] != nullptr) + { + argc++; + } + + ShellGuard shellGuard; + shellGuard.PutCommandResult(Shell::Engine::Root().ExecCommand(argc, argv)); } -static int RegisterCommands() +int ExecCommandInShellThread(const struct shell * shell, size_t argc, char ** argv) { - Engine::Root().RegisterDefaultCommands(); + const CHIP_ERROR error = [shell, argv]() -> CHIP_ERROR { + ShellGuard shellGuard; + Shell::streamer_set_shell(shell); + ReturnErrorOnFailure(PlatformMgr().ScheduleWork(ExecCommandInMatterThread, reinterpret_cast(argv + 1))); + + return shellGuard.WaitForCommandResult(); + }(); + + if (error != CHIP_NO_ERROR) + { + Shell::streamer_printf(Shell::streamer_get(), "Error: %" CHIP_ERROR_FORMAT "\r\n", error.Format()); + } + else + { + Shell::streamer_printf(Shell::streamer_get(), "Done\r\n"); + } + + return error == CHIP_NO_ERROR ? 0 : -ENOEXEC; +} + +int RegisterCommands() +{ + Shell::Engine::Root().RegisterDefaultCommands(); return 0; } -SYS_INIT(RegisterCommands, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +} // namespace -SHELL_CMD_ARG_REGISTER(matter, NULL, "Matter commands", cmd_matter, 1, 10); +SYS_INIT(RegisterCommands, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +SHELL_CMD_ARG_REGISTER(matter, NULL, "Matter commands", ExecCommandInShellThread, 1, CHIP_SHELL_MAX_TOKENS); namespace chip { namespace Shell { void Engine::RunMainLoop() { - // Intentionally empty as Zephyr has own thread handling shell + // Intentionally empty as Zephyr has its own thread handling shell. } } // namespace Shell diff --git a/src/lib/support/jsontlv/JsonToTlv.cpp b/src/lib/support/jsontlv/JsonToTlv.cpp index 327419e7273b57..387c5f94594da1 100644 --- a/src/lib/support/jsontlv/JsonToTlv.cpp +++ b/src/lib/support/jsontlv/JsonToTlv.cpp @@ -179,6 +179,23 @@ bool CompareByTag(const ElementContext & a, const ElementContext & b) return IsContextTag(a.tag); } +CHIP_ERROR InternalConvertTlvTag(const uint64_t tagNumber, TLV::Tag & tag, const uint32_t profileId = kTemporaryImplicitProfileId) +{ + if (tagNumber <= UINT8_MAX) + { + tag = TLV::ContextTag(static_cast(tagNumber)); + } + else if (tagNumber <= UINT32_MAX) + { + tag = TLV::ProfileTag(profileId, static_cast(tagNumber)); + } + else + { + return CHIP_ERROR_INVALID_ARGUMENT; + } + return CHIP_NO_ERROR; +} + CHIP_ERROR ParseJsonName(const std::string name, ElementContext & elementCtx, uint32_t implicitProfileId) { uint64_t tagNumber = 0; @@ -205,19 +222,7 @@ CHIP_ERROR ParseJsonName(const std::string name, ElementContext & elementCtx, ui return CHIP_ERROR_INVALID_ARGUMENT; } - if (tagNumber <= UINT8_MAX) - { - tag = TLV::ContextTag(static_cast(tagNumber)); - } - else if (tagNumber <= UINT32_MAX) - { - tag = TLV::ProfileTag(implicitProfileId, static_cast(tagNumber)); - } - else - { - return CHIP_ERROR_INVALID_ARGUMENT; - } - + ReturnErrorOnFailure(InternalConvertTlvTag(tagNumber, tag, implicitProfileId)); ReturnErrorOnFailure(JsonTypeStrToTlvType(elementType, type)); if (type.tlvType == TLV::kTLVType_Array) @@ -457,4 +462,8 @@ CHIP_ERROR JsonToTlv(const std::string & jsonString, TLV::TLVWriter & writer) return EncodeTlvElement(json, writer, elementCtx); } +CHIP_ERROR ConvertTlvTag(const uint64_t tagNumber, TLV::Tag & tag) +{ + return InternalConvertTlvTag(tagNumber, tag); +} } // namespace chip diff --git a/src/lib/support/jsontlv/JsonToTlv.h b/src/lib/support/jsontlv/JsonToTlv.h index d4660465c4c3d9..54d7fb84188d01 100644 --- a/src/lib/support/jsontlv/JsonToTlv.h +++ b/src/lib/support/jsontlv/JsonToTlv.h @@ -32,4 +32,11 @@ CHIP_ERROR JsonToTlv(const std::string & jsonString, MutableByteSpan & tlv); */ CHIP_ERROR JsonToTlv(const std::string & jsonString, TLV::TLVWriter & writer); +/* + * Convert a uint64_t tagNumber to a TLV tag. When tagNumber is less than UINT8_MAX, + * the tag is encoded using ContextTag. When tagNumber is less than UINT32_MAX, + * the tag is encoded using an implicit profile tag. + */ +CHIP_ERROR ConvertTlvTag(const uint64_t tagNumber, TLV::Tag & tag); + } // namespace chip diff --git a/src/lwip/silabs/lwipopts-wf200.h b/src/lwip/silabs/lwipopts-wf200.h index 681ef9accb32f8..bbb30012cc6366 100644 --- a/src/lwip/silabs/lwipopts-wf200.h +++ b/src/lwip/silabs/lwipopts-wf200.h @@ -70,9 +70,13 @@ #define DNS_RAND_TXID() ((u32_t) rand()) #define MEM_SIZE 5632 #define MEMP_NUM_UDP_PCB (6) +#define TCP_MSS (4 * 1152) +#define TCPIP_THREAD_PRIO (3) #else #define LWIP_DNS 0 #define MEMP_NUM_UDP_PCB (5) +#define TCP_MSS (1152) +#define TCPIP_THREAD_PRIO (2) #endif // DIC_ENABLE #define LWIP_FREERTOS_USE_STATIC_TCPIP_TASK 1 @@ -131,7 +135,6 @@ #define PBUF_CUSTOM_POOL_IDX_START (MEMP_PBUF_POOL_SMALL) #define PBUF_CUSTOM_POOL_IDX_END (MEMP_PBUF_POOL_LARGE) -#define TCP_MSS (1152) #define TCP_SND_BUF (2 * TCP_MSS) #define TCP_LISTEN_BACKLOG (1) @@ -141,8 +144,6 @@ #define TCPIP_THREAD_STACKSIZE (2048) -#define TCPIP_THREAD_PRIO (2) - #define NETIF_MAX_HWADDR_LEN 8U #define LWIP_IPV6_NUM_ADDRESSES 5 diff --git a/src/platform/Ameba/AmebaConfig.cpp b/src/platform/Ameba/AmebaConfig.cpp index e91905ef17fd10..6ac7948da07794 100644 --- a/src/platform/Ameba/AmebaConfig.cpp +++ b/src/platform/Ameba/AmebaConfig.cpp @@ -71,7 +71,6 @@ const AmebaConfig::Key AmebaConfig::kConfigKey_PairedAccountId = { k const AmebaConfig::Key AmebaConfig::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; const AmebaConfig::Key AmebaConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const AmebaConfig::Key AmebaConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const AmebaConfig::Key AmebaConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const AmebaConfig::Key AmebaConfig::kConfigKey_OperationalDeviceId = { kConfigNamespace_ChipConfig, "op-device-id" }; const AmebaConfig::Key AmebaConfig::kConfigKey_OperationalDeviceCert = { kConfigNamespace_ChipConfig, "op-device-cert" }; const AmebaConfig::Key AmebaConfig::kConfigKey_OperationalDeviceICACerts = { kConfigNamespace_ChipConfig, "op-device-ca-certs" }; diff --git a/src/platform/Ameba/AmebaConfig.h b/src/platform/Ameba/AmebaConfig.h index 21bf9596aa09d6..0c78e0e3a742bd 100755 --- a/src/platform/Ameba/AmebaConfig.h +++ b/src/platform/Ameba/AmebaConfig.h @@ -55,7 +55,6 @@ class AmebaConfig static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_OperationalDeviceId; static const Key kConfigKey_OperationalDeviceCert; static const Key kConfigKey_OperationalDeviceICACerts; diff --git a/src/platform/Ameba/SystemTimeSupport.cpp b/src/platform/Ameba/SystemTimeSupport.cpp index 5b7d03b212d672..2fee97276ec2e8 100644 --- a/src/platform/Ameba/SystemTimeSupport.cpp +++ b/src/platform/Ameba/SystemTimeSupport.cpp @@ -94,7 +94,6 @@ CHIP_ERROR ClockImpl::SetClock_RealTime(Microseconds64 aNewCurTime) struct rtkTimeVal tv; tv.tv_sec = static_cast(aNewCurTime.count() / UINT64_C(1000000)); tv.tv_usec = static_cast(aNewCurTime.count() % UINT64_C(1000000)); - matter_rtc_init(); matter_rtc_write(tv.tv_sec); return CHIP_NO_ERROR; diff --git a/src/platform/Beken/BekenConfig.cpp b/src/platform/Beken/BekenConfig.cpp index 8fd6fd604edb68..60e2cdb09645f7 100644 --- a/src/platform/Beken/BekenConfig.cpp +++ b/src/platform/Beken/BekenConfig.cpp @@ -71,7 +71,6 @@ const BekenConfig::Key BekenConfig::kConfigKey_ServiceId = { k const BekenConfig::Key BekenConfig::kConfigKey_GroupKeyIndex = { kConfigNamespace_ChipConfig, "group-key-index" }; const BekenConfig::Key BekenConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const BekenConfig::Key BekenConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const BekenConfig::Key BekenConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const BekenConfig::Key BekenConfig::kConfigKey_OperationalDeviceId = { kConfigNamespace_ChipConfig, "op-device-id" }; const BekenConfig::Key BekenConfig::kConfigKey_OperationalDeviceCert = { kConfigNamespace_ChipConfig, "op-device-cert" }; const BekenConfig::Key BekenConfig::kConfigKey_OperationalDeviceICACerts = { kConfigNamespace_ChipConfig, "op-device-ca-certs" }; diff --git a/src/platform/Beken/BekenConfig.h b/src/platform/Beken/BekenConfig.h index 7913e3922f4381..94362c092296f8 100755 --- a/src/platform/Beken/BekenConfig.h +++ b/src/platform/Beken/BekenConfig.h @@ -55,7 +55,6 @@ class BekenConfig static const Key kConfigKey_GroupKeyIndex; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_OperationalDeviceId; static const Key kConfigKey_OperationalDeviceCert; static const Key kConfigKey_OperationalDeviceICACerts; diff --git a/src/platform/ESP32/BLEManagerImpl.h b/src/platform/ESP32/BLEManagerImpl.h index e7f61785ffa5c8..5cb1421750786a 100644 --- a/src/platform/ESP32/BLEManagerImpl.h +++ b/src/platform/ESP32/BLEManagerImpl.h @@ -71,6 +71,8 @@ struct ble_gatt_char_context #include #endif +#define MAX_SCAN_RSP_DATA_LEN 31 + namespace chip { namespace DeviceLayer { namespace Internal { @@ -132,6 +134,7 @@ class BLEManagerImpl final : public BLEManager, #endif { public: + uint8_t scanResponseBuffer[MAX_SCAN_RSP_DATA_LEN]; BLEManagerImpl() {} #if CONFIG_ENABLE_ESP32_BLE_CONTROLLER CHIP_ERROR ConfigureBle(uint32_t aAdapterId, bool aIsCentral); @@ -140,7 +143,12 @@ class BLEManagerImpl final : public BLEManager, #endif #endif + CHIP_ERROR ConfigureScanResponseData(ByteSpan data); + void ClearScanResponseData(void); + private: + chip::Optional mScanResponse; + // Allow the BLEManager interface class to delegate method calls to // the implementation methods provided by this class. friend BLEManager; diff --git a/src/platform/ESP32/ConnectivityManagerImpl.h b/src/platform/ESP32/ConnectivityManagerImpl.h index 97d07b894cb9c2..0add13da49886c 100644 --- a/src/platform/ESP32/ConnectivityManagerImpl.h +++ b/src/platform/ESP32/ConnectivityManagerImpl.h @@ -167,6 +167,12 @@ class ConnectivityManagerImpl final : public ConnectivityManager, void OnStationIPv6AddressAvailable(const ip_event_got_ip6_t & got_ip); #endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI +#if CHIP_DEVICE_CONFIG_ENABLE_ETHERNET + void OnEthernetIPv4AddressAvailable(const ip_event_got_ip_t & got_ip); + void OnEthernetIPv4AddressLost(void); + void OnEthernetIPv6AddressAvailable(const ip_event_got_ip6_t & got_ip); +#endif // CHIP_DEVICE_CONFIG_ENABLE_ETHERNET + // ===== Members for internal use by the following friends. friend ConnectivityManager & ConnectivityMgr(void); diff --git a/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp b/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp index ec8d729d417d85..d8f7137047ebac 100644 --- a/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp +++ b/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp @@ -55,15 +55,52 @@ CHIP_ERROR ConnectivityManagerImpl::InitEthernet() return CHIP_NO_ERROR; } +void ConnectivityManagerImpl::OnEthernetIPv4AddressAvailable(const ip_event_got_ip_t & got_ip) +{ + ChipLogProgress(DeviceLayer, "IPv4 address available on Ethernet interface: " IPSTR "/" IPSTR " gateway " IPSTR, + IP2STR(&got_ip.ip_info.ip), IP2STR(&got_ip.ip_info.netmask), IP2STR(&got_ip.ip_info.gw)); + + ChipDeviceEvent event; + event.Type = DeviceEventType::kInterfaceIpAddressChanged; + event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV4_Assigned; + PlatformMgr().PostEventOrDie(&event); +} + +void ConnectivityManagerImpl::OnEthernetIPv4AddressLost(void) +{ + ChipLogProgress(DeviceLayer, "IPv4 address lost on Ethernet interface"); + + ChipDeviceEvent event; + event.Type = DeviceEventType::kInterfaceIpAddressChanged; + event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV4_Lost; + PlatformMgr().PostEventOrDie(&event); +} + +void ConnectivityManagerImpl::OnEthernetIPv6AddressAvailable(const ip_event_got_ip6_t & got_ip) +{ + ChipLogProgress(DeviceLayer, "IPv6 address available on Ethernet interface: " IPV6STR, IPV62STR(got_ip.ip6_info.ip)); + + ChipDeviceEvent event; + event.Type = DeviceEventType::kInterfaceIpAddressChanged; + event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV6_Assigned; + PlatformMgr().PostEventOrDie(&event); +} + void ConnectivityManagerImpl::OnEthernetPlatformEvent(const ChipDeviceEvent * event) { switch (event->Platform.ESPSystemEvent.Id) { case IP_EVENT_ETH_GOT_IP: - ChipLogProgress(DeviceLayer, "Ethernet Link Up"); + OnEthernetIPv4AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp); break; case IP_EVENT_ETH_LOST_IP: - ChipLogProgress(DeviceLayer, "Ethernet Link Down"); + OnEthernetIPv4AddressLost(); + break; + case IP_EVENT_GOT_IP6: + if (strcmp(esp_netif_get_ifkey(event->Platform.ESPSystemEvent.Data.IpGotIp6.esp_netif), "ETH_DEF") == 0) + { + OnEthernetIPv6AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp6); + } break; case ETHERNET_EVENT_START: ChipLogProgress(DeviceLayer, "Ethernet Started"); diff --git a/src/platform/ESP32/ESP32Config.cpp b/src/platform/ESP32/ESP32Config.cpp index a536d46ef722c3..37bfe68d7e0d56 100644 --- a/src/platform/ESP32/ESP32Config.cpp +++ b/src/platform/ESP32/ESP32Config.cpp @@ -85,7 +85,6 @@ const ESP32Config::Key ESP32Config::kConfigKey_PairedAccountId = { kConfigNam const ESP32Config::Key ESP32Config::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; const ESP32Config::Key ESP32Config::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const ESP32Config::Key ESP32Config::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const ESP32Config::Key ESP32Config::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const ESP32Config::Key ESP32Config::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "reg-location" }; const ESP32Config::Key ESP32Config::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; const ESP32Config::Key ESP32Config::kConfigKey_UniqueId = { kConfigNamespace_ChipConfig, "unique-id" }; diff --git a/src/platform/ESP32/ESP32Config.h b/src/platform/ESP32/ESP32Config.h index e07d98eba27594..5804f53105c20c 100644 --- a/src/platform/ESP32/ESP32Config.h +++ b/src/platform/ESP32/ESP32Config.h @@ -87,7 +87,6 @@ class ESP32Config static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; static const Key kConfigKey_UniqueId; diff --git a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp index a43b3456e940e4..ef9cbece6f5fd4 100644 --- a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp +++ b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp @@ -211,7 +211,7 @@ CHIP_ERROR BLEManagerImpl::_Init() #endif SuccessOrExit(err); - memset(mCons, 0, sizeof(mCons)); + memset(reinterpret_cast(mCons), 0, sizeof(mCons)); mServiceMode = ConnectivityManager::kCHIPoBLEServiceMode_Enabled; mAppIf = ESP_GATT_IF_NONE; mServiceAttrHandle = 0; diff --git a/src/platform/ESP32/nimble/BLEManagerImpl.cpp b/src/platform/ESP32/nimble/BLEManagerImpl.cpp index 52e86d4b050a7f..6a9a047ab84db1 100644 --- a/src/platform/ESP32/nimble/BLEManagerImpl.cpp +++ b/src/platform/ESP32/nimble/BLEManagerImpl.cpp @@ -1012,6 +1012,25 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void) return err; } +CHIP_ERROR BLEManagerImpl::ConfigureScanResponseData(ByteSpan data) +{ + if (!IsSpanUsable(data) || data.size() > MAX_SCAN_RSP_DATA_LEN) + { + ChipLogError(DeviceLayer, "scan response data is invalid"); + return CHIP_ERROR_INVALID_ARGUMENT; + } + memcpy(scanResponseBuffer, data.data(), data.size()); + ByteSpan scanResponseSpan(scanResponseBuffer); + mScanResponse = chip::Optional(scanResponseSpan); + return CHIP_NO_ERROR; +} + +void BLEManagerImpl::ClearScanResponseData(void) +{ + mScanResponse.ClearValue(); + ChipLogDetail(DeviceLayer, "scan response data is cleared"); +} + void BLEManagerImpl::HandleRXCharWrite(struct ble_gatt_char_context * param) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -1584,6 +1603,15 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) } } #endif + if (mScanResponse.HasValue()) + { + err = MapBLEError(ble_gap_adv_rsp_set_data(mScanResponse.Value().data(), mScanResponse.Value().size())); + if (err != CHIP_NO_ERROR) + { + ChipLogError(DeviceLayer, "ble_gap_adv_rsp_set_data failed: %s", ErrorStr(err)); + return err; + } + } err = MapBLEError(ble_gap_adv_start(own_addr_type, NULL, BLE_HS_FOREVER, &adv_params, ble_svr_gap_event, NULL)); if (err == CHIP_NO_ERROR) { diff --git a/src/platform/webos/GlibTypeDeleter.h b/src/platform/GLibTypeDeleter.h similarity index 70% rename from src/platform/webos/GlibTypeDeleter.h rename to src/platform/GLibTypeDeleter.h index 476a00a9ae5c50..bd93be76203cd2 100644 --- a/src/platform/webos/GlibTypeDeleter.h +++ b/src/platform/GLibTypeDeleter.h @@ -17,7 +17,12 @@ #pragma once +#include + #include +#include + +namespace chip { template class UniquePointerReceiver @@ -69,3 +74,49 @@ struct GBytesDeleter { void operator()(GBytes * object) { g_bytes_unref(object); } }; + +template +struct GAutoPtrDeleter +{ +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GFree; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GBytesDeleter; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GObjectDeleter; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GErrorDeleter; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GVariantDeleter; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GVariantIterDeleter; +}; + +template +using GAutoPtr = std::unique_ptr::deleter>; + +} // namespace chip diff --git a/src/platform/Linux/BLEManagerImpl.cpp b/src/platform/Linux/BLEManagerImpl.cpp index 07ea5d6170d8c4..deab037321dd27 100644 --- a/src/platform/Linux/BLEManagerImpl.cpp +++ b/src/platform/Linux/BLEManagerImpl.cpp @@ -21,20 +21,26 @@ * Provides an implementation of the BLEManager singleton object * for Linux platforms. */ -#include -#include -#include -#include -#include -#include -#include +/** + * Note: BLEManager requires ConnectivityManager to be defined beforehand, + * otherwise we will face circular dependency between them. */ +#include + +/** + * Note: Use public include for BLEManager which includes our local + * platform//BLEManagerImpl.h after defining interface class. */ +#include "platform/internal/BLEManager.h" #include #include #include -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE +#include +#include +#include +#include +#include #include "bluez/Helper.h" @@ -773,9 +779,9 @@ void BLEManagerImpl::NotifyBLEPeripheralAdvStopComplete(bool aIsSuccess, void * PlatformMgr().PostEventOrDie(&event); } -void BLEManagerImpl::OnDeviceScanned(BluezDevice1 * device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) +void BLEManagerImpl::OnDeviceScanned(BluezDevice1 & device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) { - ChipLogProgress(Ble, "New device scanned: %s", bluez_device1_get_address(device)); + ChipLogProgress(Ble, "New device scanned: %s", bluez_device1_get_address(&device)); if (mBLEScanConfig.mBleScanState == BleScanState::kScanForDiscriminator) { @@ -787,7 +793,7 @@ void BLEManagerImpl::OnDeviceScanned(BluezDevice1 * device, const chip::Ble::Chi } else if (mBLEScanConfig.mBleScanState == BleScanState::kScanForAddress) { - if (strcmp(bluez_device1_get_address(device), mBLEScanConfig.mAddress.c_str()) != 0) + if (strcmp(bluez_device1_get_address(&device), mBLEScanConfig.mAddress.c_str()) != 0) { return; } @@ -837,5 +843,3 @@ void BLEManagerImpl::OnScanError(CHIP_ERROR err) } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/BLEManagerImpl.h b/src/platform/Linux/BLEManagerImpl.h index 319b4b3468e0ff..23e182f2281b31 100644 --- a/src/platform/Linux/BLEManagerImpl.h +++ b/src/platform/Linux/BLEManagerImpl.h @@ -26,8 +26,6 @@ #include #include -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE - #include "bluez/ChipDeviceScanner.h" #include "bluez/Types.h" @@ -154,7 +152,7 @@ class BLEManagerImpl final : public BLEManager, CHIP_ERROR CancelConnection() override; // ===== Members that implement virtual methods on ChipDeviceScannerDelegate - void OnDeviceScanned(BluezDevice1 * device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) override; + void OnDeviceScanned(BluezDevice1 & device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) override; void OnScanComplete() override; // ===== Members for internal use by the following friends. @@ -181,9 +179,9 @@ class BLEManagerImpl final : public BLEManager, enum { - kMaxConnections = 1, // TODO: right max connection - kMaxDeviceNameLength = 20, // TODO: right-size this - kMaxAdvertismentDataSetSize = 31 // TODO: verify this + kMaxConnections = 1, // TODO: right max connection + kMaxDeviceNameLength = 20, // TODO: right-size this + kMaxAdvertisementDataSetSize = 31 // TODO: verify this }; CHIP_ERROR StartBLEAdvertising(); @@ -246,5 +244,3 @@ inline bool BLEManagerImpl::_IsAdvertising() } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/BUILD.gn b/src/platform/Linux/BUILD.gn index 69d0289254d063..56324ff5c4a494 100644 --- a/src/platform/Linux/BUILD.gn +++ b/src/platform/Linux/BUILD.gn @@ -41,10 +41,8 @@ static_library("Linux") { sources = [ "../DeviceSafeQueue.cpp", "../DeviceSafeQueue.h", + "../GLibTypeDeleter.h", "../SingletonConfigurationManager.cpp", - "BLEManagerImpl.cpp", - "BLEManagerImpl.h", - "BlePlatformConfig.h", "CHIPDevicePlatformConfig.h", "CHIPDevicePlatformEvent.h", "CHIPLinuxStorage.cpp", @@ -85,6 +83,9 @@ static_library("Linux") { if (chip_enable_ble) { sources += [ + "BLEManagerImpl.cpp", + "BLEManagerImpl.h", + "BlePlatformConfig.h", "bluez/AdapterIterator.cpp", "bluez/AdapterIterator.h", "bluez/ChipDeviceScanner.cpp", @@ -125,7 +126,6 @@ static_library("Linux") { if (chip_enable_openthread) { sources += [ - "GlibTypeDeleter.h", "ThreadStackManagerImpl.cpp", "ThreadStackManagerImpl.h", ] @@ -138,10 +138,7 @@ static_library("Linux") { } if (chip_enable_wifi) { - sources += [ - "GlibTypeDeleter.h", - "NetworkCommissioningWiFiDriver.cpp", - ] + sources += [ "NetworkCommissioningWiFiDriver.cpp" ] public_deps += [ "dbus/wpa" ] } diff --git a/src/platform/Linux/ConfigurationManagerImpl.cpp b/src/platform/Linux/ConfigurationManagerImpl.cpp index f5d163487f12f9..92e2c1e290b7bc 100644 --- a/src/platform/Linux/ConfigurationManagerImpl.cpp +++ b/src/platform/Linux/ConfigurationManagerImpl.cpp @@ -200,46 +200,6 @@ CHIP_ERROR ConfigurationManagerImpl::WritePersistedStorageValue(::chip::Platform return WriteConfigValue(configKey, value); } -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION -CHIP_ERROR ConfigurationManagerImpl::GetWiFiStationSecurityType(WiFiAuthSecurityType & secType) -{ - CHIP_ERROR err; - uint32_t secTypeInt; - - err = ReadConfigValue(PosixConfig::kConfigKey_WiFiStationSecType, secTypeInt); - if (err == CHIP_NO_ERROR) - { - secType = static_cast(secTypeInt); - } - return err; -} - -CHIP_ERROR ConfigurationManagerImpl::UpdateWiFiStationSecurityType(WiFiAuthSecurityType secType) -{ - CHIP_ERROR err; - WiFiAuthSecurityType curSecType; - - if (secType != kWiFiSecurityType_NotSpecified) - { - err = GetWiFiStationSecurityType(curSecType); - if (err == CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND || (err == CHIP_NO_ERROR && secType != curSecType)) - { - uint32_t secTypeInt = static_cast(secType); - err = WriteConfigValue(PosixConfig::kConfigKey_WiFiStationSecType, secTypeInt); - } - SuccessOrExit(err); - } - else - { - err = PosixConfig::ClearConfigValue(PosixConfig::kConfigKey_WiFiStationSecType); - SuccessOrExit(err); - } - -exit: - return err; -} -#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - CHIP_ERROR ConfigurationManagerImpl::ReadConfigValue(Key key, bool & val) { return PosixConfig::ReadConfigValue(key, val); diff --git a/src/platform/Linux/ConfigurationManagerImpl.h b/src/platform/Linux/ConfigurationManagerImpl.h index ecf5aea77830b3..760b3d07cc3a26 100644 --- a/src/platform/Linux/ConfigurationManagerImpl.h +++ b/src/platform/Linux/ConfigurationManagerImpl.h @@ -60,11 +60,6 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR ReadPersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t & value) override; CHIP_ERROR WritePersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t value) override; -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - CHIP_ERROR GetWiFiStationSecurityType(Internal::WiFiAuthSecurityType & secType); - CHIP_ERROR UpdateWiFiStationSecurityType(Internal::WiFiAuthSecurityType secType); -#endif - // NOTE: Other public interface methods are implemented by GenericConfigurationManagerImpl<>. CHIP_ERROR WriteConfigValue(Key key, uint16_t val); CHIP_ERROR ReadConfigValue(Key key, uint16_t & val); diff --git a/src/platform/Linux/ConnectivityManagerImpl.cpp b/src/platform/Linux/ConnectivityManagerImpl.cpp index d393008102bbb4..b9686d8ce104f8 100644 --- a/src/platform/Linux/ConnectivityManagerImpl.cpp +++ b/src/platform/Linux/ConnectivityManagerImpl.cpp @@ -58,7 +58,7 @@ #endif #if CHIP_DEVICE_CONFIG_ENABLE_WPA -#include +#include #include #endif @@ -76,6 +76,23 @@ using namespace ::chip::app::Clusters::WiFiNetworkDiagnostics; using namespace ::chip::DeviceLayer::NetworkCommissioning; namespace chip { + +#if CHIP_DEVICE_CONFIG_ENABLE_WPA + +template <> +struct GAutoPtrDeleter +{ + using deleter = GObjectDeleter; +}; + +template <> +struct GAutoPtrDeleter +{ + using deleter = GObjectDeleter; +}; + +#endif // CHIP_DEVICE_CONFIG_ENABLE_WPA + namespace DeviceLayer { ConnectivityManagerImpl ConnectivityManagerImpl::sInstance; @@ -1070,8 +1087,7 @@ ConnectivityManagerImpl::ConnectWiFiNetworkAsync(ByteSpan ssid, ByteSpan credent void ConnectivityManagerImpl::_ConnectWiFiNetworkAsyncCallback(GObject * source_object, GAsyncResult * res, gpointer user_data) { ConnectivityManagerImpl * this_ = reinterpret_cast(user_data); - std::unique_ptr attachRes; - std::unique_ptr err; + GAutoPtr err; std::lock_guard lock(mWpaSupplicantMutex); @@ -1159,7 +1175,7 @@ void ConnectivityManagerImpl::PostNetworkConnect() CHIP_ERROR ConnectivityManagerImpl::CommitConfig() { gboolean result; - std::unique_ptr err; + GAutoPtr err; std::lock_guard lock(mWpaSupplicantMutex); @@ -1290,7 +1306,7 @@ CHIP_ERROR ConnectivityManagerImpl::GetWiFiVersion(WiFiVersionEnum & wiFiVersion int32_t ConnectivityManagerImpl::GetDisconnectReason() { std::lock_guard lock(mWpaSupplicantMutex); - std::unique_ptr err; + GAutoPtr err; gint errorValue = wpa_fi_w1_wpa_supplicant1_interface_get_disconnect_reason(mWpaSupplicant.iface); // wpa_supplicant DBus API: DisconnectReason: The most recent IEEE 802.11 reason code for disconnect. Negative value @@ -1306,7 +1322,7 @@ CHIP_ERROR ConnectivityManagerImpl::GetConfiguredNetwork(NetworkCommissioning::N // with the proxy object. std::lock_guard lock(mWpaSupplicantMutex); - std::unique_ptr err; + GAutoPtr err; if (mWpaSupplicant.iface == nullptr) { @@ -1322,10 +1338,9 @@ CHIP_ERROR ConnectivityManagerImpl::GetConfiguredNetwork(NetworkCommissioning::N return CHIP_ERROR_KEY_NOT_FOUND; } - std::unique_ptr networkInfo( - wpa_fi_w1_wpa_supplicant1_network_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, - kWpaSupplicantServiceName, networkPath, nullptr, - &MakeUniquePointerReceiver(err).Get())); + GAutoPtr networkInfo(wpa_fi_w1_wpa_supplicant1_network_proxy_new_for_bus_sync( + G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, kWpaSupplicantServiceName, networkPath, nullptr, + &MakeUniquePointerReceiver(err).Get())); if (networkInfo == nullptr) { return CHIP_ERROR_INTERNAL; @@ -1333,9 +1348,9 @@ CHIP_ERROR ConnectivityManagerImpl::GetConfiguredNetwork(NetworkCommissioning::N network.connected = wpa_fi_w1_wpa_supplicant1_network_get_enabled(networkInfo.get()); GVariant * properties = wpa_fi_w1_wpa_supplicant1_network_get_properties(networkInfo.get()); - GVariant * ssid = g_variant_lookup_value(properties, "ssid", nullptr); + GAutoPtr ssid(g_variant_lookup_value(properties, "ssid", nullptr)); gsize length; - const gchar * ssidStr = g_variant_get_string(ssid, &length); + const gchar * ssidStr = g_variant_get_string(ssid.get(), &length); // TODO: wpa_supplicant will return ssid with quotes! We should have a better way to get the actual ssid in bytes. gsize length_actual = length - 2; VerifyOrReturnError(length_actual <= sizeof(network.networkID), CHIP_ERROR_INTERNAL); @@ -1350,7 +1365,7 @@ CHIP_ERROR ConnectivityManagerImpl::StopAutoScan() std::lock_guard lock(mWpaSupplicantMutex); VerifyOrReturnError(mWpaSupplicant.iface != nullptr, CHIP_ERROR_INCORRECT_STATE); - std::unique_ptr err; + GAutoPtr err; gboolean result; ChipLogDetail(DeviceLayer, "wpa_supplicant: disabling auto scan"); @@ -1407,6 +1422,7 @@ CHIP_ERROR ConnectivityManagerImpl::StartWiFiScan(ByteSpan ssid, WiFiDriver::Sca } namespace { + // wpa_supplicant's scan results don't contains the channel infomation, so we need this lookup table for resolving the band and // channel infomation. std::pair GetBandAndChannelFromFrequency(uint32_t freq) @@ -1505,6 +1521,7 @@ std::pair GetBandAndChannelFromFrequency(uint32_t freq) } return ret; } + } // namespace bool ConnectivityManagerImpl::_GetBssInfo(const gchar * bssPath, NetworkCommissioning::WiFiScanResponse & result) @@ -1514,8 +1531,8 @@ bool ConnectivityManagerImpl::_GetBssInfo(const gchar * bssPath, NetworkCommissi // completed before this function returns. Also, no external callbacks are registered // with the proxy object. - std::unique_ptr err; - std::unique_ptr bss( + GAutoPtr err; + GAutoPtr bss( wpa_fi_w1_wpa_supplicant1_bss_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, kWpaSupplicantServiceName, bssPath, nullptr, &MakeUniquePointerReceiver(err).Get())); @@ -1526,8 +1543,8 @@ bool ConnectivityManagerImpl::_GetBssInfo(const gchar * bssPath, NetworkCommissi WpaFiW1Wpa_supplicant1BSSProxy * bssProxy = WPA_FI_W1_WPA_SUPPLICANT1_BSS_PROXY(bss.get()); - std::unique_ptr ssid(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(bssProxy), "SSID")); - std::unique_ptr bssid(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(bssProxy), "BSSID")); + GAutoPtr ssid(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(bssProxy), "SSID")); + GAutoPtr bssid(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(bssProxy), "BSSID")); // Network scan is performed in the background, so the BSS // may be gone when we try to get the properties. @@ -1635,8 +1652,8 @@ bool ConnectivityManagerImpl::_GetBssInfo(const gchar * bssPath, NetworkCommissi return res; }; auto GetNetworkSecurityType = [IsNetworkWPAPSK, IsNetworkWPA2PSK](WpaFiW1Wpa_supplicant1BSSProxy * proxy) -> uint8_t { - std::unique_ptr wpa(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(proxy), "WPA")); - std::unique_ptr rsn(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(proxy), "RSN")); + GAutoPtr wpa(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(proxy), "WPA")); + GAutoPtr rsn(g_dbus_proxy_get_cached_property(G_DBUS_PROXY(proxy), "RSN")); uint8_t res = IsNetworkWPAPSK(wpa.get()) | IsNetworkWPA2PSK(rsn.get()); if (res == 0) diff --git a/src/platform/Linux/GlibTypeDeleter.h b/src/platform/Linux/GlibTypeDeleter.h deleted file mode 100644 index 476a00a9ae5c50..00000000000000 --- a/src/platform/Linux/GlibTypeDeleter.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * - * Copyright (c) 2020 Project CHIP Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -template -class UniquePointerReceiver -{ -public: - UniquePointerReceiver(std::unique_ptr & target) : mTarget(target) {} - - ~UniquePointerReceiver() { mTarget.reset(mValue); } - - T *& Get() { return mValue; } - -private: - std::unique_ptr & mTarget; - T * mValue = nullptr; -}; - -template -UniquePointerReceiver MakeUniquePointerReceiver(std::unique_ptr & target) -{ - return UniquePointerReceiver(target); -} - -struct GFree -{ - void operator()(gpointer object) { g_free(object); } -}; - -struct GObjectDeleter -{ - void operator()(gpointer object) { g_object_unref(object); } -}; - -struct GErrorDeleter -{ - void operator()(GError * object) { g_error_free(object); } -}; - -struct GVariantDeleter -{ - void operator()(GVariant * object) { g_variant_unref(object); } -}; - -struct GVariantIterDeleter -{ - void operator()(GVariantIter * object) { g_variant_iter_free(object); } -}; - -struct GBytesDeleter -{ - void operator()(GBytes * object) { g_bytes_unref(object); } -}; diff --git a/src/platform/Linux/PosixConfig.cpp b/src/platform/Linux/PosixConfig.cpp index 6daa22e4f78525..61a1fbd4dda6ed 100644 --- a/src/platform/Linux/PosixConfig.cpp +++ b/src/platform/Linux/PosixConfig.cpp @@ -69,7 +69,6 @@ const PosixConfig::Key PosixConfig::kConfigKey_PairedAccountId = { kConfigNam const PosixConfig::Key PosixConfig::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; const PosixConfig::Key PosixConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const PosixConfig::Key PosixConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const PosixConfig::Key PosixConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const PosixConfig::Key PosixConfig::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; const PosixConfig::Key PosixConfig::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; const PosixConfig::Key PosixConfig::kConfigKey_LocationCapability = { kConfigNamespace_ChipConfig, "location-capability" }; diff --git a/src/platform/Linux/PosixConfig.h b/src/platform/Linux/PosixConfig.h index e8370a3e1c0a72..c04d4a9be1093f 100644 --- a/src/platform/Linux/PosixConfig.h +++ b/src/platform/Linux/PosixConfig.h @@ -68,7 +68,6 @@ class PosixConfig static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_SetupDiscriminator; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; diff --git a/src/platform/Linux/ThreadStackManagerImpl.cpp b/src/platform/Linux/ThreadStackManagerImpl.cpp index 8e27a9fece2b0f..dfaee5297f6f11 100755 --- a/src/platform/Linux/ThreadStackManagerImpl.cpp +++ b/src/platform/Linux/ThreadStackManagerImpl.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -65,10 +66,10 @@ CHIP_ERROR GLibMatterContextSetActiveDataset(SetActiveDatasetContext * context) // all D-Bus signals will be delivered to the GLib global default main context. VerifyOrDie(g_main_context_get_thread_default() != nullptr); - std::unique_ptr bytes(g_bytes_new(context->netInfo.data(), context->netInfo.size())); + GAutoPtr bytes(g_bytes_new(context->netInfo.data(), context->netInfo.size())); if (!bytes) return CHIP_ERROR_NO_MEMORY; - std::unique_ptr value(g_variant_new_from_bytes(G_VARIANT_TYPE_BYTESTRING, bytes.release(), true)); + GAutoPtr value(g_variant_new_from_bytes(G_VARIANT_TYPE_BYTESTRING, bytes.release(), true)); if (!value) return CHIP_ERROR_NO_MEMORY; openthread_io_openthread_border_router_set_active_dataset_tlvs(context->proxy, value.release()); @@ -85,7 +86,7 @@ CHIP_ERROR ThreadStackManagerImpl::GLibMatterContextInitThreadStack(ThreadStackM // all D-Bus signals will be delivered to the GLib global default main context. VerifyOrDie(g_main_context_get_thread_default() != nullptr); - std::unique_ptr err; + GAutoPtr err; self->mProxy.reset(openthread_io_openthread_border_router_proxy_new_for_bus_sync( G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, kDBusOpenThreadService, kDBusOpenThreadObjectPath, nullptr, &MakeUniquePointerReceiver(err).Get())); @@ -107,7 +108,7 @@ CHIP_ERROR ThreadStackManagerImpl::_InitThreadStack() // If get property is called inside dbus thread (we are going to make it so), XXX_get_XXX can be used instead of XXX_dup_XXX // which is a little bit faster and the returned object doesn't need to be freed. Same for all following get properties. - std::unique_ptr role(openthread_io_openthread_border_router_dup_device_role(mProxy.get())); + GAutoPtr role(openthread_io_openthread_border_router_dup_device_role(mProxy.get())); if (role) { ThreadDeviceRoleChangedHandler(role.get()); @@ -125,7 +126,7 @@ void ThreadStackManagerImpl::OnDbusPropertiesChanged(OpenthreadIoOpenthreadBorde const gchar * key; GVariant * value; - std::unique_ptr iter; + GAutoPtr iter; g_variant_get(changed_properties, "a{sv}", &MakeUniquePointerReceiver(iter).Get()); if (!iter) return; @@ -189,13 +190,13 @@ bool ThreadStackManagerImpl::_HaveRouteToAddress(const Inet::IPAddress & destAdd return true; } - std::unique_ptr routes(openthread_io_openthread_border_router_dup_external_routes(mProxy.get())); + GAutoPtr routes(openthread_io_openthread_border_router_dup_external_routes(mProxy.get())); if (!routes) return false; if (g_variant_n_children(routes.get()) > 0) { - std::unique_ptr iter; + GAutoPtr iter; g_variant_get(routes.get(), "av", &MakeUniquePointerReceiver(iter).Get()); if (!iter) return false; @@ -205,7 +206,7 @@ bool ThreadStackManagerImpl::_HaveRouteToAddress(const Inet::IPAddress & destAdd { if (route == nullptr) continue; - std::unique_ptr prefix; + GAutoPtr prefix; guint16 rloc16; guchar preference; gboolean stable; @@ -215,7 +216,7 @@ bool ThreadStackManagerImpl::_HaveRouteToAddress(const Inet::IPAddress & destAdd if (!prefix) continue; - std::unique_ptr address; + GAutoPtr address; guchar prefixLength; g_variant_get(prefix.get(), "(&vy)", &MakeUniquePointerReceiver(address).Get(), &prefixLength); if (!address) @@ -273,12 +274,11 @@ CHIP_ERROR ThreadStackManagerImpl::_GetThreadProvision(Thread::OperationalDatase VerifyOrReturnError(mProxy, CHIP_ERROR_INCORRECT_STATE); { - std::unique_ptr err; - - std::unique_ptr response( - g_dbus_proxy_call_sync(G_DBUS_PROXY(mProxy.get()), "org.freedesktop.DBus.Properties.Get", - g_variant_new("(ss)", "io.openthread.BorderRouter", "ActiveDatasetTlvs"), G_DBUS_CALL_FLAGS_NONE, - -1, nullptr, &MakeUniquePointerReceiver(err).Get())); + GAutoPtr err; + GAutoPtr response(g_dbus_proxy_call_sync(G_DBUS_PROXY(mProxy.get()), "org.freedesktop.DBus.Properties.Get", + g_variant_new("(ss)", "io.openthread.BorderRouter", "ActiveDatasetTlvs"), + G_DBUS_CALL_FLAGS_NONE, -1, nullptr, + &MakeUniquePointerReceiver(err).Get())); if (err) { @@ -293,14 +293,14 @@ CHIP_ERROR ThreadStackManagerImpl::_GetThreadProvision(Thread::OperationalDatase return CHIP_ERROR_KEY_NOT_FOUND; } - std::unique_ptr tupleContent(g_variant_get_child_value(response.get(), 0)); + GAutoPtr tupleContent(g_variant_get_child_value(response.get(), 0)); if (tupleContent == nullptr) { return CHIP_ERROR_KEY_NOT_FOUND; } - std::unique_ptr value(g_variant_get_variant(tupleContent.get())); + GAutoPtr value(g_variant_get_variant(tupleContent.get())); if (value == nullptr) { @@ -331,12 +331,10 @@ bool ThreadStackManagerImpl::_IsThreadEnabled() { VerifyOrReturnError(mProxy, false); - std::unique_ptr err; - - std::unique_ptr response( - g_dbus_proxy_call_sync(G_DBUS_PROXY(mProxy.get()), "org.freedesktop.DBus.Properties.Get", - g_variant_new("(ss)", "io.openthread.BorderRouter", "DeviceRole"), G_DBUS_CALL_FLAGS_NONE, -1, - nullptr, &MakeUniquePointerReceiver(err).Get())); + GAutoPtr err; + GAutoPtr response(g_dbus_proxy_call_sync(G_DBUS_PROXY(mProxy.get()), "org.freedesktop.DBus.Properties.Get", + g_variant_new("(ss)", "io.openthread.BorderRouter", "DeviceRole"), + G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &MakeUniquePointerReceiver(err).Get())); if (err) { @@ -349,14 +347,14 @@ bool ThreadStackManagerImpl::_IsThreadEnabled() return false; } - std::unique_ptr tupleContent(g_variant_get_child_value(response.get(), 0)); + GAutoPtr tupleContent(g_variant_get_child_value(response.get(), 0)); if (tupleContent == nullptr) { return false; } - std::unique_ptr value(g_variant_get_variant(tupleContent.get())); + GAutoPtr value(g_variant_get_variant(tupleContent.get())); if (value == nullptr) { @@ -395,7 +393,7 @@ CHIP_ERROR ThreadStackManagerImpl::_SetThreadEnabled(bool val) } else { - std::unique_ptr err; + GAutoPtr err; gboolean result = openthread_io_openthread_border_router_call_reset_sync(mProxy.get(), nullptr, &MakeUniquePointerReceiver(err).Get()); if (err) @@ -416,8 +414,8 @@ CHIP_ERROR ThreadStackManagerImpl::_SetThreadEnabled(bool val) void ThreadStackManagerImpl::_OnThreadBrAttachFinished(GObject * source_object, GAsyncResult * res, gpointer user_data) { ThreadStackManagerImpl * this_ = reinterpret_cast(user_data); - std::unique_ptr attachRes; - std::unique_ptr err; + GAutoPtr attachRes; + GAutoPtr err; { gboolean result = openthread_io_openthread_border_router_call_attach_finish(this_->mProxy.get(), res, &MakeUniquePointerReceiver(err).Get()); @@ -457,7 +455,7 @@ ConnectivityManager::ThreadDeviceType ThreadStackManagerImpl::_GetThreadDeviceTy return ConnectivityManager::ThreadDeviceType::kThreadDeviceType_NotSupported; } - std::unique_ptr role(openthread_io_openthread_border_router_dup_device_role(mProxy.get())); + GAutoPtr role(openthread_io_openthread_border_router_dup_device_role(mProxy.get())); if (!role) return ConnectivityManager::ThreadDeviceType::kThreadDeviceType_NotSupported; if (strcmp(role.get(), kOpenthreadDeviceRoleDetached) == 0 || strcmp(role.get(), kOpenthreadDeviceRoleDisabled) == 0) @@ -466,7 +464,7 @@ ConnectivityManager::ThreadDeviceType ThreadStackManagerImpl::_GetThreadDeviceTy } if (strcmp(role.get(), kOpenthreadDeviceRoleChild) == 0) { - std::unique_ptr linkMode(openthread_io_openthread_border_router_dup_link_mode(mProxy.get())); + GAutoPtr linkMode(openthread_io_openthread_border_router_dup_link_mode(mProxy.get())); if (!linkMode) return ConnectivityManager::ThreadDeviceType::kThreadDeviceType_NotSupported; gboolean rx_on_when_idle; @@ -511,7 +509,7 @@ CHIP_ERROR ThreadStackManagerImpl::_SetThreadDeviceType(ConnectivityManager::Thr if (!network_data) { - std::unique_ptr linkMode(g_variant_new("(bbb)", rx_on_when_idle, device_type, network_data)); + GAutoPtr linkMode(g_variant_new("(bbb)", rx_on_when_idle, device_type, network_data)); if (!linkMode) return CHIP_ERROR_NO_MEMORY; openthread_io_openthread_border_router_set_link_mode(mProxy.get(), linkMode.release()); @@ -646,8 +644,8 @@ void ThreadStackManagerImpl::_OnNetworkScanFinished(GObject * source_object, GAs void ThreadStackManagerImpl::_OnNetworkScanFinished(GAsyncResult * res) { - std::unique_ptr scan_result; - std::unique_ptr err; + GAutoPtr scan_result; + GAutoPtr err; { gboolean result = openthread_io_openthread_border_router_call_scan_finish( mProxy.get(), &MakeUniquePointerReceiver(scan_result).Get(), res, &MakeUniquePointerReceiver(err).Get()); @@ -671,7 +669,7 @@ void ThreadStackManagerImpl::_OnNetworkScanFinished(GAsyncResult * res) if (g_variant_n_children(scan_result.get()) > 0) { - std::unique_ptr iter; + GAutoPtr iter; g_variant_get(scan_result.get(), "a(tstayqqyyyybb)", &MakeUniquePointerReceiver(iter).Get()); if (!iter) { diff --git a/src/platform/Linux/ThreadStackManagerImpl.h b/src/platform/Linux/ThreadStackManagerImpl.h index 3914c04524b14c..22bbc7f5191924 100755 --- a/src/platform/Linux/ThreadStackManagerImpl.h +++ b/src/platform/Linux/ThreadStackManagerImpl.h @@ -22,13 +22,20 @@ #include #include -#include +#include #include #include #include #include namespace chip { + +template <> +struct GAutoPtrDeleter +{ + using deleter = GObjectDeleter; +}; + namespace DeviceLayer { class ThreadStackManagerImpl : public ThreadStackManager @@ -148,7 +155,7 @@ class ThreadStackManagerImpl : public ThreadStackManager uint8_t lqi; }; - std::unique_ptr mProxy; + GAutoPtr mProxy; static CHIP_ERROR GLibMatterContextInitThreadStack(ThreadStackManagerImpl * self); static CHIP_ERROR GLibMatterContextCallAttach(ThreadStackManagerImpl * self); diff --git a/src/platform/Linux/bluez/AdapterIterator.cpp b/src/platform/Linux/bluez/AdapterIterator.cpp index bc892247ac8986..868671e405eaf3 100644 --- a/src/platform/Linux/bluez/AdapterIterator.cpp +++ b/src/platform/Linux/bluez/AdapterIterator.cpp @@ -17,8 +17,6 @@ #include "AdapterIterator.h" -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE - #include #include #include @@ -139,5 +137,3 @@ bool AdapterIterator::Next() } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif diff --git a/src/platform/Linux/bluez/AdapterIterator.h b/src/platform/Linux/bluez/AdapterIterator.h index c06ea8cb97a73f..2908c7a28e51d3 100644 --- a/src/platform/Linux/bluez/AdapterIterator.h +++ b/src/platform/Linux/bluez/AdapterIterator.h @@ -17,12 +17,14 @@ #pragma once +#include + +#include + #include "lib/core/CHIPError.h" #include "Types.h" -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE - namespace chip { namespace DeviceLayer { namespace Internal { @@ -92,5 +94,3 @@ class AdapterIterator } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/bluez/ChipDeviceScanner.cpp b/src/platform/Linux/bluez/ChipDeviceScanner.cpp index 26543fe6a78f77..fec7ff519b2425 100644 --- a/src/platform/Linux/bluez/ChipDeviceScanner.cpp +++ b/src/platform/Linux/bluez/ChipDeviceScanner.cpp @@ -17,14 +17,12 @@ #include "ChipDeviceScanner.h" -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE - #include #include #include #include -#include +#include #include "BluezObjectList.h" #include "Types.h" @@ -61,7 +59,7 @@ CHIP_ERROR MainLoopCreateObjectManager(GDBusCreateObjectManagerContext * context // all D-Bus signals will be delivered to the GLib global default main context. VerifyOrDie(g_main_context_get_thread_default() != nullptr); - std::unique_ptr err; + GAutoPtr err; context->object = g_dbus_object_manager_client_new_for_bus_sync( G_BUS_TYPE_SYSTEM, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, BLUEZ_INTERFACE, "/", bluez_object_manager_client_get_proxy_type, nullptr /* unused user data in the Proxy Type Func */, @@ -78,11 +76,11 @@ bool BluezGetChipDeviceInfo(BluezDevice1 & aDevice, chip::Ble::ChipBLEDeviceIden GVariant * serviceData = bluez_device1_get_service_data(&aDevice); VerifyOrReturnError(serviceData != nullptr, false); - GVariant * dataValue = g_variant_lookup_value(serviceData, CHIP_BLE_UUID_SERVICE_STRING, nullptr); + GAutoPtr dataValue(g_variant_lookup_value(serviceData, CHIP_BLE_UUID_SERVICE_STRING, nullptr)); VerifyOrReturnError(dataValue != nullptr, false); size_t dataLen = 0; - const void * dataBytes = g_variant_get_fixed_array(dataValue, &dataLen, sizeof(uint8_t)); + const void * dataBytes = g_variant_get_fixed_array(dataValue.get(), &dataLen, sizeof(uint8_t)); VerifyOrReturnError(dataBytes != nullptr && dataLen >= sizeof(aDeviceInfo), false); memcpy(&aDeviceInfo, dataBytes, sizeof(aDeviceInfo)); @@ -225,59 +223,59 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStopScan(ChipDeviceScanner * self) void ChipDeviceScanner::SignalObjectAdded(GDBusObjectManager * manager, GDBusObject * object, ChipDeviceScanner * self) { - self->ReportDevice(bluez_object_get_device1(BLUEZ_OBJECT(object))); + BluezDevice1 * device = bluez_object_get_device1(BLUEZ_OBJECT(object)); + VerifyOrReturn(device != nullptr); + + self->ReportDevice(*device); + + g_object_unref(device); } void ChipDeviceScanner::SignalInterfaceChanged(GDBusObjectManagerClient * manager, GDBusObjectProxy * object, GDBusProxy * aInterface, GVariant * aChangedProperties, const gchar * const * aInvalidatedProps, ChipDeviceScanner * self) { - self->ReportDevice(bluez_object_get_device1(BLUEZ_OBJECT(object))); + BluezDevice1 * device = bluez_object_get_device1(BLUEZ_OBJECT(object)); + VerifyOrReturn(device != nullptr); + + self->ReportDevice(*device); + + g_object_unref(device); } -void ChipDeviceScanner::ReportDevice(BluezDevice1 * device) +void ChipDeviceScanner::ReportDevice(BluezDevice1 & device) { - if (device == nullptr) - { - return; - } - - if (strcmp(bluez_device1_get_adapter(device), g_dbus_proxy_get_object_path(G_DBUS_PROXY(mAdapter))) != 0) + if (strcmp(bluez_device1_get_adapter(&device), g_dbus_proxy_get_object_path(G_DBUS_PROXY(mAdapter))) != 0) { return; } chip::Ble::ChipBLEDeviceIdentificationInfo deviceInfo; - if (!BluezGetChipDeviceInfo(*device, deviceInfo)) + if (!BluezGetChipDeviceInfo(device, deviceInfo)) { - ChipLogDetail(Ble, "Device %s does not look like a CHIP device.", bluez_device1_get_address(device)); + ChipLogDetail(Ble, "Device %s does not look like a CHIP device.", bluez_device1_get_address(&device)); return; } mDelegate->OnDeviceScanned(device, deviceInfo); } -void ChipDeviceScanner::RemoveDevice(BluezDevice1 * device) +void ChipDeviceScanner::RemoveDevice(BluezDevice1 & device) { - if (device == nullptr) - { - return; - } - - if (strcmp(bluez_device1_get_adapter(device), g_dbus_proxy_get_object_path(G_DBUS_PROXY(mAdapter))) != 0) + if (strcmp(bluez_device1_get_adapter(&device), g_dbus_proxy_get_object_path(G_DBUS_PROXY(mAdapter))) != 0) { return; } chip::Ble::ChipBLEDeviceIdentificationInfo deviceInfo; - if (!BluezGetChipDeviceInfo(*device, deviceInfo)) + if (!BluezGetChipDeviceInfo(device, deviceInfo)) { return; } - const auto devicePath = g_dbus_proxy_get_object_path(G_DBUS_PROXY(device)); + const auto devicePath = g_dbus_proxy_get_object_path(G_DBUS_PROXY(&device)); GError * error = nullptr; if (!bluez_adapter1_call_remove_device_sync(mAdapter, devicePath, nullptr, &error)) @@ -298,7 +296,12 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStartScan(ChipDeviceScanner * self) ChipLogProgress(Ble, "BLE removing known devices."); for (BluezObject & object : BluezObjectList(self->mManager)) { - self->RemoveDevice(bluez_object_get_device1(&object)); + BluezDevice1 * device = bluez_object_get_device1(&object); + if (device != nullptr) + { + self->RemoveDevice(*device); + g_object_unref(device); + } } // Search for LE only. @@ -335,5 +338,3 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStartScan(ChipDeviceScanner * self) } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/bluez/ChipDeviceScanner.h b/src/platform/Linux/bluez/ChipDeviceScanner.h index 2c8c9763b2d6b4..f07606b2ae3b29 100644 --- a/src/platform/Linux/bluez/ChipDeviceScanner.h +++ b/src/platform/Linux/bluez/ChipDeviceScanner.h @@ -19,8 +19,6 @@ #include -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE - #include #include @@ -40,7 +38,7 @@ class ChipDeviceScannerDelegate virtual ~ChipDeviceScannerDelegate() {} // Called when a CHIP device was found - virtual void OnDeviceScanned(BluezDevice1 * device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) = 0; + virtual void OnDeviceScanned(BluezDevice1 & device, const chip::Ble::ChipBLEDeviceIdentificationInfo & info) = 0; // Called when a scan was completed (stopped or timed out) virtual void OnScanComplete() = 0; @@ -93,11 +91,11 @@ class ChipDeviceScanner ChipDeviceScanner * self); /// Check if a given device is a CHIP device and if yes, report it as discovered - void ReportDevice(BluezDevice1 * device); + void ReportDevice(BluezDevice1 & device); /// Check if a given device is a CHIP device and if yes, remove it from the adapter /// so that it can be re-discovered if it's still advertising. - void RemoveDevice(BluezDevice1 * device); + void RemoveDevice(BluezDevice1 & device); GDBusObjectManager * mManager = nullptr; BluezAdapter1 * mAdapter = nullptr; @@ -107,12 +105,10 @@ class ChipDeviceScanner gulong mInterfaceChangedSignal = 0; bool mIsScanning = false; bool mIsStopping = false; - /// Used to track if timer has alread expired and doesn't need to be canceled. + /// Used to track if timer has already expired and doesn't need to be canceled. bool mTimerExpired = false; }; } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/bluez/Helper.cpp b/src/platform/Linux/bluez/Helper.cpp index d071f3b304acb3..19d008a88cc2cb 100644 --- a/src/platform/Linux/bluez/Helper.cpp +++ b/src/platform/Linux/bluez/Helper.cpp @@ -47,29 +47,31 @@ * @file * Provides Bluez dbus implementation for BLE */ -#include -#include -#include -#include -#include -#include -#include -#include -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE #include #include -#include #include #include #include #include #include +#include +#include +#include + +#include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include #include #include "BluezObjectIterator.h" @@ -992,11 +994,10 @@ static void BluezSignalOnObjectRemoved(GDBusObjectManager * aManager, GDBusObjec // for Characteristic1, or GattService -- handle here via calling otPlatTobleHandleDisconnected, or ignore. } -static BluezGattService1 * BluezServiceCreate(gpointer apClosure) +static BluezGattService1 * BluezServiceCreate(BluezEndpoint * endpoint) { BluezObjectSkeleton * object; BluezGattService1 * service; - BluezEndpoint * endpoint = static_cast(apClosure); endpoint->mpServicePath = g_strdup_printf("%s/service", endpoint->mpRootPath); ChipLogDetail(DeviceLayer, "CREATE service object at %s", endpoint->mpServicePath); @@ -1156,7 +1157,7 @@ static BluezConnection * BluezCharacteristicGetBluezConnection(BluezGattCharacte } #endif // CHIP_BLUEZ_CENTRAL_SUPPORT -void EndpointCleanup(BluezEndpoint * apEndpoint) +static void EndpointCleanup(BluezEndpoint * apEndpoint) { if (apEndpoint != nullptr) { @@ -1262,24 +1263,23 @@ static void UpdateAdditionalDataCharacteristic(BluezGattCharacteristic1 * charac } #endif -static void BluezPeripheralObjectsSetup(gpointer apClosure) +static void BluezPeripheralObjectsSetup(BluezEndpoint * endpoint) { static const char * const c1_flags[] = { "write", nullptr }; static const char * const c2_flags[] = { "read", "indicate", nullptr }; +#if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING static const char * const c3_flags[] = { "read", nullptr }; +#endif - BluezEndpoint * endpoint = static_cast(apClosure); - VerifyOrExit(endpoint != nullptr, ChipLogError(DeviceLayer, "endpoint is NULL in %s", __func__)); - - endpoint->mpService = BluezServiceCreate(apClosure); + endpoint->mpService = BluezServiceCreate(endpoint); // C1 characteristic endpoint->mpC1 = BluezCharacteristicCreate(endpoint->mpService, "c1", CHIP_PLAT_BLE_UUID_C1_STRING, endpoint->mpRoot); bluez_gatt_characteristic1_set_flags(endpoint->mpC1, c1_flags); - g_signal_connect(endpoint->mpC1, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), apClosure); + g_signal_connect(endpoint->mpC1, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), endpoint); g_signal_connect(endpoint->mpC1, "handle-write-value", G_CALLBACK(BluezCharacteristicWriteValueError), nullptr); - g_signal_connect(endpoint->mpC1, "handle-acquire-write", G_CALLBACK(BluezCharacteristicAcquireWrite), apClosure); + g_signal_connect(endpoint->mpC1, "handle-acquire-write", G_CALLBACK(BluezCharacteristicAcquireWrite), endpoint); g_signal_connect(endpoint->mpC1, "handle-acquire-notify", G_CALLBACK(BluezCharacteristicAcquireNotifyError), nullptr); g_signal_connect(endpoint->mpC1, "handle-start-notify", G_CALLBACK(BluezCharacteristicStartNotifyError), nullptr); g_signal_connect(endpoint->mpC1, "handle-stop-notify", G_CALLBACK(BluezCharacteristicStopNotifyError), nullptr); @@ -1287,13 +1287,13 @@ static void BluezPeripheralObjectsSetup(gpointer apClosure) endpoint->mpC2 = BluezCharacteristicCreate(endpoint->mpService, "c2", CHIP_PLAT_BLE_UUID_C2_STRING, endpoint->mpRoot); bluez_gatt_characteristic1_set_flags(endpoint->mpC2, c2_flags); - g_signal_connect(endpoint->mpC2, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), apClosure); + g_signal_connect(endpoint->mpC2, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), endpoint); g_signal_connect(endpoint->mpC2, "handle-write-value", G_CALLBACK(BluezCharacteristicWriteValueError), nullptr); g_signal_connect(endpoint->mpC2, "handle-acquire-write", G_CALLBACK(BluezCharacteristicAcquireWriteError), nullptr); - g_signal_connect(endpoint->mpC2, "handle-acquire-notify", G_CALLBACK(BluezCharacteristicAcquireNotify), apClosure); - g_signal_connect(endpoint->mpC2, "handle-start-notify", G_CALLBACK(BluezCharacteristicStartNotify), apClosure); - g_signal_connect(endpoint->mpC2, "handle-stop-notify", G_CALLBACK(BluezCharacteristicStopNotify), apClosure); - g_signal_connect(endpoint->mpC2, "handle-confirm", G_CALLBACK(BluezCharacteristicConfirm), apClosure); + g_signal_connect(endpoint->mpC2, "handle-acquire-notify", G_CALLBACK(BluezCharacteristicAcquireNotify), endpoint); + g_signal_connect(endpoint->mpC2, "handle-start-notify", G_CALLBACK(BluezCharacteristicStartNotify), endpoint); + g_signal_connect(endpoint->mpC2, "handle-stop-notify", G_CALLBACK(BluezCharacteristicStopNotify), endpoint); + g_signal_connect(endpoint->mpC2, "handle-confirm", G_CALLBACK(BluezCharacteristicConfirm), endpoint); ChipLogDetail(DeviceLayer, "CHIP BTP C1 %s", bluez_gatt_characteristic1_get_service(endpoint->mpC1)); ChipLogDetail(DeviceLayer, "CHIP BTP C2 %s", bluez_gatt_characteristic1_get_service(endpoint->mpC2)); @@ -1303,23 +1303,19 @@ static void BluezPeripheralObjectsSetup(gpointer apClosure) // Additional data characteristics endpoint->mpC3 = BluezCharacteristicCreate(endpoint->mpService, "c3", CHIP_PLAT_BLE_UUID_C3_STRING, endpoint->mpRoot); bluez_gatt_characteristic1_set_flags(endpoint->mpC3, c3_flags); - g_signal_connect(endpoint->mpC3, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), apClosure); + g_signal_connect(endpoint->mpC3, "handle-read-value", G_CALLBACK(BluezCharacteristicReadValue), endpoint); g_signal_connect(endpoint->mpC3, "handle-write-value", G_CALLBACK(BluezCharacteristicWriteValueError), nullptr); g_signal_connect(endpoint->mpC3, "handle-acquire-write", G_CALLBACK(BluezCharacteristicAcquireWriteError), nullptr); - g_signal_connect(endpoint->mpC3, "handle-acquire-notify", G_CALLBACK(BluezCharacteristicAcquireNotify), apClosure); - g_signal_connect(endpoint->mpC3, "handle-start-notify", G_CALLBACK(BluezCharacteristicStartNotify), apClosure); - g_signal_connect(endpoint->mpC3, "handle-stop-notify", G_CALLBACK(BluezCharacteristicStopNotify), apClosure); - g_signal_connect(endpoint->mpC3, "handle-confirm", G_CALLBACK(BluezCharacteristicConfirm), apClosure); + g_signal_connect(endpoint->mpC3, "handle-acquire-notify", G_CALLBACK(BluezCharacteristicAcquireNotify), endpoint); + g_signal_connect(endpoint->mpC3, "handle-start-notify", G_CALLBACK(BluezCharacteristicStartNotify), endpoint); + g_signal_connect(endpoint->mpC3, "handle-stop-notify", G_CALLBACK(BluezCharacteristicStopNotify), endpoint); + g_signal_connect(endpoint->mpC3, "handle-confirm", G_CALLBACK(BluezCharacteristicConfirm), endpoint); // update the characteristic value UpdateAdditionalDataCharacteristic(endpoint->mpC3); ChipLogDetail(DeviceLayer, "CHIP BTP C3 %s", bluez_gatt_characteristic1_get_service(endpoint->mpC3)); #else ChipLogDetail(DeviceLayer, "CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING is FALSE"); - (void) c3_flags; #endif - -exit: - return; } static void BluezOnBusAcquired(GDBusConnection * aConn, const gchar * aName, gpointer apClosure) @@ -1335,7 +1331,7 @@ static void BluezOnBusAcquired(GDBusConnection * aConn, const gchar * aName, gpo endpoint->mpRoot = g_dbus_object_manager_server_new(endpoint->mpRootPath); g_dbus_object_manager_server_set_connection(endpoint->mpRoot, aConn); - BluezPeripheralObjectsSetup(apClosure); + BluezPeripheralObjectsSetup(endpoint); } exit: @@ -1356,39 +1352,35 @@ static void BluezOnNameLost(GDBusConnection * aConn, const gchar * aName, gpoint static CHIP_ERROR StartupEndpointBindings(BluezEndpoint * endpoint) { - GDBusObjectManager * manager; - GError * error = nullptr; - GDBusConnection * conn = nullptr; - VerifyOrExit(endpoint != nullptr, ChipLogError(DeviceLayer, "endpoint is NULL in %s", __func__)); + VerifyOrReturnError(endpoint != nullptr, CHIP_ERROR_INVALID_ARGUMENT, + ChipLogError(DeviceLayer, "endpoint is NULL in %s", __func__)); - conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &error); - VerifyOrExit(conn != nullptr, ChipLogError(DeviceLayer, "FAIL: get bus sync in %s, error: %s", __func__, error->message)); + GAutoPtr err; + GAutoPtr conn(g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &MakeUniquePointerReceiver(err).Get())); + VerifyOrReturnError(conn != nullptr, CHIP_ERROR_INTERNAL, + ChipLogError(DeviceLayer, "FAIL: get bus sync in %s, error: %s", __func__, err->message)); if (endpoint->mpAdapterName != nullptr) endpoint->mpOwningName = g_strdup_printf("%s", endpoint->mpAdapterName); else endpoint->mpOwningName = g_strdup_printf("C-%04x", getpid() & 0xffff); - BluezOnBusAcquired(conn, endpoint->mpOwningName, endpoint); + BluezOnBusAcquired(conn.get(), endpoint->mpOwningName, endpoint); - manager = g_dbus_object_manager_client_new_sync( - conn, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, BLUEZ_INTERFACE, "/", bluez_object_manager_client_get_proxy_type, - nullptr /* unused user data in the Proxy Type Func */, nullptr /*destroy notify */, nullptr /* cancellable */, &error); - - VerifyOrExit(manager != nullptr, ChipLogError(DeviceLayer, "FAIL: Error getting object manager client: %s", error->message)); + GDBusObjectManager * manager = g_dbus_object_manager_client_new_sync( + conn.get(), G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, BLUEZ_INTERFACE, "/", bluez_object_manager_client_get_proxy_type, + nullptr /* unused user data in the Proxy Type Func */, nullptr /*destroy notify */, nullptr /* cancellable */, + &MakeUniquePointerReceiver(err).Get()); + VerifyOrReturnError(manager != nullptr, CHIP_ERROR_INTERNAL, + ChipLogError(DeviceLayer, "FAIL: Error getting object manager client: %s", err->message)); endpoint->mpObjMgr = manager; - bluezObjectsSetup(endpoint); g_signal_connect(manager, "object-added", G_CALLBACK(BluezSignalOnObjectAdded), endpoint); g_signal_connect(manager, "object-removed", G_CALLBACK(BluezSignalOnObjectRemoved), endpoint); g_signal_connect(manager, "interface-proxy-properties-changed", G_CALLBACK(BluezSignalInterfacePropertiesChanged), endpoint); -exit: - if (error != nullptr) - g_error_free(error); - return CHIP_NO_ERROR; } @@ -1454,10 +1446,9 @@ CHIP_ERROR SendBluezIndication(BLE_CONNECTION_OBJECT apConn, chip::System::Packe return PlatformMgrImpl().GLibMatterContextInvokeSync(BluezC2Indicate, MakeConnectionDataBundle(apConn, apBuf)); } -static CHIP_ERROR BluezDisconnect(void * apClosure) +static CHIP_ERROR BluezDisconnect(BluezConnection * conn) { - BluezConnection * conn = static_cast(apClosure); - GError * error = nullptr; + GError * error = nullptr; gboolean success; VerifyOrExit(conn != nullptr, ChipLogError(DeviceLayer, "conn is NULL in %s", __func__)); @@ -1474,14 +1465,9 @@ static CHIP_ERROR BluezDisconnect(void * apClosure) return CHIP_NO_ERROR; } -static CHIP_ERROR CloseBleconnectionCB(void * apAppState) -{ - return BluezDisconnect(apAppState); -} - CHIP_ERROR CloseBluezConnection(BLE_CONNECTION_OBJECT apConn) { - return PlatformMgrImpl().GLibMatterContextInvokeSync(CloseBleconnectionCB, apConn); + return PlatformMgrImpl().GLibMatterContextInvokeSync(BluezDisconnect, static_cast(apConn)); } CHIP_ERROR StartBluezAdv(BluezEndpoint * apEndpoint) @@ -1516,12 +1502,12 @@ CHIP_ERROR BluezGattsAppRegister(BluezEndpoint * apEndpoint) return err; } -CHIP_ERROR ConfigureBluezAdv(BLEAdvConfig & aBleAdvConfig, BluezEndpoint * apEndpoint) +static CHIP_ERROR ConfigureBluezAdv(const BLEAdvConfig & aBleAdvConfig, BluezEndpoint * apEndpoint) { const char * msg = nullptr; CHIP_ERROR err = CHIP_NO_ERROR; VerifyOrExit(aBleAdvConfig.mpBleName != nullptr, msg = "FAIL: BLE name is NULL"); - VerifyOrExit(aBleAdvConfig.mpAdvertisingUUID != nullptr, msg = "FAIL: BLE mpAdvertisingUUID is NULL in %s"); + VerifyOrExit(aBleAdvConfig.mpAdvertisingUUID != nullptr, msg = "FAIL: BLE mpAdvertisingUUID is NULL"); apEndpoint->mpAdapterName = g_strdup(aBleAdvConfig.mpBleName); apEndpoint->mpAdvertisingUUID = g_strdup(aBleAdvConfig.mpAdvertisingUUID); @@ -1546,20 +1532,14 @@ CHIP_ERROR ConfigureBluezAdv(BLEAdvConfig & aBleAdvConfig, BluezEndpoint * apEnd return err; } -CHIP_ERROR InitBluezBleLayer(bool aIsCentral, char * apBleAddr, BLEAdvConfig & aBleAdvConfig, BluezEndpoint *& apEndpoint) +CHIP_ERROR InitBluezBleLayer(bool aIsCentral, const char * apBleAddr, const BLEAdvConfig & aBleAdvConfig, + BluezEndpoint *& apEndpoint) { + BluezEndpoint * endpoint = g_new0(BluezEndpoint, 1); CHIP_ERROR err = CHIP_NO_ERROR; - bool retval = false; - BluezEndpoint * endpoint = nullptr; - - // initialize server endpoint - endpoint = g_new0(BluezEndpoint, 1); - VerifyOrExit(endpoint != nullptr, ChipLogError(DeviceLayer, "FAIL: memory allocation in %s", __func__)); if (apBleAddr != nullptr) endpoint->mpAdapterAddr = g_strdup(apBleAddr); - else - endpoint->mpAdapterAddr = nullptr; endpoint->mpConnMap = g_hash_table_new(g_str_hash, g_str_equal); endpoint->mIsCentral = aIsCentral; @@ -1578,10 +1558,8 @@ CHIP_ERROR InitBluezBleLayer(bool aIsCentral, char * apBleAddr, BLEAdvConfig & a err = PlatformMgrImpl().GLibMatterContextInvokeSync(StartupEndpointBindings, endpoint); VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "Failed to schedule endpoint initialization")); - retval = TRUE; - exit: - if (retval) + if (err == CHIP_NO_ERROR) { apEndpoint = endpoint; ChipLogDetail(DeviceLayer, "PlatformBlueZInit init success"); @@ -1651,12 +1629,12 @@ static void OnCharacteristicChanged(GDBusProxy * aInterface, GVariant * aChanged gpointer apConnection) { BLE_CONNECTION_OBJECT connection = static_cast(apConnection); - GVariant * value = g_variant_lookup_value(aChangedProperties, "Value", G_VARIANT_TYPE_BYTESTRING); - VerifyOrReturn(value != nullptr); + GAutoPtr dataValue(g_variant_lookup_value(aChangedProperties, "Value", G_VARIANT_TYPE_BYTESTRING)); + VerifyOrReturn(dataValue != nullptr); size_t bufferLen; - auto buffer = g_variant_get_fixed_array(value, &bufferLen, sizeof(uint8_t)); - VerifyOrReturn(value != nullptr, ChipLogError(DeviceLayer, "Characteristic value has unexpected type")); + auto buffer = g_variant_get_fixed_array(dataValue.get(), &bufferLen, sizeof(uint8_t)); + VerifyOrReturn(buffer != nullptr, ChipLogError(DeviceLayer, "Characteristic value has unexpected type")); BLEManagerImpl::HandleTXCharChanged(connection, static_cast(buffer), bufferLen); } @@ -1735,7 +1713,10 @@ CHIP_ERROR BluezUnsubscribeCharacteristic(BLE_CONNECTION_OBJECT apConn) struct ConnectParams { - ConnectParams(BluezDevice1 * device, BluezEndpoint * endpoint) : mDevice(device), mEndpoint(endpoint), mNumRetries(0) {} + ConnectParams(BluezDevice1 * device, BluezEndpoint * endpoint) : + mDevice(reinterpret_cast(g_object_ref(device))), mEndpoint(endpoint), mNumRetries(0) + {} + ~ConnectParams() { g_object_unref(mDevice); } BluezDevice1 * mDevice; BluezEndpoint * mEndpoint; uint16_t mNumRetries; @@ -1793,20 +1774,16 @@ static CHIP_ERROR ConnectDeviceImpl(ConnectParams * apParams) g_cancellable_reset(endpoint->mpConnectCancellable); bluez_device1_call_connect(device, endpoint->mpConnectCancellable, ConnectDeviceDone, apParams); - g_object_unref(device); return CHIP_NO_ERROR; } -CHIP_ERROR ConnectDevice(BluezDevice1 * apDevice, BluezEndpoint * apEndpoint) +CHIP_ERROR ConnectDevice(BluezDevice1 & aDevice, BluezEndpoint * apEndpoint) { - auto params = chip::Platform::New(apDevice, apEndpoint); - g_object_ref(apDevice); - + auto params = chip::Platform::New(&aDevice, apEndpoint); if (PlatformMgrImpl().GLibMatterContextInvokeSync(ConnectDeviceImpl, params) != CHIP_NO_ERROR) { ChipLogError(Ble, "Failed to schedule ConnectDeviceImpl() on CHIPoBluez thread"); - g_object_unref(apDevice); chip::Platform::Delete(params); return CHIP_ERROR_INCORRECT_STATE; } @@ -1823,4 +1800,3 @@ void CancelConnect(BluezEndpoint * apEndpoint) } // namespace Internal } // namespace DeviceLayer } // namespace chip -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/Linux/bluez/Helper.h b/src/platform/Linux/bluez/Helper.h index d2576e019751ba..687e9a166c4b72 100644 --- a/src/platform/Linux/bluez/Helper.h +++ b/src/platform/Linux/bluez/Helper.h @@ -50,15 +50,17 @@ #pragma once -#include "Types.h" +#include +#include -#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE +#include "Types.h" namespace chip { namespace DeviceLayer { namespace Internal { -CHIP_ERROR InitBluezBleLayer(bool aIsCentral, char * apBleAddr, BLEAdvConfig & aBleAdvConfig, BluezEndpoint *& apEndpoint); +CHIP_ERROR InitBluezBleLayer(bool aIsCentral, const char * apBleAddr, const BLEAdvConfig & aBleAdvConfig, + BluezEndpoint *& apEndpoint); CHIP_ERROR ShutdownBluezBleLayer(BluezEndpoint * apEndpoint); CHIP_ERROR SendBluezIndication(BLE_CONNECTION_OBJECT apConn, chip::System::PacketBufferHandle apBuf); CHIP_ERROR CloseBluezConnection(BLE_CONNECTION_OBJECT apConn); @@ -74,11 +76,9 @@ CHIP_ERROR BluezSubscribeCharacteristic(BLE_CONNECTION_OBJECT apConn); /// Unsubscribe from the CHIP TX characteristic on the remote peripheral device CHIP_ERROR BluezUnsubscribeCharacteristic(BLE_CONNECTION_OBJECT apConn); -CHIP_ERROR ConnectDevice(BluezDevice1 * apDevice, BluezEndpoint * apEndpoint); +CHIP_ERROR ConnectDevice(BluezDevice1 & aDevice, BluezEndpoint * apEndpoint); void CancelConnect(BluezEndpoint * apEndpoint); } // namespace Internal } // namespace DeviceLayer } // namespace chip - -#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE diff --git a/src/platform/OpenThread/OpenThreadUtils.cpp b/src/platform/OpenThread/OpenThreadUtils.cpp index 2ceaae6100cbcb..6f89d1a4a28052 100644 --- a/src/platform/OpenThread/OpenThreadUtils.cpp +++ b/src/platform/OpenThread/OpenThreadUtils.cpp @@ -126,9 +126,10 @@ void LogOpenThreadStateChange(otInstance * otInst, uint32_t flags) } #if CHIP_CONFIG_SECURITY_TEST_MODE { - const otNetworkKey * otKey = otThreadGetNetworkKey(otInst); + otNetworkKey otKey; + otThreadGetNetworkKey(otInst, &otKey); for (int i = 0; i < OT_NETWORK_KEY_SIZE; i++) - snprintf(&strBuf[i * 2], 3, "%02X", otKey->m8[i]); + snprintf(&strBuf[i * 2], 3, "%02X", otKey.m8[i]); ChipLogDetail(DeviceLayer, " Network Key: %s", strBuf); } #endif // CHIP_CONFIG_SECURITY_TEST_MODE diff --git a/src/platform/Tizen/PosixConfig.cpp b/src/platform/Tizen/PosixConfig.cpp index c8b2d36d8271bf..e6f18834ef6396 100644 --- a/src/platform/Tizen/PosixConfig.cpp +++ b/src/platform/Tizen/PosixConfig.cpp @@ -62,7 +62,6 @@ const PosixConfig::Key PosixConfig::kConfigKey_PairedAccountId = { kConfigNam const PosixConfig::Key PosixConfig::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; const PosixConfig::Key PosixConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const PosixConfig::Key PosixConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const PosixConfig::Key PosixConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const PosixConfig::Key PosixConfig::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; const PosixConfig::Key PosixConfig::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; const PosixConfig::Key PosixConfig::kConfigKey_UniqueId = { kConfigNamespace_ChipConfig, "unique-id" }; diff --git a/src/platform/Tizen/PosixConfig.h b/src/platform/Tizen/PosixConfig.h index 9c5402cadaaf34..a5d8d6a6a8d45d 100644 --- a/src/platform/Tizen/PosixConfig.h +++ b/src/platform/Tizen/PosixConfig.h @@ -66,7 +66,6 @@ class PosixConfig static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_SetupDiscriminator; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; diff --git a/src/platform/android/AndroidConfig.cpp b/src/platform/android/AndroidConfig.cpp index b2e33571598e64..ec9221f08ba12e 100644 --- a/src/platform/android/AndroidConfig.cpp +++ b/src/platform/android/AndroidConfig.cpp @@ -80,6 +80,8 @@ const AndroidConfig::Key AndroidConfig::kConfigKey_UniqueId = { kCo const AndroidConfig::Key AndroidConfig::kConfigKey_Spake2pIterationCount = { kConfigNamespace_ChipFactory, "iteration-count" }; const AndroidConfig::Key AndroidConfig::kConfigKey_Spake2pSalt = { kConfigNamespace_ChipFactory, "salt" }; const AndroidConfig::Key AndroidConfig::kConfigKey_Spake2pVerifier = { kConfigNamespace_ChipFactory, "verifier" }; +const AndroidConfig::Key AndroidConfig::kConfigKey_DeviceTypeId = { kConfigNamespace_ChipFactory, "device-type-id" }; +const AndroidConfig::Key AndroidConfig::kConfigKey_DeviceName = { kConfigNamespace_ChipFactory, "device-name" }; // Keys stored in the Chip-config namespace const AndroidConfig::Key AndroidConfig::kConfigKey_ServiceConfig = { kConfigNamespace_ChipConfig, "service-config" }; @@ -87,7 +89,6 @@ const AndroidConfig::Key AndroidConfig::kConfigKey_PairedAccountId = { kConfi const AndroidConfig::Key AndroidConfig::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; const AndroidConfig::Key AndroidConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const AndroidConfig::Key AndroidConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const AndroidConfig::Key AndroidConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const AndroidConfig::Key AndroidConfig::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; const AndroidConfig::Key AndroidConfig::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; diff --git a/src/platform/android/AndroidConfig.h b/src/platform/android/AndroidConfig.h index d6f446d0fc4ee6..507a2b62e87da8 100644 --- a/src/platform/android/AndroidConfig.h +++ b/src/platform/android/AndroidConfig.h @@ -67,7 +67,6 @@ class AndroidConfig static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_SetupDiscriminator; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; @@ -82,6 +81,8 @@ class AndroidConfig static const Key kConfigKey_Spake2pIterationCount; static const Key kConfigKey_Spake2pSalt; static const Key kConfigKey_Spake2pVerifier; + static const Key kConfigKey_DeviceTypeId; + static const Key kConfigKey_DeviceName; static CHIP_ERROR Init(); diff --git a/src/platform/android/ConfigurationManagerImpl.cpp b/src/platform/android/ConfigurationManagerImpl.cpp index 68a102007d156c..8eecf20180c546 100644 --- a/src/platform/android/ConfigurationManagerImpl.cpp +++ b/src/platform/android/ConfigurationManagerImpl.cpp @@ -141,18 +141,6 @@ void ConfigurationManagerImpl::RunConfigUnitTest(void) AndroidConfig::RunConfigUnitTest(); } -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION -CHIP_ERROR ConfigurationManagerImpl::GetWiFiStationSecurityType(WiFiAuthSecurityType & secType) -{ - return CHIP_ERROR_NOT_IMPLEMENTED; -} - -CHIP_ERROR ConfigurationManagerImpl::UpdateWiFiStationSecurityType(WiFiAuthSecurityType secType) -{ - return CHIP_ERROR_NOT_IMPLEMENTED; -} -#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) { return; @@ -197,6 +185,39 @@ CHIP_ERROR ConfigurationManagerImpl::GetUniqueId(char * buf, size_t bufSize) return ReadConfigValueStr(AndroidConfig::kConfigKey_UniqueId, buf, bufSize, dateLen); } +CHIP_ERROR ConfigurationManagerImpl::GetDeviceTypeId(uint32_t & deviceType) +{ + CHIP_ERROR err; + uint32_t u32DeviceTypeId = 0; + err = ReadConfigValue(AndroidConfig::kConfigKey_DeviceTypeId, u32DeviceTypeId); + + if (err == CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND) + { + deviceType = CHIP_DEVICE_CONFIG_DEVICE_TYPE; + } + else + { + deviceType = u32DeviceTypeId; + } + + return CHIP_NO_ERROR; +} + +CHIP_ERROR ConfigurationManagerImpl::GetCommissionableDeviceName(char * buf, size_t bufSize) +{ + CHIP_ERROR err; + size_t u32DeviceNameSize = 0; + err = ReadConfigValueStr(AndroidConfig::kConfigKey_DeviceName, buf, bufSize, u32DeviceNameSize); + + if (err == CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND) + { + ReturnErrorCodeIf(bufSize < sizeof(CHIP_DEVICE_CONFIG_DEVICE_NAME), CHIP_ERROR_BUFFER_TOO_SMALL); + strcpy(buf, CHIP_DEVICE_CONFIG_DEVICE_NAME); + } + + return CHIP_NO_ERROR; +} + ConfigurationManager & ConfigurationMgrImpl() { return ConfigurationManagerImpl::GetDefaultInstance(); diff --git a/src/platform/android/ConfigurationManagerImpl.h b/src/platform/android/ConfigurationManagerImpl.h index 213a6e32d6ff95..cb8a7a6efc142c 100644 --- a/src/platform/android/ConfigurationManagerImpl.h +++ b/src/platform/android/ConfigurationManagerImpl.h @@ -43,6 +43,8 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR GetSoftwareVersionString(char * buf, size_t bufSize) override; CHIP_ERROR GetSoftwareVersion(uint32_t & softwareVer) override; CHIP_ERROR GetUniqueId(char * buf, size_t bufSize) override; + CHIP_ERROR GetDeviceTypeId(uint32_t & deviceType) override; + CHIP_ERROR GetCommissionableDeviceName(char * buf, size_t bufSize) override; private: // ===== Members that implement the ConfigurationManager public interface. @@ -52,11 +54,6 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR ReadPersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t & value) override; CHIP_ERROR WritePersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t value) override; -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - CHIP_ERROR GetWiFiStationSecurityType(Internal::WiFiAuthSecurityType & secType); - CHIP_ERROR UpdateWiFiStationSecurityType(Internal::WiFiAuthSecurityType secType); -#endif - // NOTE: Other public interface methods are implemented by GenericConfigurationManagerImpl<>. // ===== Members that implement the GenericConfigurationManagerImpl protected interface. diff --git a/src/platform/android/java/chip/platform/ConfigurationManager.java b/src/platform/android/java/chip/platform/ConfigurationManager.java index b05b061e757c36..3c9ab3fa91ba14 100644 --- a/src/platform/android/java/chip/platform/ConfigurationManager.java +++ b/src/platform/android/java/chip/platform/ConfigurationManager.java @@ -46,6 +46,8 @@ public interface ConfigurationManager { String kConfigKey_Spake2pIterationCount = "iteration-count"; String kConfigKey_Spake2pSalt = "salt"; String kConfigKey_Spake2pVerifier = "verifier"; + String kConfigKey_DeviceTypeId = "device-type-id"; + String kConfigKey_DeviceName = "device-name"; // Keys stored in the Chip-config namespace String kConfigKey_ServiceConfig = "service-config"; diff --git a/src/platform/bouffalolab/common/BLConfig.h b/src/platform/bouffalolab/common/BLConfig.h index 1bd80117119a46..5c11160b3b0dd6 100644 --- a/src/platform/bouffalolab/common/BLConfig.h +++ b/src/platform/bouffalolab/common/BLConfig.h @@ -56,7 +56,6 @@ class BLConfig static constexpr const char * kConfigKey_HardwareVersion = ("hardware-ver"); static constexpr const char * kConfigKey_LastUsedEpochKeyId = ("last-ek-id"); static constexpr const char * kConfigKey_FailSafeArmed = ("fail-safe-armed"); - static constexpr const char * kConfigKey_WiFiStationSecType = ("sta-sec-type"); static constexpr const char * kConfigKey_OperationalDeviceId = ("op-device-id"); static constexpr const char * kConfigKey_OperationalDeviceCert = ("op-device-cert"); static constexpr const char * kConfigKey_OperationalDeviceICACerts = ("op-device-ca-certs"); diff --git a/src/platform/cc13xx_26xx/BLEManagerImpl.cpp b/src/platform/cc13xx_26xx/BLEManagerImpl.cpp index 65c5cf0a2d9938..465a2b746aee39 100644 --- a/src/platform/cc13xx_26xx/BLEManagerImpl.cpp +++ b/src/platform/cc13xx_26xx/BLEManagerImpl.cpp @@ -266,9 +266,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) void * pMsg = (void *) ICall_malloc(sizeof(void *)); pMsg = (void *) conId; - EnqueueEvtHdrMsg(BLEManagerIMPL_CHIPOBLE_CLOSE_CONN_EVT, (void *) pMsg); - - return false; + return (EnqueueEvtHdrMsg(BLEManagerIMPL_CHIPOBLE_CLOSE_CONN_EVT, (void *) pMsg) == true); } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const diff --git a/src/platform/cc32xx/CC32XXConfig.cpp b/src/platform/cc32xx/CC32XXConfig.cpp index b6ed391b25fea0..599403b6868d70 100644 --- a/src/platform/cc32xx/CC32XXConfig.cpp +++ b/src/platform/cc32xx/CC32XXConfig.cpp @@ -309,7 +309,6 @@ const CC32XXConfig::Key CC32XXConfig::kConfigKey_FabricSecret = { "TI_kCon const CC32XXConfig::Key CC32XXConfig::kConfigKey_GroupKeyIndex = { "TI_kConfigKey_GroupKeyIndex" }; const CC32XXConfig::Key CC32XXConfig::kConfigKey_LastUsedEpochKeyId = { "TI_kConfigKey_LastUsedEpochKeyId" }; const CC32XXConfig::Key CC32XXConfig::kConfigKey_FailSafeArmed = { "TI_kConfigKey_FailSafeArmed" }; -const CC32XXConfig::Key CC32XXConfig::kConfigKey_WiFiStationSecType = { "TI_kConfigKey_WiFiStationSecType" }; const CC32XXConfig::Key CC32XXConfig::kConfigKey_RegulatoryLocation = { "TI_kConfigKey_RegulatoryLocation" }; const CC32XXConfig::Key CC32XXConfig::kConfigKey_CountryCode = { "TI_kConfigKey_CountryCode" }; const CC32XXConfig::Key CC32XXConfig::kConfigKey_Breadcrumb = { "TI_kConfigKey_Breadcrumb" }; diff --git a/src/platform/cc32xx/CC32XXConfig.h b/src/platform/cc32xx/CC32XXConfig.h index 5824afa3d50042..8179d9877a4489 100644 --- a/src/platform/cc32xx/CC32XXConfig.h +++ b/src/platform/cc32xx/CC32XXConfig.h @@ -52,7 +52,6 @@ class CC32XXConfig static const Key kConfigKey_GroupKeyIndex; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; static const Key kConfigKey_Breadcrumb; diff --git a/src/platform/mbed/MbedConfig.cpp b/src/platform/mbed/MbedConfig.cpp index 81f8f98da1a57d..63d5f87295c145 100644 --- a/src/platform/mbed/MbedConfig.cpp +++ b/src/platform/mbed/MbedConfig.cpp @@ -81,7 +81,6 @@ const MbedConfig::Key MbedConfig::kConfigKey_PairedAccountId = { CONFIG_KEY(" const MbedConfig::Key MbedConfig::kConfigKey_ServiceId = { CONFIG_KEY("service-id") }; const MbedConfig::Key MbedConfig::kConfigKey_LastUsedEpochKeyId = { CONFIG_KEY("last-ek-id") }; const MbedConfig::Key MbedConfig::kConfigKey_FailSafeArmed = { CONFIG_KEY("fail-safe-armed") }; -const MbedConfig::Key MbedConfig::kConfigKey_WiFiStationSecType = { CONFIG_KEY("sta-sec-type") }; const MbedConfig::Key MbedConfig::kConfigKey_RegulatoryLocation = { CONFIG_KEY("regulatory-location") }; const MbedConfig::Key MbedConfig::kConfigKey_CountryCode = { CONFIG_KEY("country-code") }; const MbedConfig::Key MbedConfig::kConfigKey_UniqueId = { CONFIG_KEY("unique-id") }; diff --git a/src/platform/mbed/MbedConfig.h b/src/platform/mbed/MbedConfig.h index f9f82bc06c779f..70b1dfa6890a24 100644 --- a/src/platform/mbed/MbedConfig.h +++ b/src/platform/mbed/MbedConfig.h @@ -65,7 +65,6 @@ class MbedConfig static const Key kConfigKey_ServiceId; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_SetupDiscriminator; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; diff --git a/src/platform/silabs/CHIPDevicePlatformConfig.h b/src/platform/silabs/CHIPDevicePlatformConfig.h index c51a923367ffaf..0ba1cecc6bef31 100644 --- a/src/platform/silabs/CHIPDevicePlatformConfig.h +++ b/src/platform/silabs/CHIPDevicePlatformConfig.h @@ -104,10 +104,10 @@ #define CHIP_DEVICE_CONFIG_ENABLE_IPV4 0 #endif /* CHIP_DEVICE_CONFIG_ENABLE_IPV4 */ -#if CHIP_CONFIG_ENABLE_ICD_SERVER +#if SL_ICD_ENABLED #define CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL chip::System::Clock::Milliseconds32(300) #define CHIP_DEVICE_CONFIG_ICD_FAST_POLL_INTERVAL chip::System::Clock::Milliseconds32(10) -#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER */ +#endif /* SL_ICD_ENABLED */ #endif /* SL_WIFI */ diff --git a/src/platform/silabs/CHIPPlatformConfig.h b/src/platform/silabs/CHIPPlatformConfig.h index a9105527fb7b15..49e2bb59454658 100644 --- a/src/platform/silabs/CHIPPlatformConfig.h +++ b/src/platform/silabs/CHIPPlatformConfig.h @@ -45,11 +45,19 @@ #if CHIP_HAVE_CONFIG_H #include #endif -#if !defined(CHIP_CONFIG_SHA256_CONTEXT_SIZE) && (CHIP_CRYPTO_PLATFORM == 1) +#if (CHIP_CRYPTO_PLATFORM == 1) #include "psa/crypto.h" + +#if !defined(CHIP_CONFIG_SHA256_CONTEXT_SIZE) #define CHIP_CONFIG_SHA256_CONTEXT_SIZE (sizeof(psa_hash_operation_t)) #endif +#if !defined(CHIP_CONFIG_SHA256_CONTEXT_ALIGN) +#define CHIP_CONFIG_SHA256_CONTEXT_ALIGN psa_hash_operation_t +#endif + +#endif // CHIP_CRYPTO_PLATFORM + // ==================== General Configuration Overrides ==================== #ifndef CHIP_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS diff --git a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h index 86ea2dae9ea644..35ff27436ed88b 100644 --- a/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h +++ b/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h @@ -28,128 +28,47 @@ #pragma once -#include -#include -#include - -#include "em_device.h" -#include "em_se.h" - #if CHIP_HAVE_CONFIG_H #include #endif // CHIP_HAVE_CONFIG_H -/** - * Enable H Crypto and Entropy modules - */ -#define MBEDTLS_AES_C -#define MBEDTLS_ECP_C -#define MBEDTLS_ECDH_C -#define MBEDTLS_ENTROPY_C -#define MBEDTLS_SHA224_C -#define MBEDTLS_SHA256_C +// DIC Specific Configurations #ifdef DIC_ENABLE #define MBEDTLS_PKCS1_V15 #define MBEDTLS_RSA_NO_CRT -#define MBEDTLS_CIPHER_MODE_CBC #define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED #define MBEDTLS_RSA_C #define MBEDTLS_SSL_IN_CONTENT_LEN 5120 #define MBEDTLS_SSL_OUT_CONTENT_LEN 1560 #define MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF +#define MBEDTLS_MPI_MAX_SIZE 512 #endif // DIC_ENABLE -#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf - -#define MBEDTLS_AES_ROM_TABLES -#define MBEDTLS_ASN1_PARSE_C -#define MBEDTLS_ASN1_WRITE_C -#define MBEDTLS_BASE64_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_CCM_C -#define MBEDTLS_CIPHER_C -#define MBEDTLS_CMAC_C -#define MBEDTLS_CTR_DRBG_C -#define MBEDTLS_ECDH_LEGACY_CONTEXT -#define MBEDTLS_ECDSA_C -#define MBEDTLS_ECDSA_DETERMINISTIC -#define MBEDTLS_ECJPAKE_C -#define MBEDTLS_ECP_DP_SECP256R1_ENABLED -#define MBEDTLS_ECP_NIST_OPTIM -#define MBEDTLS_ENTROPY_FORCE_SHA256 -#define MBEDTLS_ENTROPY_HARDWARE_ALT -#define MBEDTLS_ERROR_STRERROR_DUMMY -#define MBEDTLS_HAVE_ASM -#define MBEDTLS_HKDF_C -#define MBEDTLS_HMAC_DRBG_C -#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED -#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED -#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED -#define MBEDTLS_MD_C -#define MBEDTLS_NO_PLATFORM_ENTROPY -#define MBEDTLS_OID_C -#define MBEDTLS_PEM_PARSE_C -#define MBEDTLS_PEM_WRITE_C -#define MBEDTLS_PK_C -#define MBEDTLS_PK_PARSE_C -#define MBEDTLS_PK_WRITE_C -#if CHIP_CRYPTO_MBEDTLS -#define MBEDTLS_PKCS5_C -#endif -#define MBEDTLS_PLATFORM_C -#define MBEDTLS_PLATFORM_MEMORY -#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS -#define MBEDTLS_PSA_CRYPTO_C -#define MBEDTLS_PSA_CRYPTO_CONFIG -#define MBEDTLS_PSA_CRYPTO_DRIVERS -#define MBEDTLS_PSA_CRYPTO_STORAGE_C -#define MBEDTLS_SHA256_SMALLER -#define MBEDTLS_SHA512_C +// Configurations necessary for ot coap cert libs +#if SL_USE_COAP_CONFIG +#define MBEDTLS_SSL_TLS_C #define MBEDTLS_SSL_CLI_C -#define MBEDTLS_SSL_COOKIE_C -#define MBEDTLS_SSL_DTLS_ANTI_REPLAY -#define MBEDTLS_SSL_DTLS_HELLO_VERIFY -#define MBEDTLS_SSL_EXPORT_KEYS -#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE -#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH #define MBEDTLS_SSL_PROTO_TLS1_2 -#define MBEDTLS_SSL_PROTO_DTLS +#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE #define MBEDTLS_SSL_SRV_C -#define MBEDTLS_SSL_TLS_C +#define MBEDTLS_SSL_PROTO_DTLS +#define MBEDTLS_SSL_DTLS_ANTI_REPLAY +#define MBEDTLS_SSL_DTLS_HELLO_VERIFY +#define MBEDTLS_SSL_COOKIE_C +#define MBEDTLS_CIPHER_MODE_CBC +#define MBEDTLS_CCM_C +#define MBEDTLS_ECJPAKE_C +#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED +#endif // SL_USE_COAP_CONFIG -#if CHIP_CRYPTO_PLATFORM -#define MBEDTLS_USE_PSA_CRYPTO -#endif +#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf -#define MBEDTLS_X509_CREATE_C -#define MBEDTLS_X509_CSR_WRITE_C -#define MBEDTLS_X509_CRL_PARSE_C -#define MBEDTLS_X509_CRT_PARSE_C -#define MBEDTLS_X509_CSR_PARSE_C -#define MBEDTLS_X509_USE_C +#define MBEDTLS_AES_ROM_TABLES +// #define MBEDTLS_AES_FEWER_TABLES /* Check if we want this */ +#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS +#define MBEDTLS_SHA256_SMALLER /* Check if we want this */ #define MBEDTLS_MPI_WINDOW_SIZE 1 /**< Maximum windows size used. */ -#ifdef DIC_ENABLE -#define MBEDTLS_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ -#else -#define MBEDTLS_MPI_MAX_SIZE 32 /**< Maximum number of bytes for usable MPIs. */ -#endif // DIC_ENABLE -#define MBEDTLS_ECP_MAX_BITS 256 /**< Maximum bit size of groups */ -#define MBEDTLS_ECP_WINDOW_SIZE 2 /**< Maximum window size used */ -#define MBEDTLS_ECP_FIXED_POINT_OPTIM 0 /**< Enable fixed-point speed-up */ -#define MBEDTLS_ENTROPY_MAX_SOURCES 2 /**< Maximum number of sources supported */ - -#if OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE -#define MBEDTLS_SSL_MAX_CONTENT_LEN 900 /**< Maxium fragment length in bytes */ -#else -#define MBEDTLS_SSL_MAX_CONTENT_LEN 768 /**< Maxium fragment length in bytes */ -#endif - -#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 - -#define MBEDTLS_CIPHER_MODE_WITH_PADDING -#include "check_crypto_config.h" -#include "config-device-acceleration.h" -#include "mbedtls/check_config.h" -#include "mbedtls/config_psa.h" +// Includes generated file for all generic defines. +#include "sl_mbedtls_config.h" diff --git a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegates.h b/src/platform/silabs/efr32/efr32-psa-crypto-config.h similarity index 59% rename from examples/dishwasher-app/dishwasher-common/include/operational-state-delegates.h rename to src/platform/silabs/efr32/efr32-psa-crypto-config.h index 5653da44fb15a5..b5564f88bd3258 100644 --- a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegates.h +++ b/src/platform/silabs/efr32/efr32-psa-crypto-config.h @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2020-2021 Project CHIP Authors * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,5 +18,17 @@ #pragma once -// Operational State Server Init in application -void MatterOperationalStateServerInit(); +// DIC Specific Configurations +#ifdef DIC_ENABLE +#define PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY +#define PSA_WANT_ALG_CBC_NO_PADDING +#define PSA_WANT_ALG_RSA_PKCS1V15_SIGN +#endif // DIC_ENABLE + +// Configurations necessary for ot coap cert libs +#if SL_USE_COAP_CONFIG +#define PSA_WANT_ALG_CBC_NO_PADDING +#endif // SL_USE_COAP_CONFIG + +// Include Generated fies +#include "psa_crypto_config.h" diff --git a/src/platform/silabs/efr32/psa_crypto_config.h b/src/platform/silabs/efr32/psa_crypto_config.h deleted file mode 100644 index 450f9233cb9c4b..00000000000000 --- a/src/platform/silabs/efr32/psa_crypto_config.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * - * Copyright (c) 2020-2021 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 - -// ADD USER PSA CRYPTO CONFIG HERE -#define SL_PSA_KEY_USER_SLOT_COUNT (4) - -#define SL_PSA_ITS_USER_MAX_FILES (128) - -#include "em_device.h" -#if defined(SEMAILBOX_PRESENT) || defined(CRYPTOACC_PRESENT) -// Use accelerated HMAC when we have it -#define MBEDTLS_PSA_ACCEL_ALG_HMAC -// Use accelerated ECDSA/ECDH when we have it -#define MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR -#define MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY -#define MBEDTLS_PSA_ACCEL_ECC_SECP_R1_256 -#define MBEDTLS_PSA_ACCEL_ALG_ECDH -#define MBEDTLS_PSA_ACCEL_ALG_ECDSA -#else -// Devices without SEMAILBOX or CRYPTOACC don't have HMAC top-level accelerated -#define MBEDTLS_PSA_BUILTIN_ALG_HMAC 1 -// Devices without SEMAILBOX or CRYPTOACC don't have fully implemented ECDSA/ECDH -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR 1 -#define MBEDTLS_PSA_BUILTIN_ECC_SECP_R1_256 1 -#define MBEDTLS_PSA_BUILTIN_ALG_ECDH 1 -#define MBEDTLS_PSA_BUILTIN_ALG_ECDSA 1 -#endif -// end of user configuration section >>> - -// AUTO GENERATED PSA CONFIG SECTION BELOW. **KEEP AS IS FUTURE GSDK UPDATE** -#define PSA_WANT_KEY_TYPE_AES -#define PSA_WANT_ALG_CMAC -#define PSA_WANT_ALG_SHA_256 -#define PSA_WANT_ALG_CCM -#define PSA_WANT_ALG_ECB_NO_PADDING -#define PSA_WANT_ALG_ECDSA -#define PSA_WANT_ALG_ECDH -#define PSA_WANT_KEY_TYPE_ECC_KEY_PAIR -#define PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY -#define PSA_WANT_ECC_SECP_R1_256 -#define PSA_WANT_ALG_HKDF -#define PSA_WANT_ALG_HMAC -#define PSA_WANT_KEY_TYPE_HMAC -#ifdef DIC_ENABLE -#define PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY -#define PSA_WANT_ALG_CBC_NO_PADDING -#define PSA_WANT_ALG_RSA_PKCS1V15_SIGN -#endif // DIC_ENABLE -#define MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG -#define MBEDTLS_PSA_ACCEL_ALG_SHA_1 -#define MBEDTLS_PSA_ACCEL_ALG_SHA_224 -#define MBEDTLS_PSA_ACCEL_ALG_SHA_256 -#define MBEDTLS_PSA_ACCEL_KEY_TYPE_AES -#define MBEDTLS_PSA_ACCEL_ALG_ECB_NO_PADDING -#define MBEDTLS_PSA_ACCEL_ALG_CBC_NO_PADDING -#define MBEDTLS_PSA_ACCEL_ALG_CBC_PKCS7 -#define MBEDTLS_PSA_ACCEL_ALG_CTR -#define MBEDTLS_PSA_ACCEL_ALG_CFB -#define MBEDTLS_PSA_ACCEL_ALG_OFB -#define MBEDTLS_PSA_ACCEL_ALG_GCM -#define MBEDTLS_PSA_ACCEL_ALG_CCM -#define MBEDTLS_PSA_ACCEL_ALG_CMAC - -#define MBEDTLS_PSA_KEY_SLOT_COUNT (15 + 1 + SL_PSA_KEY_USER_SLOT_COUNT) -#define SL_PSA_ITS_MAX_FILES (1 + SL_PSA_ITS_USER_MAX_FILES) - -#if defined(TFM_CONFIG_SL_SECURE_LIBRARY) -// Asymmetric Crypt module (RSA is not supported) -#define TFM_CRYPTO_ASYM_ENCRYPT_MODULE_DISABLED - -// HASH module -#if !defined(PSA_WANT_ALG_SHA_1) && !defined(PSA_WANT_ALG_SHA_224) && !defined(PSA_WANT_ALG_SHA_256) && \ - !defined(PSA_WANT_ALG_SHA_384) && !defined(PSA_WANT_ALG_SHA_512) && !defined(PSA_WANT_ALG_MD5) -#define TFM_CRYPTO_HASH_MODULE_DISABLED -#endif - -// AEAD module -#if !defined(PSA_WANT_ALG_CCM) && !defined(PSA_WANT_ALG_GCM) && !defined(PSA_WANT_ALG_CHACHA20_POLY1305) -#define TFM_CRYPTO_AEAD_MODULE_DISABLED -#endif - -// Asymmetric Sign module -#if !defined(PSA_WANT_ALG_ECDSA) && !defined(PSA_WANT_ALG_EDDSA) && !defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA) -#define TFM_CRYPTO_ASYM_SIGN_MODULE_DISABLED -#endif - -// Cipher module -#if !defined(PSA_WANT_ALG_CFB) && !defined(PSA_WANT_ALG_CTR) && !defined(PSA_WANT_ALG_CBC_NO_PADDING) && \ - !defined(PSA_WANT_ALG_CBC_PKCS7) && !defined(PSA_WANT_ALG_ECB_NO_PADDING) && !defined(PSA_WANT_ALG_XTS) && \ - !defined(PSA_WANT_ALG_OFB) && !defined(PSA_WANT_ALG_STREAM_CIPHER) -#define TFM_CRYPTO_CIPHER_MODULE_DISABLED -#endif - -// MAC module -#if !defined(PSA_WANT_ALG_HMAC) && !defined(PSA_WANT_ALG_CMAC) && !defined(PSA_WANT_ALG_CBC_MAC) -#define TFM_CRYPTO_MAC_MODULE_DISABLED -#endif - -// Key derivation module -#if !defined(PSA_WANT_ALG_PBKDF2_HMAC) && !defined(PSA_WANT_ALG_HKDF) && !defined(PSA_WANT_ALG_PBKDF2_AES_CMAC_PRF_128) && \ - !defined(PSA_WANT_ALG_TLS12_PRF) && !defined(PSA_WANT_ALG_TLS12_PSK_TO_MS) && !defined(PSA_WANT_ALG_ECDH) -#define TFM_CRYPTO_KEY_DERIVATION_MODULE_DISABLED -#endif - -#endif // TFM_CONFIG_SL_SECURE_LIBRARY - -/* Defaults in GSDK 4.3.0 */ -#define SL_PSA_ITS_SUPPORT_V1_DRIVER 0 -#define SL_PSA_ITS_SUPPORT_V2_DRIVER 0 -#define SL_PSA_ITS_SUPPORT_V3_DRIVER 1 diff --git a/src/platform/silabs/efr32/wifi/wfx_host_events.h b/src/platform/silabs/efr32/wifi/wfx_host_events.h index 5fae93e82053f0..ab722f649532cc 100644 --- a/src/platform/silabs/efr32/wifi/wfx_host_events.h +++ b/src/platform/silabs/efr32/wifi/wfx_host_events.h @@ -353,9 +353,9 @@ void wfx_ipv6_notify(int got_ip); #ifdef RS911X_WIFI /* RSI Power Save */ -#if CHIP_CONFIG_ENABLE_ICD_SERVER +#if SL_ICD_ENABLED sl_status_t wfx_power_save(); -#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER */ +#endif /* SL_ICD_ENABLED */ /* RSI for LWIP */ void * wfx_rsi_alloc_pkt(void); void wfx_rsi_pkt_add_data(void * p, uint8_t * buf, uint16_t len, uint16_t off); diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp index 98eaa6f7114724..6701e832328a89 100644 --- a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp +++ b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp @@ -68,7 +68,6 @@ SilabsPlatform::SilabsButtonCb SilabsPlatform::mButtonCallback = nullptr; CHIP_ERROR SilabsPlatform::Init(void) { sl_system_init(); - sl_mbedtls_init(); #if CHIP_ENABLE_OPENTHREAD sl_ot_sys_init(); diff --git a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp index f226caeaaa8395..0eba1701c5dec1 100644 --- a/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp +++ b/src/platform/silabs/platformAbstraction/WiseMcuSpam.cpp @@ -26,6 +26,10 @@ extern "C" void RSI_Board_LED_Toggle(int); extern "C" void RSI_Wakeupsw_config(void); extern "C" void RSI_Wakeupsw_config_gpio0(void); +#if SILABS_LOG_ENABLED +#include "silabs_utils.h" +#endif + namespace chip { namespace DeviceLayer { namespace Silabs { diff --git a/src/platform/webos/BLEManagerImpl.h b/src/platform/webos/BLEManagerImpl.h index eb26e9d498819a..4780bbe661227a 100644 --- a/src/platform/webos/BLEManagerImpl.h +++ b/src/platform/webos/BLEManagerImpl.h @@ -163,9 +163,9 @@ class BLEManagerImpl final : public BLEManager, enum { - kMaxConnections = 1, // TODO: right max connection - kMaxDeviceNameLength = 20, // TODO: right-size this - kMaxAdvertismentDataSetSize = 31 // TODO: verify this + kMaxConnections = 1, // TODO: right max connection + kMaxDeviceNameLength = 20, // TODO: right-size this + kMaxAdvertisementDataSetSize = 31 // TODO: verify this }; struct BLEConnection diff --git a/src/platform/webos/BUILD.gn b/src/platform/webos/BUILD.gn index 7ab184f2442a84..719f3c70254b2c 100644 --- a/src/platform/webos/BUILD.gn +++ b/src/platform/webos/BUILD.gn @@ -59,6 +59,7 @@ static_library("webos") { sources = [ "../DeviceSafeQueue.cpp", "../DeviceSafeQueue.h", + "../GLibTypeDeleter.h", "../SingletonConfigurationManager.cpp", "BLEManagerImpl.cpp", "BLEManagerImpl.h", @@ -126,7 +127,6 @@ static_library("webos") { if (chip_enable_openthread) { sources += [ - "GlibTypeDeleter.h", "ThreadStackManagerImpl.cpp", "ThreadStackManagerImpl.h", ] diff --git a/src/platform/webos/ConfigurationManagerImpl.cpp b/src/platform/webos/ConfigurationManagerImpl.cpp index 6958e4adeff9dd..710840fe5aca29 100644 --- a/src/platform/webos/ConfigurationManagerImpl.cpp +++ b/src/platform/webos/ConfigurationManagerImpl.cpp @@ -180,46 +180,6 @@ CHIP_ERROR ConfigurationManagerImpl::WritePersistedStorageValue(::chip::Platform return WriteConfigValue(configKey, value); } -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION -CHIP_ERROR ConfigurationManagerImpl::GetWiFiStationSecurityType(WiFiAuthSecurityType & secType) -{ - CHIP_ERROR err; - uint32_t secTypeInt; - - err = ReadConfigValue(PosixConfig::kConfigKey_WiFiStationSecType, secTypeInt); - if (err == CHIP_NO_ERROR) - { - secType = static_cast(secTypeInt); - } - return err; -} - -CHIP_ERROR ConfigurationManagerImpl::UpdateWiFiStationSecurityType(WiFiAuthSecurityType secType) -{ - CHIP_ERROR err; - WiFiAuthSecurityType curSecType; - - if (secType != kWiFiSecurityType_NotSpecified) - { - err = GetWiFiStationSecurityType(curSecType); - if (err == CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND || (err == CHIP_NO_ERROR && secType != curSecType)) - { - uint32_t secTypeInt = static_cast(secType); - err = WriteConfigValue(PosixConfig::kConfigKey_WiFiStationSecType, secTypeInt); - } - SuccessOrExit(err); - } - else - { - err = PosixConfig::ClearConfigValue(PosixConfig::kConfigKey_WiFiStationSecType); - SuccessOrExit(err); - } - -exit: - return err; -} -#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - CHIP_ERROR ConfigurationManagerImpl::ReadConfigValue(Key key, bool & val) { return PosixConfig::ReadConfigValue(key, val); diff --git a/src/platform/webos/ConfigurationManagerImpl.h b/src/platform/webos/ConfigurationManagerImpl.h index 6fc9961d6e50c0..53746fe964c76a 100644 --- a/src/platform/webos/ConfigurationManagerImpl.h +++ b/src/platform/webos/ConfigurationManagerImpl.h @@ -60,11 +60,6 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR ReadPersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t & value) override; CHIP_ERROR WritePersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t value) override; -#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION - CHIP_ERROR GetWiFiStationSecurityType(Internal::WiFiAuthSecurityType & secType); - CHIP_ERROR UpdateWiFiStationSecurityType(Internal::WiFiAuthSecurityType secType); -#endif - // NOTE: Other public interface methods are implemented by GenericConfigurationManagerImpl<>. CHIP_ERROR WriteConfigValue(Key key, uint16_t val); CHIP_ERROR ReadConfigValue(Key key, uint16_t & val); diff --git a/src/platform/webos/PosixConfig.cpp b/src/platform/webos/PosixConfig.cpp index b35ab54cf8c029..79cbd2e0eaa49b 100644 --- a/src/platform/webos/PosixConfig.cpp +++ b/src/platform/webos/PosixConfig.cpp @@ -72,7 +72,6 @@ const PosixConfig::Key PosixConfig::kConfigKey_FabricSecret = { kConfigNam const PosixConfig::Key PosixConfig::kConfigKey_GroupKeyIndex = { kConfigNamespace_ChipConfig, "group-key-index" }; const PosixConfig::Key PosixConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; const PosixConfig::Key PosixConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const PosixConfig::Key PosixConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const PosixConfig::Key PosixConfig::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; const PosixConfig::Key PosixConfig::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; const PosixConfig::Key PosixConfig::kConfigKey_Breadcrumb = { kConfigNamespace_ChipConfig, "breadcrumb" }; diff --git a/src/platform/webos/PosixConfig.h b/src/platform/webos/PosixConfig.h index a7cd7028608421..8835bd04c60310 100644 --- a/src/platform/webos/PosixConfig.h +++ b/src/platform/webos/PosixConfig.h @@ -71,7 +71,6 @@ class PosixConfig static const Key kConfigKey_GroupKeyIndex; static const Key kConfigKey_LastUsedEpochKeyId; static const Key kConfigKey_FailSafeArmed; - static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_SetupDiscriminator; static const Key kConfigKey_RegulatoryLocation; static const Key kConfigKey_CountryCode; diff --git a/src/platform/webos/ThreadStackManagerImpl.h b/src/platform/webos/ThreadStackManagerImpl.h index e2391dffd78aba..b70910878c08d0 100644 --- a/src/platform/webos/ThreadStackManagerImpl.h +++ b/src/platform/webos/ThreadStackManagerImpl.h @@ -22,10 +22,10 @@ #include #include +#include #include #include #include -#include #include namespace chip { diff --git a/src/python_testing/TC_DA_1_2.py b/src/python_testing/TC_DA_1_2.py index 2140330be3ca97..56c1af06a131ee 100644 --- a/src/python_testing/TC_DA_1_2.py +++ b/src/python_testing/TC_DA_1_2.py @@ -96,6 +96,11 @@ def parse_ids_from_certs(dac: x509.Certificate, pai: x509.Certificate) -> tuple( return dac_vid, dac_pid, pai_vid, pai_pid +# To set the directory for the CD certificates use +# --string-arg cd_cert_dir:'your_directory_name' +# ex. --string-arg cd_cert_dir:'credentials/development/cd-certs' +# default is 'credentials/development/cd-certs'. + class TC_DA_1_2(MatterBaseTest): @async_test_body @@ -109,6 +114,8 @@ async def test_TC_DA_1_2(self): if pics_origin_pid != pics_origin_vid: asserts.fail("MCORE.DA.CERTDECL_ORIGIN_PRODUCTID and MCORE.DA.CERTDECL_ORIGIN_VENDORID PICS codes must match") + cd_cert_dir = self.user_params.get("cd_cert_dir", 'credentials/development/cd-certs') + self.print_step(0, "Commissioning, already done") opcreds = Clusters.Objects.OperationalCredentials @@ -319,13 +326,11 @@ async def test_TC_DA_1_2(self): self.print_step("8.9", "Check signature") signature_cd = bytes(signer_info['signature']) - # TODO: Cecille - this path needs to be set as an input - cert_dir = 'credentials/development/cd-certs' certs = {} - for filename in os.listdir(cert_dir): + for filename in os.listdir(cd_cert_dir): if '.der' not in filename: continue - with open(os.path.join(cert_dir, filename), 'rb') as f: + with open(os.path.join(cd_cert_dir, filename), 'rb') as f: cert = x509.load_der_x509_certificate(f.read()) pub = cert.public_key() ski = x509.SubjectKeyIdentifier.from_public_key(pub).digest diff --git a/src/python_testing/TC_OPSTATE_2_3.py b/src/python_testing/TC_OPSTATE_2_3.py index d8950c90ad81f3..2f8a9687703dbb 100644 --- a/src/python_testing/TC_OPSTATE_2_3.py +++ b/src/python_testing/TC_OPSTATE_2_3.py @@ -55,7 +55,6 @@ async def test_TC_OPSTATE_2_3(self): self.endpoint = self.matter_test_config.global_test_params['PIXIT_ENDPOINT'] - asserts.assert_true(self.check_pics("OPSTATE.S.A0002"), "OPSTATE.S.A0002 must be supported") asserts.assert_true(self.check_pics("OPSTATE.S.A0003"), "OPSTATE.S.A0003 must be supported") asserts.assert_true(self.check_pics("OPSTATE.S.A0004"), "OPSTATE.S.A0004 must be supported") asserts.assert_true(self.check_pics("OPSTATE.S.C00.Rsp"), "OPSTATE.S.C00.Rsp must be supported") @@ -93,25 +92,26 @@ async def test_TC_OPSTATE_2_3(self): asserts.assert_equal(operational_state, Clusters.OperationalState.Enums.OperationalStateEnum.kPaused, "OperationalState ID should be Paused(0x02)") - self.print_step(6, "Read CountdownTime attribute") - initial_countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, - attribute=attributes.CountdownTime) - logging.info("CountdownTime: %s" % (initial_countdown_time)) - if initial_countdown_time is not NullValue: - in_range = (1 <= initial_countdown_time <= 259200) - asserts.assert_true(initial_countdown_time is NullValue or in_range, - "invalid CountdownTime(%s). Must be in between 1 and 259200, or null " % initial_countdown_time) - - self.print_step(7, "Waiting for 5 seconds") - time.sleep(5) - - self.print_step(8, "Read CountdownTime attribute") - countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, attribute=attributes.CountdownTime) - logging.info("CountdownTime: %s" % (countdown_time)) - asserts.assert_true(countdown_time != 0 or countdown_time == NullValue, - "invalid CountdownTime(%s). Must be a non zero integer, or null" % countdown_time) - asserts.assert_equal(countdown_time, initial_countdown_time, "CountdownTime(%s) does not equal to the intial CountdownTime(%s)" - % (countdown_time, initial_countdown_time)) + if self.check_pics("OPSTATE.S.A0002"): + self.print_step(6, "Read CountdownTime attribute") + initial_countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, + attribute=attributes.CountdownTime) + logging.info("CountdownTime: %s" % (initial_countdown_time)) + if initial_countdown_time is not NullValue: + in_range = (1 <= initial_countdown_time <= 259200) + asserts.assert_true(initial_countdown_time is NullValue or in_range, + "invalid CountdownTime(%s). Must be in between 1 and 259200, or null " % initial_countdown_time) + + self.print_step(7, "Waiting for 5 seconds") + time.sleep(5) + + self.print_step(8, "Read CountdownTime attribute") + countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, attribute=attributes.CountdownTime) + logging.info("CountdownTime: %s" % (countdown_time)) + asserts.assert_true(countdown_time != 0 or countdown_time == NullValue, + "invalid CountdownTime(%s). Must be a non zero integer, or null" % countdown_time) + asserts.assert_equal(countdown_time, initial_countdown_time, "CountdownTime(%s) does not equal to the intial CountdownTime(%s)" + % (countdown_time, initial_countdown_time)) self.print_step(9, "Send Pause command") ret = await self.send_pause_cmd() diff --git a/src/python_testing/TC_RVCCLEANM_1_2.py b/src/python_testing/TC_RVCCLEANM_1_2.py index 9090a3948bfcc8..cbda91e1945f90 100644 --- a/src/python_testing/TC_RVCCLEANM_1_2.py +++ b/src/python_testing/TC_RVCCLEANM_1_2.py @@ -52,7 +52,8 @@ async def test_TC_RVCCLEANM_1_2(self): logging.info("SupportedModes: %s" % (supported_modes)) - asserts.assert_greater_equal(len(supported_modes), 1, "SupportedModes must have at least one entry!") + asserts.assert_greater_equal(len(supported_modes), 2, "SupportedModes must have at least 2 entries!") + asserts.assert_less_equal(len(supported_modes), 255, "SupportedModes must have at most 255 entries!") modes = [] for m in supported_modes: diff --git a/src/python_testing/TC_RVCOPSTATE_2_3.py b/src/python_testing/TC_RVCOPSTATE_2_3.py index 405523cb4a4f25..c1cd3b073f7454 100644 --- a/src/python_testing/TC_RVCOPSTATE_2_3.py +++ b/src/python_testing/TC_RVCOPSTATE_2_3.py @@ -55,7 +55,6 @@ async def test_TC_RVCOPSTATE_2_3(self): self.endpoint = self.matter_test_config.global_test_params['PIXIT_ENDPOINT'] - asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0002"), "RVCOPSTATE.S.A0002 must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0003"), "RVCOPSTATE.S.A0003 must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0004"), "RVCOPSTATE.S.A0004 must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.C00.Rsp"), "RVCOPSTATE.S.C00.Rsp must be supported") @@ -93,25 +92,26 @@ async def test_TC_RVCOPSTATE_2_3(self): asserts.assert_equal(operational_state, Clusters.OperationalState.Enums.OperationalStateEnum.kPaused, "OperationalState(%s) should be Paused(0x02)" % operational_state) - self.print_step(6, "Read CountdownTime attribute") - initial_countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, - attribute=attributes.CountdownTime) - logging.info("CountdownTime: %s" % (initial_countdown_time)) - if initial_countdown_time is not NullValue: - in_range = (1 <= initial_countdown_time <= 259200) - asserts.assert_true(initial_countdown_time is NullValue or in_range, - "invalid CountdownTime(%s). Must be in between 1 and 259200, or null" % initial_countdown_time) - - self.print_step(7, "Waiting for 5 seconds") - time.sleep(5) - - self.print_step(8, "Read CountdownTime attribute") - countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, attribute=attributes.CountdownTime) - logging.info("CountdownTime: %s" % (countdown_time)) - asserts.assert_true(countdown_time != 0 or countdown_time == NullValue, - "invalid CountdownTime(%s). Must be a non zero integer, or null" % countdown_time) - asserts.assert_equal(countdown_time, initial_countdown_time, - "CountdownTime(%s) does not equal to the intial CountdownTime (%s)" % (countdown_time, initial_countdown_time)) + if self.check_pics("RVCOPSTATE.S.A0002"): + self.print_step(6, "Read CountdownTime attribute") + initial_countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, + attribute=attributes.CountdownTime) + logging.info("CountdownTime: %s" % (initial_countdown_time)) + if initial_countdown_time is not NullValue: + in_range = (1 <= initial_countdown_time <= 259200) + asserts.assert_true(initial_countdown_time is NullValue or in_range, + "invalid CountdownTime(%s). Must be in between 1 and 259200, or null" % initial_countdown_time) + + self.print_step(7, "Waiting for 5 seconds") + time.sleep(5) + + self.print_step(8, "Read CountdownTime attribute") + countdown_time = await self.read_mod_attribute_expect_success(endpoint=self.endpoint, attribute=attributes.CountdownTime) + logging.info("CountdownTime: %s" % (countdown_time)) + asserts.assert_true(countdown_time != 0 or countdown_time == NullValue, + "invalid CountdownTime(%s). Must be a non zero integer, or null" % countdown_time) + asserts.assert_equal(countdown_time, initial_countdown_time, + "CountdownTime(%s) does not equal to the intial CountdownTime (%s)" % (countdown_time, initial_countdown_time)) self.print_step(9, "Send Pause command") ret = await self.send_pause_cmd() diff --git a/src/python_testing/TC_RVCRUNM_1_2.py b/src/python_testing/TC_RVCRUNM_1_2.py index 7029e70163217f..8ee3e93bb42cb9 100644 --- a/src/python_testing/TC_RVCRUNM_1_2.py +++ b/src/python_testing/TC_RVCRUNM_1_2.py @@ -52,7 +52,8 @@ async def test_TC_RVCRUNM_1_2(self): logging.info("SupportedModes: %s" % (supported_modes)) - asserts.assert_greater_equal(len(supported_modes), 2, "SupportedModes must have at least two entries!") + asserts.assert_greater_equal(len(supported_modes), 2, "SupportedModes must have at least 2 entries!") + asserts.assert_less_equal(len(supported_modes), 255, "SupportedModes must have at most 255 entries!") modes = [] for m in supported_modes: diff --git a/src/python_testing/TC_TIMESYNC_2_1.py b/src/python_testing/TC_TIMESYNC_2_1.py index 9413f5ee41b008..bbddb43db81db3 100644 --- a/src/python_testing/TC_TIMESYNC_2_1.py +++ b/src/python_testing/TC_TIMESYNC_2_1.py @@ -50,8 +50,6 @@ async def test_TC_TIMESYNC_2_1(self): time_source = await self.read_ts_attribute_expect_success(endpoint=endpoint, attribute=attributes.TimeSource) asserts.assert_less(time_source, Clusters.TimeSynchronization.Enums.TimeSourceEnum.kUnknownEnumValue, "TimeSource is not in valid range") - else: - asserts.assert_true(False, "TimeSource is a mandatory attribute and must be present in the PICS file") self.print_step(4, "Read TrustedTimeSource") if self.check_pics("TIMESYNC.S.A0003"): diff --git a/src/python_testing/TestCommissioningTimeSync.py b/src/python_testing/TestCommissioningTimeSync.py index efbb77ebdbfdfc..dfd7c55f8d21f4 100644 --- a/src/python_testing/TestCommissioningTimeSync.py +++ b/src/python_testing/TestCommissioningTimeSync.py @@ -26,6 +26,7 @@ # We don't have a good pipe between the c++ enums in CommissioningDelegate and python # so this is hardcoded. # I realize this is dodgy, not sure how to cross the enum from c++ to python cleanly +kCheckForMatchingFabric = 3 kConfigureUTCTime = 6 kConfigureTimeZone = 7 kConfigureDSTOffset = 8 @@ -208,6 +209,27 @@ async def test_CommissioningPreSetValues(self): asserts.assert_false(self.commissioner.CheckStageSuccessful( kConfigureTrustedTimeSource), 'kConfigureTrustedTimeSource incorrectly set') + @async_test_body + async def test_FabricCheckStage(self): + await self.create_commissioner() + + # This was moved into a different stage when the time sync stuff was added + asserts.assert_equal(self.commissioner.GetFabricCheckResult(), -1, "Fabric check result is already set") + self.commissioner.SetCheckMatchingFabric(True) + await self.commission_and_base_checks() + asserts.assert_true(self.commissioner.CheckStageSuccessful( + kCheckForMatchingFabric), "Did not run check for matching fabric stage") + asserts.assert_equal(self.commissioner.GetFabricCheckResult(), 0, "Fabric check result did not get set by pairing delegate") + + # Let's try it again with no check + await self.create_commissioner() + asserts.assert_equal(self.commissioner.GetFabricCheckResult(), -1, "Fabric check result is already set") + self.commissioner.SetCheckMatchingFabric(False) + await self.commission_and_base_checks() + asserts.assert_false(self.commissioner.CheckStageSuccessful( + kCheckForMatchingFabric), "Incorrectly ran check for matching fabric stage") + asserts.assert_equal(self.commissioner.GetFabricCheckResult(), -1, "Fabric check result incorrectly set") + # TODO(cecille): Test - Add hooks to change the time zone response to indicate no DST is needed # TODO(cecille): Test - Set commissioningParameters TimeZone and DST list size to > node list size to ensure they get truncated diff --git a/src/tools/chip-cert/CertUtils.cpp b/src/tools/chip-cert/CertUtils.cpp index db880f75f3c5dc..7ef3e6b109d3e5 100644 --- a/src/tools/chip-cert/CertUtils.cpp +++ b/src/tools/chip-cert/CertUtils.cpp @@ -837,12 +837,12 @@ bool WriteChipCert(const char * fileName, const ByteSpan & chipCert, CertFormat return WriteDataIntoFile(fileName, chipCert.data(), static_cast(chipCert.size()), dataFormat); } -bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, const struct tm & validFrom, +bool MakeCert(CertType certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, const struct tm & validFrom, uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, uint8_t futureExtsCount, X509 * newCert, EVP_PKEY * newKey, CertStructConfig & certConfig) { bool res = true; - bool isCA = (certType != kCertType_Node); + bool isCA = (certType != CertType::kNode); VerifyOrExit(subjectDN != nullptr, res = false); VerifyOrExit(caCert != nullptr, res = false); @@ -867,7 +867,7 @@ bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP // the new cert's subject name. if (certConfig.IsIssuerPresent()) { - if (certType == kCertType_Root) + if (certType == CertType::kRoot) { res = subjectDN->SetCertIssuerDN(newCert); VerifyTrueOrExit(res); @@ -920,12 +920,12 @@ bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP // Add extended key usage certificate extensions. if (!certConfig.IsExtensionExtendedKeyUsageMissing()) { - if (certType == kCertType_Node) + if (certType == CertType::kNode) { res = AddExtension(newCert, NID_ext_key_usage, "critical,clientAuth,serverAuth"); VerifyTrueOrExit(res); } - else if (certType == kCertType_FirmwareSigning) + else if (certType == CertType::kFirmwareSigning) { res = AddExtension(newCert, NID_ext_key_usage, "critical,codeSigning"); VerifyTrueOrExit(res); @@ -943,7 +943,7 @@ bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP // be the same as new cert's subject key id extension. if (certConfig.IsExtensionAKIDPresent()) { - if ((certType == kCertType_Root) && !certConfig.IsExtensionSKIDPresent()) + if ((certType == CertType::kRoot) && !certConfig.IsExtensionSKIDPresent()) { res = AddSubjectKeyId(newCert, certConfig.IsExtensionSKIDLengthValid()); VerifyTrueOrExit(res); @@ -990,9 +990,10 @@ bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP return res; } -CHIP_ERROR MakeCertTLV(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, const struct tm & validFrom, - uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, uint8_t futureExtsCount, - X509 * x509Cert, EVP_PKEY * newKey, CertStructConfig & certConfig, MutableByteSpan & chipCert) +CHIP_ERROR MakeCertTLV(CertType certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, + const struct tm & validFrom, uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, + uint8_t futureExtsCount, X509 * x509Cert, EVP_PKEY * newKey, CertStructConfig & certConfig, + MutableByteSpan & chipCert) { TLVWriter writer; TLVType containerType; @@ -1009,7 +1010,7 @@ CHIP_ERROR MakeCertTLV(uint8_t certType, const ToolChipDN * subjectDN, X509 * ca VerifyOrReturnError(x509Cert != nullptr, CHIP_ERROR_INVALID_ARGUMENT); VerifyOrReturnError(newKey != nullptr, CHIP_ERROR_INVALID_ARGUMENT); - isCA = (certType == kCertType_ICA || certType == kCertType_Root); + isCA = (certType == CertType::kICA || certType == CertType::kRoot); uint8_t * p = subjectPubkey; VerifyOrReturnError(i2o_ECPublicKey(EVP_PKEY_get0_EC_KEY(newKey), &p) == chip::Crypto::CHIP_CRYPTO_PUBLIC_KEY_SIZE_BYTES, @@ -1040,7 +1041,7 @@ CHIP_ERROR MakeCertTLV(uint8_t certType, const ToolChipDN * subjectDN, X509 * ca // issuer Name if (certConfig.IsIssuerPresent()) { - if (certType == kCertType_Root) + if (certType == CertType::kRoot) { ReturnErrorOnFailure(subjectDN->EncodeToTLV(writer, ContextTag(kTag_Issuer))); } @@ -1186,15 +1187,15 @@ CHIP_ERROR MakeCertTLV(uint8_t certType, const ToolChipDN * subjectDN, X509 * ca } // extended key usage - if (!certConfig.IsExtensionExtendedKeyUsageMissing() && (certType == kCertType_Node)) + if (!certConfig.IsExtensionExtendedKeyUsageMissing() && (certType == CertType::kNode)) { ReturnErrorOnFailure(writer.StartContainer(ContextTag(kTag_ExtendedKeyUsage), kTLVType_Array, containerType3)); - if (certType == kCertType_Node) + if (certType == CertType::kNode) { ReturnErrorOnFailure(writer.Put(AnonymousTag(), GetOIDEnum(kOID_KeyPurpose_ClientAuth))); ReturnErrorOnFailure(writer.Put(AnonymousTag(), GetOIDEnum(kOID_KeyPurpose_ServerAuth))); } - else if (certType == kCertType_FirmwareSigning) + else if (certType == CertType::kFirmwareSigning) { ReturnErrorOnFailure(writer.Put(AnonymousTag(), GetOIDEnum(kOID_KeyPurpose_CodeSigning))); } diff --git a/src/tools/chip-cert/Cmd_GenCert.cpp b/src/tools/chip-cert/Cmd_GenCert.cpp index 5313b866e0d6dd..7d8767e8c9d7ef 100644 --- a/src/tools/chip-cert/Cmd_GenCert.cpp +++ b/src/tools/chip-cert/Cmd_GenCert.cpp @@ -297,7 +297,7 @@ OptionSet *gCmdOptionSets[] = // clang-format on ToolChipDN gSubjectDN; -uint8_t gCertType = kCertType_NotSpecified; +CertType gCertType = CertType::kNotSpecified; int gPathLengthConstraint = kPathLength_NotSpecified; bool gSelfSign = false; const char * gCACertFileNameOrStr = nullptr; @@ -326,24 +326,24 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char { if (*arg == 'n') { - gCertType = kCertType_Node; + gCertType = CertType::kNode; } else if (*arg == 'f') { - gCertType = kCertType_FirmwareSigning; + gCertType = CertType::kFirmwareSigning; } else if (*arg == 'c') { - gCertType = kCertType_ICA; + gCertType = CertType::kICA; } else if (*arg == 'r') { - gCertType = kCertType_Root; + gCertType = CertType::kRoot; gSelfSign = true; } } - if (gCertType == kCertType_NotSpecified) + if (gCertType == CertType::kNotSpecified) { PrintArgError("%s: Invalid value specified for the certificate type: %s\n", progName, arg); return false; @@ -359,7 +359,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char switch (gCertType) { - case kCertType_Node: + case CertType::kNode: if (gCertConfig.IsSubjectNodeIdValid() && !chip::IsOperationalNodeId(chip64bitAttr)) { PrintArgError("%s: Invalid value specified for chip node-id attribute: %s\n", progName, arg); @@ -381,10 +381,10 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char } } break; - case kCertType_FirmwareSigning: + case CertType::kFirmwareSigning: err = gSubjectDN.AddAttribute_MatterFirmwareSigningId(chip64bitAttr); break; - case kCertType_ICA: + case CertType::kICA: if (gCertConfig.IsSubjectMatterIdPresent()) { err = gSubjectDN.AddAttribute_MatterICACId(chip64bitAttr); @@ -394,7 +394,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char } } break; - case kCertType_Root: + case CertType::kRoot: if (gCertConfig.IsSubjectMatterIdPresent()) { err = gSubjectDN.AddAttribute_MatterRCACId(chip64bitAttr); @@ -987,9 +987,9 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char bool Cmd_GenCert(int argc, char * argv[]) { - CHIP_ERROR err = CHIP_NO_ERROR; - bool res = true; - uint8_t certType = kCertType_NotSpecified; + CHIP_ERROR err = CHIP_NO_ERROR; + bool res = true; + CertType certType = CertType::kNotSpecified; std::unique_ptr newCert(X509_new(), &X509_free); std::unique_ptr newKey(EVP_PKEY_new(), &EVP_PKEY_free); std::unique_ptr caCert(nullptr, &X509_free); @@ -1109,7 +1109,7 @@ bool Cmd_GenCert(int argc, char * argv[]) } if (gPathLengthConstraint != kPathLength_NotSpecified && - (gCertType == kCertType_Node || gCertType == kCertType_FirmwareSigning)) + (gCertType == CertType::kNode || gCertType == CertType::kFirmwareSigning)) { fprintf(stderr, "Path length constraint shouldn't be specified for the leaf certificate.\n"); ExitNow(res = false); diff --git a/src/tools/chip-cert/chip-cert.h b/src/tools/chip-cert/chip-cert.h index 82d4d8e4c8190b..884e648a87b0d1 100644 --- a/src/tools/chip-cert/chip-cert.h +++ b/src/tools/chip-cert/chip-cert.h @@ -274,7 +274,7 @@ class CertStructConfig (mFlags.Has(CertErrorFlags::kExtBasicPathLenWrong) || mFlags.Has(CertErrorFlags::kExtBasicPathLen0) || mFlags.Has(CertErrorFlags::kExtBasicPathLen1) || mFlags.Has(CertErrorFlags::kExtBasicPathLen2))); } - int GetExtensionBasicPathLenValue(uint8_t & certType) + int GetExtensionBasicPathLenValue(chip::Credentials::CertType certType) { if (mFlags.Has(CertErrorFlags::kExtBasicPathLen0)) { @@ -290,15 +290,15 @@ class CertStructConfig } if (mFlags.Has(CertErrorFlags::kExtBasicPathLenWrong)) { - if (certType == chip::Credentials::kCertType_Node) + if (certType == chip::Credentials::CertType::kNode) { return 2; } - if (certType == chip::Credentials::kCertType_ICA) + if (certType == chip::Credentials::CertType::kICA) { return 1; } - if (certType == chip::Credentials::kCertType_Root) + if (certType == chip::Credentials::CertType::kRoot) { return 0; } @@ -438,10 +438,10 @@ extern bool LoadChipCert(const char * fileNameOrStr, bool isTrused, chip::Creden extern bool WriteCert(const char * fileName, X509 * cert, CertFormat certFmt); extern bool WriteChipCert(const char * fileName, const chip::ByteSpan & cert, CertFormat certFmt); -extern bool MakeCert(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, const struct tm & validFrom, - uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, uint8_t futureExtsCount, - X509 * newCert, EVP_PKEY * newKey, CertStructConfig & certConfig); -extern CHIP_ERROR MakeCertTLV(uint8_t certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, +extern bool MakeCert(chip::Credentials::CertType certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, + const struct tm & validFrom, uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, + uint8_t futureExtsCount, X509 * newCert, EVP_PKEY * newKey, CertStructConfig & certConfig); +extern CHIP_ERROR MakeCertTLV(chip::Credentials::CertType certType, const ToolChipDN * subjectDN, X509 * caCert, EVP_PKEY * caKey, const struct tm & validFrom, uint32_t validDays, int pathLen, const FutureExtensionWithNID * futureExts, uint8_t futureExtsCount, X509 * x509Cert, EVP_PKEY * newKey, CertStructConfig & certConfig, chip::MutableByteSpan & chipCert); diff --git a/third_party/openthread/ot-ti b/third_party/openthread/ot-ti index 8bec26bf2a882d..a9dd46d64f7279 160000 --- a/third_party/openthread/ot-ti +++ b/third_party/openthread/ot-ti @@ -1 +1 @@ -Subproject commit 8bec26bf2a882d252a83ce4154a5c8e0031e56c0 +Subproject commit a9dd46d64f7279974d3fd7b077e22aaf663d1460 diff --git a/third_party/openthread/platforms/efr32/BUILD.gn b/third_party/openthread/platforms/efr32/BUILD.gn index 4eb6e7caa08ba9..e3862a465670c3 100644 --- a/third_party/openthread/platforms/efr32/BUILD.gn +++ b/third_party/openthread/platforms/efr32/BUILD.gn @@ -32,6 +32,7 @@ config("openthread_efr32_config") { "${chip_root}/examples/platform/efr32", "${sdk_support_root}/matter/efr32/${silabs_family}/${silabs_board}", "${sl_ot_efr32_root}", + "${sl_ot_platform_abstraction}/include", ] # temporarily disable check until gsdk pulls in a more recent version of openthread diff --git a/third_party/silabs/BUILD.gn b/third_party/silabs/BUILD.gn index c2c248fb6da201..bff6ac886bce66 100644 --- a/third_party/silabs/BUILD.gn +++ b/third_party/silabs/BUILD.gn @@ -28,7 +28,6 @@ declare_args() { # Build target to use for efr32 SDK. Use this to set global SDK defines. silabs_sdk_target = "" - use_thread_coap_lib = false sl_matter_version_str = "" sl_matter_version = 1 sl_hardware_version = 1 @@ -125,6 +124,10 @@ if (silabs_board != "BRD4325B") { # CCP board "${sl_openthread_root}/examples/apps/cli/cli_uart.cpp", "${sl_openthread_root}/src/cli/cli.cpp", "${sl_openthread_root}/src/cli/cli.hpp", + "${sl_openthread_root}/src/cli/cli_bbr.cpp", + "${sl_openthread_root}/src/cli/cli_bbr.hpp", + "${sl_openthread_root}/src/cli/cli_br.cpp", + "${sl_openthread_root}/src/cli/cli_br.hpp", "${sl_openthread_root}/src/cli/cli_coap.cpp", "${sl_openthread_root}/src/cli/cli_coap.hpp", "${sl_openthread_root}/src/cli/cli_coap_secure.cpp", @@ -134,10 +137,14 @@ if (silabs_board != "BRD4325B") { # CCP board "${sl_openthread_root}/src/cli/cli_config.h", "${sl_openthread_root}/src/cli/cli_dataset.cpp", "${sl_openthread_root}/src/cli/cli_dataset.hpp", + "${sl_openthread_root}/src/cli/cli_dns.cpp", + "${sl_openthread_root}/src/cli/cli_dns.hpp", "${sl_openthread_root}/src/cli/cli_history.cpp", "${sl_openthread_root}/src/cli/cli_history.hpp", "${sl_openthread_root}/src/cli/cli_joiner.cpp", "${sl_openthread_root}/src/cli/cli_joiner.hpp", + "${sl_openthread_root}/src/cli/cli_mac_filter.cpp", + "${sl_openthread_root}/src/cli/cli_mac_filter.hpp", "${sl_openthread_root}/src/cli/cli_network_data.cpp", "${sl_openthread_root}/src/cli/cli_network_data.hpp", "${sl_openthread_root}/src/cli/cli_output.cpp", diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni index 9c64cd951cd5d9..3e56227a15b7d4 100644 --- a/third_party/silabs/efr32_sdk.gni +++ b/third_party/silabs/efr32_sdk.gni @@ -35,6 +35,9 @@ declare_args() { # Build openthread with prebuilt silabs lib use_silabs_thread_lib = false + # Use the ot coap prebuilt silabs lib + use_thread_coap_lib = false + # enable by default for thread/non-wifi-ncp builds enable_openthread_cli = !(use_rs9116 || use_wf200 || use_SiWx917) kvs_max_entries = 255 @@ -74,8 +77,8 @@ assert(efr32_sdk_root != "", "efr32_sdk_root must be specified") declare_args() { sl_ot_libs_path = "${efr32_sdk_root}/protocol/openthread" - sl_ot_efr32_root = - "${efr32_sdk_root}/protocol/openthread/platform-abstraction/efr32" + sl_ot_platform_abstraction = + "${efr32_sdk_root}/protocol/openthread/platform-abstraction" sl_openthread_root = "${efr32_sdk_root}/util/third_party/openthread" # board related pre-generated files path (default) @@ -86,6 +89,10 @@ declare_args() { slc_gen_path = "${chip_root}/third_party/silabs/slc_gen/${silabs_board}/" } +declare_args() { + sl_ot_efr32_root = "${sl_ot_platform_abstraction}/efr32" +} + if (slc_generate || slc_reuse_files) { silabs_gen_folder = slc_gen_path } else { @@ -142,9 +149,11 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/radio/rail_lib/chip/efr32", "${efr32_sdk_root}/platform/radio/rail_lib/chip/efr32/rf/common/cortex", "${efr32_sdk_root}/platform/radio/rail_lib/protocol/ieee802154", + "${efr32_sdk_root}/platform/radio/rail_lib/protocol/ble", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/pa-conversions", + "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_power_manager_init", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_pti", - "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_rf_path", + "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_power_manager_init", "${efr32_sdk_root}/platform/service/device_init/inc", "${efr32_sdk_root}/platform/service/hfxo_manager/inc", "${efr32_sdk_root}/platform/service/hfxo_manager/src", @@ -162,18 +171,20 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/base/hal/plugin/psstore", "${efr32_sdk_root}/platform/base/hal/plugin/antenna", "${efr32_sdk_root}/protocol/bluetooth/inc/", + "${efr32_sdk_root}/protocol/bluetooth/bgstack/ll/inc", "${efr32_sdk_root}/util/plugin/plugin-common/fem-control", "${efr32_sdk_root}/util/silicon_labs/silabs_core/graphics", "${efr32_sdk_root}/util/silicon_labs/silabs_core/memory_manager", "${efr32_sdk_root}/util/third_party/mbedtls/include", + "${efr32_sdk_root}/util/third_party/mbedtls/include/mbedtls", "${efr32_sdk_root}/util/third_party/mbedtls/include/psa", "${efr32_sdk_root}/util/third_party/mbedtls/library", - "${efr32_sdk_root}/platform/security/sl_component/sl_alt/include", "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/inc", + "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/config/", + "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/config/preset", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/inc", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/inc/public", "${efr32_sdk_root}/platform/security/sl_component/se_manager/inc", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/", "${efr32_sdk_root}/util/third_party/freertos/cmsis/Include", @@ -205,7 +216,7 @@ template("efr32_sdk") { # declared in efr32_mbedtls_config further down this file. defines = [ "MBEDTLS_CONFIG_FILE=\"efr32-chip-mbedtls-config.h\"", - "MBEDTLS_PSA_CRYPTO_CONFIG_FILE=\"psa_crypto_config.h\"", + "MBEDTLS_PSA_CRYPTO_CONFIG_FILE=\"efr32-psa-crypto-config.h\"", "__STARTUP_CLEAR_BSS", "HARD_FAULT_LOG_ENABLE", "CORTEXM3_EFM32_MICRO", @@ -221,21 +232,23 @@ template("efr32_sdk") { "${silabs_mcu}=1", "${silabs_board}=1", "SL_BOARD_NAME=${silabs_board}", - "SL_SUPRESS_DEPRECATION_WARNINGS_SDK_3_1", "__HEAP_SIZE=0", - "SL_CATALOG_FREERTOS_KERNEL_PRESENT=1", - "MBEDTLS_THREADING_C=1", - "MBEDTLS_THREADING_ALT=1", "SL_THREADING_ALT=1", "SL_COMPONENT_CATALOG_PRESENT=1", "PLATFORM_HEADER=\"platform-header.h\"", "USE_NVM3=1", - "SL_CATALOG_POWER_MANAGER_PRESENT", - "SL_CATALOG_SLEEPTIMER_PRESENT", + "SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT=1", + "SL_RAIL_UTIL_PA_CONFIG_HEADER=", + "RADIO_CONFIG_DMP_SUPPORT=1", #"__STACK_SIZE=0", ] + # Temporary configuration to enable COAP specific configurations + if (use_thread_coap_lib) { + defines += [ "SL_USE_COAP_CONFIG=1" ] + } + if (sl_uart_log_output) { defines += [ "SILABS_LOG_OUT_UART=1", @@ -252,6 +265,9 @@ template("efr32_sdk") { assert(chip_enable_wifi_ipv4, "enable chip_enable_wifi_ipv4") defines += [ "DIC_ENABLE=1" ] } + if (aws_sdk_ota) { + defines += [ "ENABLE_AWS_OTA_FEAT=1" ] + } if (chip_enable_wifi_ipv4) { defines += [ "CHIP_DEVICE_CONFIG_ENABLE_IPV4=1" ] } @@ -409,6 +425,11 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/emdrv/spidrv/inc", ] + if (silabs_board == "BRD4304A") { + _include_dirs += + [ "${efr32_sdk_root}/platform/radio/rail_lib/plugin/fem_util/" ] + } + libs += [ "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_gcc_release.a", "${sdk_support_root}/platform/emdrv/nvm3/lib/libnvm3_CM4_gcc.a", @@ -416,7 +437,7 @@ template("efr32_sdk") { ] if (!chip_enable_ble_rs911x) { - libs += [ "${sdk_support_root}/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth.a" ] + libs += [ "${sdk_support_root}/protocol/bluetooth/lib/EFR32XG12/GCC/libbluetooth.a" ] } defines += [ "EFR32MG12" ] @@ -432,12 +453,15 @@ template("efr32_sdk") { ] libs += [ - "${sdk_support_root}/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a", "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_gcc_release.a", "${sdk_support_root}/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a", "${sdk_support_root}/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a", ] + if (!chip_enable_ble_rs911x) { + libs += [ "${sdk_support_root}/protocol/bluetooth/lib/EFR32XG24/GCC/libbluetooth.a" ] + } + defines += [ "EFR32MG24", "EFR32_SERIES2_CONFIG4_MICRO", @@ -447,8 +471,6 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/Device/SiliconLabs/MGM24/Include", "${efr32_sdk_root}/platform/driver/debug/inc/", "${efr32_sdk_root}/platform/radio/rail_lib/chip/efr32/efr32xg2x", - "${efr32_sdk_root}/platform/radio/rail_lib/protocol/ble", - "${efr32_sdk_root}/platform/radio/rail_lib/protocol/ieee802154", "${efr32_sdk_root}/util/third_party/freertos/kernel/portable/GCC/ARM_CM33_NTZ/non_secure", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/fem_util/", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_rssi/", @@ -458,7 +480,7 @@ template("efr32_sdk") { ] libs += [ - "${sdk_support_root}/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a", + "${sdk_support_root}/protocol/bluetooth/lib/EFR32XG24/GCC/libbluetooth.a", "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_gcc_release.a", "${sdk_support_root}/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a", "${sdk_support_root}/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a", @@ -466,22 +488,13 @@ template("efr32_sdk") { if (silabs_mcu == "MGM240PB32VNA") { libs += [ "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_gcc.a" ] - defines += [ - "SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT=1", - "RADIO_CONFIG_DMP_SUPPORT=1", - ] } else if (silabs_mcu == "MGM240PB22VNA") { libs += [ "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_gcc.a" ] } else if (silabs_mcu == "MGM240L022RNF") { libs += [ "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_gcc.a" ] } else if (silabs_mcu == "MGM240SD22VNA") { libs += [ "${sdk_support_root}/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_gcc.a" ] - defines += [ - "SL_RAIL_LIB_MULTIPROTOCOL_SUPPORT=1", - "RADIO_CONFIG_DMP_SUPPORT=1", - "SLI_RADIOAES_REQUIRES_MASKING=1", - "SL_RAIL_UTIL_PA_CONFIG_HEADER=", - ] + defines += [ "SLI_RADIOAES_REQUIRES_MASKING=1" ] } defines += [ @@ -532,7 +545,7 @@ template("efr32_sdk") { # edited. sources = [ "${chip_root}/src/platform/silabs/efr32/efr32-chip-mbedtls-config.h", - "${chip_root}/src/platform/silabs/efr32/psa_crypto_config.h", + "${chip_root}/src/platform/silabs/efr32/efr32-psa-crypto-config.h", ] public_configs = [ "${chip_root}/src:includes" ] @@ -541,16 +554,13 @@ template("efr32_sdk") { source_set(sdk_target_name) { sources = [ - "${chip_root}/third_party/mbedtls/repo/include/mbedtls/platform.h", "${efr32_sdk_root}/hardware/board/src/sl_board_control_gpio.c", "${efr32_sdk_root}/hardware/board/src/sl_board_init.c", - "${efr32_sdk_root}/hardware/driver/configuration_over_swo/src/sl_cos.c", "${efr32_sdk_root}/platform/CMSIS/RTOS2/Source/os_systick.c", "${efr32_sdk_root}/platform/bootloader/api/btl_interface.c", "${efr32_sdk_root}/platform/bootloader/api/btl_interface_storage.c", "${efr32_sdk_root}/platform/bootloader/security/sha/crypto_sha.c", "${efr32_sdk_root}/platform/common/src/sl_slist.c", - "${efr32_sdk_root}/platform/driver/debug/src/sl_debug_swo.c", "${efr32_sdk_root}/platform/emdrv/dmadrv/src/dmadrv.c", "${efr32_sdk_root}/platform/emdrv/gpiointerrupt/src/gpiointerrupt.c", "${efr32_sdk_root}/platform/emdrv/nvm3/src/nvm3_default.c", @@ -572,9 +582,8 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/emlib/src/em_timer.c", "${efr32_sdk_root}/platform/peripheral/src/peripheral_sysrtc.c", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c", + "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_power_manager_init/sl_rail_util_power_manager_init.c", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_pti/sl_rail_util_pti.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/aes_aes.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/crypto_aes.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/crypto_ecp.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/error.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/mbedtls_ccm.c", @@ -584,21 +593,13 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/sl_entropy_hardware.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/sl_mbedtls.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/sli_psa_crypto.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/version_features.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src/sli_protocol_crypto_crypto.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src/sli_protocol_crypto_radioaes.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/crypto_management.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sl_psa_its_nvm3.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_cipher.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_hash.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_mac.c", - "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_trng_driver.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_psa_driver_common.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_psa_driver_init.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_psa_trng.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_builtin_keys.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_signature.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_se_version_dependencies.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_lfrco.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_nvic.c", "${efr32_sdk_root}/platform/service/hfxo_manager/src/sl_hfxo_manager.c", @@ -625,47 +626,33 @@ template("efr32_sdk") { "${efr32_sdk_root}/util/third_party/freertos/kernel/stream_buffer.c", "${efr32_sdk_root}/util/third_party/freertos/kernel/tasks.c", "${efr32_sdk_root}/util/third_party/freertos/kernel/timers.c", + "${efr32_sdk_root}/util/third_party/mbedtls/include/mbedtls/platform.h", "${efr32_sdk_root}/util/third_party/mbedtls/library/aes.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/aesni.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/asn1parse.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/asn1write.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/base64.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/bignum.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/camellia.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ccm.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/chacha20.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/chachapoly.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/cipher.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/cipher_wrap.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/cmac.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/constant_time.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/ctr_drbg.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/debug.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/des.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/dhm.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ecdh.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ecdsa.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ecjpake.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ecp.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ecp_curves.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/entropy.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/entropy_poll.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/gcm.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/hkdf.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/hmac_drbg.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/md.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/md5.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/oid.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pem.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pk.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pk_wrap.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/pkcs12.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pkcs5.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pkparse.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/pkwrite.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/platform.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/platform_util.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/poly1305.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_aead.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_cipher.c", @@ -678,12 +665,7 @@ template("efr32_sdk") { "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_se.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_slot_management.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_storage.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_its_file.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/ripemd160.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/rsa.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/sha1.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/sha256.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/sha512.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_cache.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_ciphersuites.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_client.c", @@ -693,10 +675,7 @@ template("efr32_sdk") { "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_tls.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_tls12_client.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_tls12_server.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/ssl_tls13_keys.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/threading.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/timing.c", - "${efr32_sdk_root}/util/third_party/mbedtls/library/version.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/x509.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/x509_create.c", "${efr32_sdk_root}/util/third_party/mbedtls/library/x509_crl.c", @@ -779,6 +758,14 @@ template("efr32_sdk") { ] } + # COS and SWO sources files for when we use generate with slc + if (slc_generate || slc_reuse_files) { + sources += [ + "${efr32_sdk_root}/hardware/driver/configuration_over_swo/src/sl_cos.c", + "${efr32_sdk_root}/platform/driver/debug/src/sl_debug_swo.c", + ] + } + # USART sources files if ((defined(invoker.chip_enable_pw_rpc) && invoker.chip_enable_pw_rpc) || chip_build_libshell || enable_openthread_cli || @@ -830,12 +817,28 @@ template("efr32_sdk") { sources += [ "${efr32_sdk_root}/platform/Device/SiliconLabs/EFR32MG12P/Source/startup_efr32mg12p.c", "${efr32_sdk_root}/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/crypto_aes.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src/sli_protocol_crypto_crypto.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/crypto_management.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_cipher.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_hash.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_mac.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_crypto_trng_driver.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_dcdc_s1.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_emu_s1.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_hfxo_s1.c", "${efr32_sdk_root}/platform/service/device_init/src/sl_device_init_lfxo_s1.c", "${efr32_sdk_root}/util/third_party/freertos/kernel/portable/GCC/ARM_CM4F/port.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/ctr_drbg.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/entropy.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/entropy_poll.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/hmac_drbg.c", ] + + if (silabs_board == "BRD4304A") { + sources += [ "${efr32_sdk_root}/platform/radio/rail_lib/plugin/fem_util/sl_fem_util.c" ] + } } else if (silabs_family == "efr32mg24") { sources += [ "${efr32_sdk_root}/platform/Device/SiliconLabs/EFR32MG24/Source/startup_efr32mg24.c", @@ -855,6 +858,7 @@ template("efr32_sdk") { if (silabs_family == "mgm24" || silabs_family == "efr32mg24") { sources += [ + "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_sequencer/sl_rail_util_sequencer.c", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager.c", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager_attestation.c", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager_cipher.c", @@ -866,6 +870,7 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager_util.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/se_aes.c", "${efr32_sdk_root}/platform/security/sl_component/sl_mbedtls_support/src/se_jpake.c", + "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src/sli_protocol_crypto_radioaes.c", "${efr32_sdk_root}/platform/security/sl_component/sl_protocol_crypto/src/sli_radioaes_management.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_aead.c", "${efr32_sdk_root}/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_cipher.c", diff --git a/third_party/silabs/gecko_sdk b/third_party/silabs/gecko_sdk index ef05eb60565ce3..2ba59bf969e94a 160000 --- a/third_party/silabs/gecko_sdk +++ b/third_party/silabs/gecko_sdk @@ -1 +1 @@ -Subproject commit ef05eb60565ce3be035b79b8fac1f9d12c7e706b +Subproject commit 2ba59bf969e94a0544e73e501d876722790f7a89 diff --git a/third_party/silabs/matter_support b/third_party/silabs/matter_support index f76916640f577c..05dc47da941d6a 160000 --- a/third_party/silabs/matter_support +++ b/third_party/silabs/matter_support @@ -1 +1 @@ -Subproject commit f76916640f577ce81db2ec361d560c77c2e21478 +Subproject commit 05dc47da941d6a5e4a578f167da0fbdb5c651ec7 diff --git a/third_party/silabs/silabs_board.gni b/third_party/silabs/silabs_board.gni index bba3f060f8898d..a48e8626635f32 100644 --- a/third_party/silabs/silabs_board.gni +++ b/third_party/silabs/silabs_board.gni @@ -41,6 +41,9 @@ declare_args() { #Disable MQTT by default enable_dic = false + # Disable AWS SDK OTA by default + aws_sdk_ota = false + # Disable UART log forwarding by default sl_uart_log_output = false } @@ -168,11 +171,6 @@ if (silabs_board == "BRD4304A") { } else if (silabs_board == "BRD4318A") { silabs_family = "mgm24" silabs_mcu = "MGM240SD22VNA" - - use_wstk_leds = false - use_external_flash = false - show_qr_code = false - disable_lcd = true } else { print( "Please provide a valid value for SILABS_BOARD env variable (currently supported BRD4304A, BRD4161A, BRD4163A, BRD4164A BRD4166A, BRD4170A, BRD4186C, BRD4187C, BRD2601B, BRD2703A, BRD4317A, BRD2704A)") diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h index 2e07f6be4d9132..8bad422096320b 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h @@ -93,7 +93,10 @@ namespace Scenes { // Bitmap for Feature enum class Feature : uint32_t { - kSceneNames = 0x1, + kSceneNames = 0x1, + kExplicit = 0x2, + kTableSize = 0x4, + kFabricScenes = 0x8, }; // Bitmap for ScenesCopyMode @@ -230,7 +233,14 @@ namespace BinaryInputBasic {} // namespace BinaryInputBasic namespace PulseWidthModulation {} // namespace PulseWidthModulation -namespace Descriptor {} // namespace Descriptor +namespace Descriptor { + +// Bitmap for Feature +enum class Feature : uint32_t +{ + kTagList = 0x1, +}; +} // namespace Descriptor namespace Binding {} // namespace Binding diff --git a/zzz_generated/chip-tool/zap-generated/test/Commands.h b/zzz_generated/chip-tool/zap-generated/test/Commands.h index b64115bee8df00..e4db248841446d 100644 --- a/zzz_generated/chip-tool/zap-generated/test/Commands.h +++ b/zzz_generated/chip-tool/zap-generated/test/Commands.h @@ -310,15 +310,12 @@ class TestList : public Command printf("DL_LockUnlock\n"); printf("DL_Schedules\n"); printf("Test_TC_DRLK_1_1\n"); - printf("Test_TC_DRLK_2_2\n"); - printf("Test_TC_DRLK_2_3\n"); printf("Test_TC_DRLK_2_4\n"); printf("Test_TC_DRLK_2_5\n"); printf("Test_TC_DRLK_2_6\n"); printf("Test_TC_DRLK_2_7\n"); printf("Test_TC_DRLK_2_8\n"); printf("Test_TC_DRLK_2_11\n"); - printf("Test_TC_DRLK_2_12\n"); printf("TestGroupMessaging\n"); printf("TestGroupsCluster\n"); printf("Test_TC_G_1_1\n"); @@ -399,6 +396,7 @@ class ManualTestList : public Command printf("Test_TC_DA_1_3\n"); printf("Test_TC_DA_1_4\n"); printf("Test_TC_DA_1_6\n"); + printf("Test_TC_DA_1_8\n"); printf("Test_TC_BINFO_3_1\n"); printf("Test_TC_OPCREDS_3_1\n"); printf("Test_TC_OPCREDS_3_2\n"); @@ -594,19 +592,11 @@ class ManualTestList : public Command printf("Test_TC_REFALM_2_2\n"); printf("Test_TC_REFALM_2_3\n"); printf("Test_TC_RVCCLEANM_1_1\n"); - printf("Test_TC_RVCCLEANM_1_2\n"); - printf("Test_TC_RVCCLEANM_2_1\n"); printf("Test_TC_RVCCLEANM_3_1\n"); - printf("Test_TC_RVCCLEANM_3_2\n"); printf("Test_TC_RVCCLEANM_3_3\n"); - printf("Test_TC_RVCOPSTATE_2_1\n"); printf("Test_TC_RVCOPSTATE_2_2\n"); - printf("Test_TC_RVCOPSTATE_2_3\n"); printf("Test_TC_RVCRUNM_1_1\n"); - printf("Test_TC_RVCRUNM_1_2\n"); - printf("Test_TC_RVCRUNM_2_1\n"); printf("Test_TC_RVCRUNM_3_1\n"); - printf("Test_TC_RVCRUNM_3_2\n"); printf("Test_TC_RVCRUNM_3_3\n"); printf("Test_TC_SWTCH_2_2\n"); printf("Test_TC_SWTCH_3_2\n"); @@ -2376,31 +2366,29 @@ class Test_TC_ACL_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads ClusterRevision attribute from DUT"); - VerifyOrDo(!ShouldSkip("ACL.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads FeatureMap attribute from DUT"); - VerifyOrDo(!ShouldSkip("ACL.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList attribute from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && ACL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList attribute from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && ACL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4b: TH reads optional attribute (Extension) in AttributeList"); - VerifyOrDo(!ShouldSkip("ACL.S.A0001 && ACL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -2412,7 +2400,7 @@ class Test_TC_ACL_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ACL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -2422,7 +2410,7 @@ class Test_TC_ACL_1_1Suite : public TestCommand } case 7: { LogStep(7, "Step 5a: TH reads EventList attribute from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && ACL.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::EventList::Id, true, chip::NullOptional); } @@ -2434,7 +2422,7 @@ class Test_TC_ACL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ACL.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -2449,7 +2437,7 @@ class Test_TC_ACL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ACL.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -2464,7 +2452,7 @@ class Test_TC_ACL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ACL.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -10170,7 +10158,7 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand { public: Test_TC_AIRQUAL_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_AIRQUAL_1_1", 12, credsIssuerConfig) + TestCommand("Test_TC_AIRQUAL_1_1", 16, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -10291,6 +10279,10 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand } break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -10302,7 +10294,11 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 10: + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -10310,7 +10306,11 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 11: + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -10322,6 +10322,10 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -10381,33 +10385,100 @@ class Test_TC_AIRQUAL_1_1Suite : public TestCommand chip::NullOptional); } case 7: { - LogStep(7, "Step 4: Read the global attribute: AttributeList"); + LogStep(7, "Step 4a: Read the global attribute: AttributeList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), AirQuality::Id, AirQuality::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { - LogStep(8, "Step 4: Read the global attribute: AttributeList"); + LogStep(8, "Step 4a: Read the global attribute: AttributeList"); VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), AirQuality::Id, AirQuality::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { - LogStep(9, "Step 5: TH reads EventList attribute from DUT"); + LogStep( + 9, + "Step 4b: TH reads from the DUT the AttributeList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in " + "the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and " + "(0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 5a: TH reads EventList attribute from DUT"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), AirQuality::Id, AirQuality::Attributes::EventList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Step 6: Read the global attribute: AcceptedCommandList"); + case 11: { + LogStep(11, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 12: { + LogStep(12, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), AirQuality::Id, AirQuality::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Step 7: Read the global attribute: GeneratedCommandList"); + case 13: { + LogStep( + 13, + "Step 6b: TH reads from the DUT the AcceptedCommandList attribute. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list " + "MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 14: { + LogStep(14, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), AirQuality::Id, AirQuality::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 15: { + LogStep( + 15, + "Step 7b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list " + "MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -10690,13 +10761,13 @@ class Test_TC_BOOL_1_1Suite : public TestCommand } case 7: { LogStep(7, "Step 7: Read the global attribute: EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BOOL.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BOOL.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), BooleanState::Id, BooleanState::Attributes::EventList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 7: Read the global attribute: EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !BOOL.S.E00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !BOOL.S.E00 && PICS_EVENT_LIST_ENABLED "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), BooleanState::Id, BooleanState::Attributes::EventList::Id, true, chip::NullOptional); } @@ -10790,7 +10861,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand { public: Test_TC_BRBINFO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_BRBINFO_1_1", 24, credsIssuerConfig) + TestCommand("Test_TC_BRBINFO_1_1", 28, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -10849,6 +10920,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 17UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65530UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); @@ -10860,7 +10932,12 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 17UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); } break; case 5: @@ -10869,7 +10946,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; case 6: @@ -10878,7 +10955,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; case 7: @@ -10887,7 +10964,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; case 8: @@ -10896,7 +10973,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 7UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); } break; case 9: @@ -10905,7 +10982,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 8UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 7UL)); } break; case 10: @@ -10914,7 +10991,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 9UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 8UL)); } break; case 11: @@ -10923,7 +11000,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 10UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 9UL)); } break; case 12: @@ -10932,7 +11009,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 11UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 10UL)); } break; case 13: @@ -10941,7 +11018,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 12UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 11UL)); } break; case 14: @@ -10950,7 +11027,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 13UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 12UL)); } break; case 15: @@ -10959,7 +11036,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 14UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 13UL)); } break; case 16: @@ -10968,7 +11045,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 15UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 14UL)); } break; case 17: @@ -10977,10 +11054,23 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 18UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 15UL)); } break; case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 18UL)); + } + break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 20: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -10989,7 +11079,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 19: + case 21: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -10998,7 +11088,7 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; - case 20: + case 22: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -11007,11 +11097,11 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; - case 21: + case 23: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 22: + case 24: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -11023,7 +11113,11 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 23: + case 25: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 26: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -11035,6 +11129,10 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -11074,116 +11172,143 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { - LogStep(4, "Step 4b: TH reads optional attribute(VendorName) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(4, "Step 4a: TH reads AttributeList from DUT"); + VerifyOrDo(!ShouldSkip(" !PICS_EVENT_LIST_ENABLED "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { - LogStep(5, "Step 4c: TH reads optional attribute(VendorID) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(5, "Step 4b: TH reads optional attribute(VendorName) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { - LogStep(6, "Step 4d: TH reads optional attribute(ProductName) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(6, "Step 4c: TH reads optional attribute(VendorID) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { - LogStep(7, "Step 4e: TH reads optional attribute(NodeLabel) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(7, "Step 4d: TH reads optional attribute(ProductName) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { - LogStep(8, "Step 4f: TH reads optional attribute(HardwareVersion) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(8, "Step 4e: TH reads optional attribute(NodeLabel) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { - LogStep(9, "Step 4g: TH reads optional attribute(HardwareVersionString) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(9, "Step 4f: TH reads optional attribute(HardwareVersion) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { - LogStep(10, "Step 4h: TH reads optional attribute(SoftwareVersion) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(10, "Step 4g: TH reads optional attribute(HardwareVersionString) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 11: { - LogStep(11, "Step 4i: TH reads optional attribute(SoftwareVersionString) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(11, "Step 4h: TH reads optional attribute(SoftwareVersion) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 12: { - LogStep(12, "Step 4j: TH reads optional attribute(ManufacturingDate) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(12, "Step 4i: TH reads optional attribute(SoftwareVersionString) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 13: { - LogStep(13, "Step 4k: TH reads optional attribute(PartNumber) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(13, "Step 4j: TH reads optional attribute(ManufacturingDate) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 14: { - LogStep(14, "Step 4l: TH reads optional attribute(ProductURL) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(14, "Step 4k: TH reads optional attribute(PartNumber) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 15: { - LogStep(15, "Step 4m: TH reads optional attribute(ProductLabel) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(15, "Step 4l: TH reads optional attribute(ProductURL) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 16: { - LogStep(16, "Step 4n: TH reads optional attribute(SerialNumber) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(16, "Step 4m: TH reads optional attribute(ProductLabel) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 17: { - LogStep(17, "Step 4o: TH reads optional attribute(UniqueID) in AttributeList"); - VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(17, "Step 4n: TH reads optional attribute(SerialNumber) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 18: { - LogStep(18, "Step 5a: TH reads optional event(StartUp) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(18, "Step 4o: TH reads optional attribute(UniqueID) in AttributeList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, - BridgedDeviceBasicInformation::Attributes::EventList::Id, true, chip::NullOptional); + BridgedDeviceBasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 19: { - LogStep(19, "Step 5b: TH reads optional attribute(ShutDown) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, - BridgedDeviceBasicInformation::Attributes::EventList::Id, true, chip::NullOptional); + LogStep(19, + "Step 4p: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); } case 20: { - LogStep(20, "Step 5c: TH reads optional attribute(Leave) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(20, "Step 5a: TH reads optional event(StartUp) in EventList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } case 21: { - LogStep(21, - "Step 5d: Read EventList attribute from the DUT and Verify that the DUT response provides a list of supported " - "events."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(21, "Step 5b: TH reads optional attribute(ShutDown) in EventList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, + BridgedDeviceBasicInformation::Attributes::EventList::Id, true, chip::NullOptional); + } + case 22: { + LogStep(22, "Step 5c: TH reads optional attribute(Leave) in EventList"); + VerifyOrDo(!ShouldSkip("BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, + BridgedDeviceBasicInformation::Attributes::EventList::Id, true, chip::NullOptional); + } + case 23: { + LogStep(23, + "Step 5d: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -11191,16 +11316,46 @@ class Test_TC_BRBINFO_1_1Suite : public TestCommand value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); return UserPrompt(kIdentityAlpha, value); } - case 22: { - LogStep(22, "Step 6: TH1 reads AcceptedCommandList from DUT"); + case 24: { + LogStep(24, "Step 6a: TH1 reads AcceptedCommandList from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 23: { - LogStep(23, "Step 7: TH1 reads GeneratedCommandList from DUT"); + case 25: { + LogStep(25, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 26: { + LogStep(26, "Step 7a: TH1 reads GeneratedCommandList from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasicInformation::Id, BridgedDeviceBasicInformation::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 27: { + LogStep(27, + "Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -12352,7 +12507,7 @@ class Test_TC_ACT_1_1Suite : public TestCommand } case 6: { LogStep(6, "Step 5: TH reads EventList attribute from DUT"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -12502,25 +12657,23 @@ class Test_TC_BIND_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("BIND.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Binding::Id, Binding::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("BIND.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Binding::Id, Binding::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BIND.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Binding::Id, Binding::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && BIND.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Binding::Id, Binding::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -12532,7 +12685,7 @@ class Test_TC_BIND_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BIND.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -12542,12 +12695,13 @@ class Test_TC_BIND_1_1Suite : public TestCommand } case 6: { LogStep(6, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BIND.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -12562,7 +12716,7 @@ class Test_TC_BIND_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BIND.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -12577,7 +12731,7 @@ class Test_TC_BIND_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BIND.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -20633,7 +20787,7 @@ class Test_TC_CC_6_5Suite : public TestCommand ColorControl::Attributes::StartUpColorTemperatureMireds::Id, true, chip::NullOptional); } case 7: { - LogStep(7, "TH writes to StartUpColorTemperatureMireds attribute with value StartUpColorTemperatureMireds"); + LogStep(7, "Step 2a: TH writes to StartUpColorTemperatureMireds attribute with value StartUpColorTemperatureMireds"); VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && CC.S.A4010 && CC.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; @@ -20644,7 +20798,7 @@ class Test_TC_CC_6_5Suite : public TestCommand return UserPrompt(kIdentityAlpha, value); } case 8: { - LogStep(8, "Step 2a: TH reads StartUpColorTemperatureMireds attribute from DUT"); + LogStep(8, "Step 2b: TH reads StartUpColorTemperatureMireds attribute from DUT"); VerifyOrDo(!ShouldSkip("CC.S.A4010 && CC.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ColorControl::Id, ColorControl::Attributes::StartUpColorTemperatureMireds::Id, true, chip::NullOptional); @@ -24280,7 +24434,7 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand { public: Test_TC_CDOCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_CDOCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_CDOCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -24582,6 +24736,10 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -24593,7 +24751,11 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -24605,7 +24767,11 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -24617,6 +24783,10 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -24733,7 +24903,7 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand } case 16: { LogStep(16, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !PICS_EVENT_LIST_ENABLED "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonDioxideConcentrationMeasurement::Id, CarbonDioxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -24812,23 +24982,85 @@ class Test_TC_CDOCONC_1_1Suite : public TestCommand CarbonDioxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonDioxideConcentrationMeasurement::Id, CarbonDioxideConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonDioxideConcentrationMeasurement::Id, CarbonDioxideConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonDioxideConcentrationMeasurement::Id, CarbonDioxideConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -25074,7 +25306,7 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand { public: Test_TC_CMOCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_CMOCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_CMOCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -25372,6 +25604,10 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -25383,7 +25619,11 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -25395,7 +25635,11 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -25407,6 +25651,10 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -25602,23 +25850,85 @@ class Test_TC_CMOCONC_1_1Suite : public TestCommand CarbonMonoxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonMonoxideConcentrationMeasurement::Id, CarbonMonoxideConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonMonoxideConcentrationMeasurement::Id, CarbonMonoxideConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), CarbonMonoxideConcentrationMeasurement::Id, CarbonMonoxideConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -25866,7 +26176,7 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand { public: Test_TC_FLDCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_FLDCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_FLDCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -26164,6 +26474,10 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26175,7 +26489,11 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26187,7 +26505,11 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26199,6 +26521,10 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -26394,23 +26720,85 @@ class Test_TC_FLDCONC_1_1Suite : public TestCommand FormaldehydeConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FormaldehydeConcentrationMeasurement::Id, FormaldehydeConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FormaldehydeConcentrationMeasurement::Id, FormaldehydeConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FormaldehydeConcentrationMeasurement::Id, FormaldehydeConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -26654,7 +27042,7 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand { public: Test_TC_NDOCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_NDOCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_NDOCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -26952,6 +27340,10 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26963,7 +27355,11 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26975,7 +27371,11 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -26987,6 +27387,10 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -27164,42 +27568,105 @@ class Test_TC_NDOCONC_1_1Suite : public TestCommand } case 24: { LogStep(24, - "Step 3i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from AttributeList when " + "Step 4i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from AttributeList when " "NDOCONC.S.F05 (AVG) is not set"); VerifyOrDo(!ShouldSkip(" !NDOCONC.S.F05 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 25: { - LogStep(25, "Step 3j: Read the optional, feature dependent attribute LevelValue in AttributeList"); + LogStep(25, "Step 4j: Read the optional, feature dependent attribute LevelValue in AttributeList"); VerifyOrDo(!ShouldSkip("NDOCONC.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 26: { - LogStep(26, "Step 3k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is not set"); + LogStep(26, "Step 4k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is not set"); VerifyOrDo(!ShouldSkip(" !NDOCONC.S.F01 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), NitrogenDioxideConcentrationMeasurement::Id, NitrogenDioxideConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -27447,7 +27914,7 @@ class Test_TC_NDOCONC_2_1Suite : public TestCommand class Test_TC_OZCONC_1_1Suite : public TestCommand { public: - Test_TC_OZCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_OZCONC_1_1", 30, credsIssuerConfig) + Test_TC_OZCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_OZCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -27745,6 +28212,10 @@ class Test_TC_OZCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -27756,7 +28227,11 @@ class Test_TC_OZCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -27768,7 +28243,11 @@ class Test_TC_OZCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -27780,6 +28259,10 @@ class Test_TC_OZCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -27974,21 +28457,82 @@ class Test_TC_OZCONC_1_1Suite : public TestCommand OzoneConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OzoneConcentrationMeasurement::Id, OzoneConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: Read the global attribute: EventList. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OzoneConcentrationMeasurement::Id, OzoneConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OzoneConcentrationMeasurement::Id, OzoneConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -28229,7 +28773,7 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand { public: Test_TC_PMHCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_PMHCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_PMHCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -28527,6 +29071,10 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -28538,7 +29086,11 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -28550,7 +29102,11 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -28562,6 +29118,10 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -28757,21 +29317,83 @@ class Test_TC_PMHCONC_1_1Suite : public TestCommand Pm1ConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm1ConcentrationMeasurement::Id, Pm1ConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm1ConcentrationMeasurement::Id, Pm1ConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm1ConcentrationMeasurement::Id, Pm1ConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -29012,7 +29634,7 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand { public: Test_TC_PMICONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_PMICONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_PMICONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -29310,6 +29932,10 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -29321,7 +29947,11 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -29333,7 +29963,11 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -29345,6 +29979,10 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -29540,21 +30178,83 @@ class Test_TC_PMICONC_1_1Suite : public TestCommand Pm25ConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm25ConcentrationMeasurement::Id, Pm25ConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm25ConcentrationMeasurement::Id, Pm25ConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7b: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm25ConcentrationMeasurement::Id, Pm25ConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -29796,7 +30496,7 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand { public: Test_TC_PMKCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_PMKCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_PMKCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -30094,6 +30794,10 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30105,7 +30809,11 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30117,7 +30825,11 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30129,6 +30841,10 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -30324,21 +31040,83 @@ class Test_TC_PMKCONC_1_1Suite : public TestCommand Pm10ConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep(27, + "Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm10ConcentrationMeasurement::Id, Pm10ConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm10ConcentrationMeasurement::Id, Pm10ConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Pm10ConcentrationMeasurement::Id, Pm10ConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -30579,7 +31357,7 @@ class Test_TC_PMKCONC_2_1Suite : public TestCommand class Test_TC_RNCONC_1_1Suite : public TestCommand { public: - Test_TC_RNCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_RNCONC_1_1", 30, credsIssuerConfig) + Test_TC_RNCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_RNCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -30877,6 +31655,10 @@ class Test_TC_RNCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30888,7 +31670,11 @@ class Test_TC_RNCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30900,7 +31686,11 @@ class Test_TC_RNCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -30912,6 +31702,10 @@ class Test_TC_RNCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -31106,21 +31900,86 @@ class Test_TC_RNCONC_1_1Suite : public TestCommand RadonConcentrationMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { - LogStep(27, "Step 5: Read the global attribute: EventList"); + LogStep( + 27, + "Step 4l: TH reads the AttributeList attribute from the DUT. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in " + "the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and " + "(0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RadonConcentrationMeasurement::Id, RadonConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RadonConcentrationMeasurement::Id, RadonConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RadonConcentrationMeasurement::Id, RadonConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -31361,7 +32220,7 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand { public: Test_TC_TVOCCONC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_TVOCCONC_1_1", 30, credsIssuerConfig) + TestCommand("Test_TC_TVOCCONC_1_1", 34, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -31659,6 +32518,10 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand } break; case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 28: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -31670,7 +32533,11 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 28: + case 29: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -31682,7 +32549,11 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 29: + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -31694,6 +32565,10 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -31914,24 +32789,88 @@ class Test_TC_TVOCCONC_1_1Suite : public TestCommand chip::NullOptional); } case 27: { - LogStep(27, "Step 5l: Read the global attribute: EventList"); + LogStep(27, + "Step 4b: Read the global attribute: AttributeList. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 28: { + LogStep(28, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), TotalVolatileOrganicCompoundsConcentrationMeasurement::Id, TotalVolatileOrganicCompoundsConcentrationMeasurement::Attributes::EventList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "Step 6: Read the global attribute: AcceptedCommandList"); + case 29: { + LogStep(29, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 30: { + LogStep(30, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), TotalVolatileOrganicCompoundsConcentrationMeasurement::Id, TotalVolatileOrganicCompoundsConcentrationMeasurement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "Step 7: Read the global attribute: GeneratedCommandList"); + case 31: { + LogStep(31, + "Step 6b: Read the global attribute: AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 32: { + LogStep(32, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), TotalVolatileOrganicCompoundsConcentrationMeasurement::Id, TotalVolatileOrganicCompoundsConcentrationMeasurement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 33: { + LogStep(33, + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -32868,25 +33807,23 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("OPCREDS.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("OPCREDS.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -32898,7 +33835,7 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -32908,12 +33845,13 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand } case 6: { LogStep(6, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -32923,7 +33861,6 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand } case 7: { LogStep(7, "Step 6a: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("OPCREDS.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -32935,7 +33872,7 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -32945,7 +33882,6 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand } case 9: { LogStep(9, "Step 7a: TH reads GeneratedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("OPCREDS.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id, OperationalCredentials::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -32956,7 +33892,7 @@ class Test_TC_OPCREDS_1_2Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -33238,73 +34174,71 @@ class Test_TC_BINFO_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("BINFO.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("BINFO.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4b: TH reads optional attribute(ManufacturingDate) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A000b && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4c: TH reads optional attribute(PartNumber) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A000c && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4d: TH reads optional attribute(ProductURL) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A000d && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4e: TH reads optional attribute(ProductLabel) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A000e && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4f: TH reads optional attribute(SerialNumber) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A000f && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4g: TH reads optional attribute(LocalConfigDisabled) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A0010 && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A0010"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 11: { LogStep(11, "Step 4h: TH reads optional attribute(Reachable) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A0011 && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A0011"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } case 12: { LogStep(12, "Step 4i: TH reads optional attribute(UniqueID) in attributeList"); - VerifyOrDo(!ShouldSkip("BINFO.S.A0012 && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -33316,7 +34250,7 @@ class Test_TC_BINFO_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -33326,38 +34260,32 @@ class Test_TC_BINFO_1_1Suite : public TestCommand } case 14: { LogStep(14, "Step 5a: TH1 reads EventList from DUT"); - VerifyOrDo( - !ShouldSkip( - "PICS_EVENT_LIST_ENABLED && BINFO.S.Afffa && !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED"), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 5b: Read BINFO.S.E00(StartUp) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E00 && BINFO.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 5c: Read BINFO.S.E01(ShutDown) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E01 && BINFO.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } case 17: { LogStep(17, "Step 5d: Read BINFO.S.E02(Leave) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E02 && BINFO.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.E02 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } case 18: { LogStep(18, "Step 5e: Read (ReachableChanged) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.A0011 && BINFO.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), BasicInformation::Id, BasicInformation::Attributes::EventList::Id, true, chip::NullOptional); } @@ -33369,7 +34297,7 @@ class Test_TC_BINFO_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -33384,7 +34312,7 @@ class Test_TC_BINFO_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -33399,7 +34327,7 @@ class Test_TC_BINFO_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35145,64 +36073,61 @@ class Test_TC_CNET_1_3Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("CNET.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3a: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 && CNET.S.Afffc"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set"); - VerifyOrDo(!ShouldSkip("CNET.S.F00 && CNET.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set"); - VerifyOrDo(!ShouldSkip("CNET.S.F01 && CNET.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set"); - VerifyOrDo(!ShouldSkip("CNET.S.F02 && CNET.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && CNET.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && CNET.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4b: Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true"); - VerifyOrDo(!ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02 && CNET.S.Afffb"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList"); - VerifyOrDo(!ShouldSkip("CNET.S.A0002 && CNET.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList"); - VerifyOrDo(!ShouldSkip("CNET.S.A0003 && CNET.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -35214,7 +36139,7 @@ class Test_TC_CNET_1_3Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && CNET.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35224,12 +36149,13 @@ class Test_TC_CNET_1_3Suite : public TestCommand } case 12: { LogStep(12, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && CNET.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35241,25 +36167,25 @@ class Test_TC_CNET_1_3Suite : public TestCommand LogStep( 13, "Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)"); - VerifyOrDo(!ShouldSkip("( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("( CNET.S.F00 || CNET.S.F01 )"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)"); - VerifyOrDo(!ShouldSkip("CNET.S.F00 && CNET.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true)"); - VerifyOrDo(!ShouldSkip("CNET.S.F01 && CNET.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true)"); - VerifyOrDo(!ShouldSkip("CNET.S.F02 && CNET.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -35271,7 +36197,7 @@ class Test_TC_CNET_1_3Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && CNET.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35283,7 +36209,7 @@ class Test_TC_CNET_1_3Suite : public TestCommand LogStep(18, "Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or " "CNET.S.F01(TH) is true)"); - VerifyOrDo(!ShouldSkip("( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("( CNET.S.F00 || CNET.S.F01 )"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -35291,7 +36217,7 @@ class Test_TC_CNET_1_3Suite : public TestCommand LogStep( 19, "Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true)"); - VerifyOrDo(!ShouldSkip("CNET.S.F02 && CNET.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id, NetworkCommissioning::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -35302,7 +36228,7 @@ class Test_TC_CNET_1_3Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && CNET.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35357,12 +36283,7 @@ class Test_TC_DESC_1_1Suite : public TestCommand break; case 1: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint16_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("clusterRevision", value, 1U)); - VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u")); - } + shouldContinue = true; break; case 2: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); @@ -35448,8 +36369,13 @@ class Test_TC_DESC_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - return ReadAttribute(kIdentityAlpha, GetEndpoint(0), Descriptor::Id, Descriptor::Attributes::ClusterRevision::Id, true, - chip::NullOptional); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); } case 2: { LogStep(2, "Step 3: Read the global attribute: FeatureMap"); @@ -35486,12 +36412,13 @@ class Test_TC_DESC_1_1Suite : public TestCommand } case 6: { LogStep(6, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35687,25 +36614,23 @@ class Test_TC_DLOG_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("DLOG.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TTH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("DLOG.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TTH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TTH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -35717,7 +36642,7 @@ class Test_TC_DLOG_1_1Suite : public TestCommand "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35727,12 +36652,13 @@ class Test_TC_DLOG_1_1Suite : public TestCommand } case 6: { LogStep(6, - "Step 4b: TTH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35742,7 +36668,6 @@ class Test_TC_DLOG_1_1Suite : public TestCommand } case 7: { LogStep(7, "Step 6a: TTH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("DLOG.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -35754,7 +36679,7 @@ class Test_TC_DLOG_1_1Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -35764,7 +36689,6 @@ class Test_TC_DLOG_1_1Suite : public TestCommand } case 9: { LogStep(9, "Step 7a: TTH reads GeneratedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("DLOG.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), DiagnosticLogs::Id, DiagnosticLogs::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -35775,7 +36699,7 @@ class Test_TC_DLOG_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -36033,50 +36957,48 @@ class Test_TC_DGETH_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("DGETH.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3a: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01 && DGETH.S.Afffc"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 3b: Given DGETH.S.F00 ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("DGETH.S.F00 && DGETH.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 3c: Given DGETH.S.F01 ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("DGETH.S.F01 && DGETH.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4b: TH reads optional attribute(PHYRate) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0000 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4c: TH reads optional attribute(FullDuplex) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0001 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36084,7 +37006,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand LogStep( 9, "Step 4d: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F00(PKTCNT)) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0002 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36092,7 +37014,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand LogStep( 10, "Step 4e: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F00(PKTCNT)) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0003 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36100,7 +37022,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand LogStep( 11, "Step 4f: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0004 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36108,7 +37030,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand LogStep( 12, "Step 4g: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0005 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36116,19 +37038,19 @@ class Test_TC_DGETH_1_1Suite : public TestCommand LogStep( 13, "Step 4h: TH reads optional attribute(PacketRxCount) and Feature dependent(DGETH.S.F01(ERRCNT)) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0006 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 4i: TH reads optional attribute(CarrierDetect) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0007 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 4j: TH reads optional attribute(TimeSinceReset) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGETH.S.A0008 && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGETH.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -36140,7 +37062,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -36150,12 +37072,13 @@ class Test_TC_DGETH_1_1Suite : public TestCommand } case 17: { LogStep(17, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -36165,15 +37088,13 @@ class Test_TC_DGETH_1_1Suite : public TestCommand } case 18: { LogStep(18, "Step 6a: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("( DGETH.S.F00 || DGETH.S.F01 ) && DGETH.S.Afff9"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("( DGETH.S.F00 || DGETH.S.F01 )"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 19: { LogStep(19, "Step 6b: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("DGETH.S.Afff9 && !DGETH.S.F00 && !DGETH.S.F01"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), EthernetNetworkDiagnostics::Id, EthernetNetworkDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -36185,7 +37106,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -36200,7 +37121,7 @@ class Test_TC_DGETH_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37045,31 +37966,29 @@ class Test_TC_FLW_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("FLW.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FlowMeasurement::Id, FlowMeasurement::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip("FLW.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FlowMeasurement::Id, FlowMeasurement::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && FLW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FlowMeasurement::Id, FlowMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && FLW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FlowMeasurement::Id, FlowMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4b: Read the optional attribute(Tolerance) in AttributeList"); - VerifyOrDo(!ShouldSkip("FLW.S.A0003 && FLW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("FLW.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FlowMeasurement::Id, FlowMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -37081,7 +38000,7 @@ class Test_TC_FLW_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37091,12 +38010,13 @@ class Test_TC_FLW_1_1Suite : public TestCommand } case 7: { LogStep(7, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLW.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37112,7 +38032,7 @@ class Test_TC_FLW_1_1Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLW.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37127,7 +38047,7 @@ class Test_TC_FLW_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLW.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37403,25 +38323,23 @@ class Test_TC_FLABEL_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("FLABEL.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FixedLabel::Id, FixedLabel::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("FLABEL.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FixedLabel::Id, FixedLabel::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FixedLabel::Id, FixedLabel::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FixedLabel::Id, FixedLabel::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -37433,7 +38351,7 @@ class Test_TC_FLABEL_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37443,12 +38361,13 @@ class Test_TC_FLABEL_1_1Suite : public TestCommand } case 6: { LogStep(6, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37463,7 +38382,7 @@ class Test_TC_FLABEL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37478,7 +38397,7 @@ class Test_TC_FLABEL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -37611,7 +38530,7 @@ class Test_TC_FLABEL_2_1Suite : public TestCommand class Test_TC_FAN_1_1Suite : public TestCommand { public: - Test_TC_FAN_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_FAN_1_1", 17, credsIssuerConfig) + Test_TC_FAN_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_FAN_1_1", 20, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -37791,6 +38710,10 @@ class Test_TC_FAN_1_1Suite : public TestCommand } break; case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 16: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -37802,7 +38725,11 @@ class Test_TC_FAN_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 16: + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 18: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -37811,214 +38738,266 @@ class Test_TC_FAN_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Step 2a: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt(kIdentityAlpha, value); - } - case 2: { - LogStep(2, "Step 2b: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip(" !FAN.S.F00 && !FAN.S.F01 && !FAN.S.F02 && !FAN.S.F03 && !FAN.S.F04 && !FAN.S.F05 "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 3: { - LogStep(3, "Step 2c: Given FAN.S.F00(Condition) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 4: { - LogStep(4, "Step 2d: Given FAN.S.F01(Warning) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 5: { - LogStep(5, "Step 2e: Given FAN.S.F02(Condition) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 6: { - LogStep(6, "Step 2f: Given FAN.S.F03(Warning) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 7: { - LogStep(7, "Step 2g: Given FAN.S.F04(Warning) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 8: { - LogStep(8, "Step 2h: Given FAN.S.F05(Warning) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("FAN.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, - chip::NullOptional); - } - case 9: { - LogStep(9, "Step 3a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 10: { - LogStep(10, "Step 3a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 11: { - LogStep(11, "Step 3b: Read the feature dependent FAN.S.F00 (SPD) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("FAN.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 12: { - LogStep(12, "Step 3c: Read the feature dependent FAN.S.F02(RCK) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("FAN.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 13: { - LogStep(13, "Step 3d: Read the feature dependent FAN.S.F03(WND) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("FAN.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 14: { - LogStep(14, "Step 3e: Read the feature dependent FAN.S.F05(DIR) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("FAN.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, - chip::NullOptional); - } - case 15: { - LogStep(15, "Step 4: Read the global attribute: AcceptedCommandList"); - VerifyOrDo(!ShouldSkip(" !FAN.S.C00.Rsp "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AcceptedCommandList::Id, - true, chip::NullOptional); - } - case 16: { - LogStep(16, "Step 5: Read the optional command (ResetCondition) in AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("FAN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AcceptedCommandList::Id, - true, chip::NullOptional); - } - } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_FAN_2_1Suite : public TestCommand -{ -public: - Test_TC_FAN_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_FAN_2_1", 5, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_FAN_2_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: + case 19: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::FanControl::FanModeEnum value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 6U)); - } - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::FanControl::FanModeSequenceEnum value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 5U)); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::Nullable value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "Percent", "Percent")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::Percent value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "Percent", "Percent")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); - } - break; + default: + LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); + } + + if (shouldContinue) + { + ContinueOnChipMainThread(CHIP_NO_ERROR); + } + } + + CHIP_ERROR DoTestStep(uint16_t testIndex) override + { + using namespace chip::app::Clusters; + switch (testIndex) + { + case 0: { + LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); + ListFreer listFreer; + chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; + value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; + return WaitForCommissionee(kIdentityAlpha, value); + } + case 1: { + LogStep(1, "Step 2a: Read the global attribute: ClusterRevision"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 2: { + LogStep(2, "Step 2b: Read the global attribute: FeatureMap"); + VerifyOrDo(!ShouldSkip(" !FAN.S.F00 && !FAN.S.F01 && !FAN.S.F02 && !FAN.S.F03 && !FAN.S.F04 && !FAN.S.F05 "), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 3: { + LogStep(3, "Step 2c: Given FAN.S.F00(Condition) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 4: { + LogStep(4, "Step 2d: Given FAN.S.F01(Warning) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 5: { + LogStep(5, "Step 2e: Given FAN.S.F02(Condition) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 6: { + LogStep(6, "Step 2f: Given FAN.S.F03(Warning) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 7: { + LogStep(7, "Step 2g: Given FAN.S.F04(Warning) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 8: { + LogStep(8, "Step 2h: Given FAN.S.F05(Warning) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("FAN.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::FeatureMap::Id, true, + chip::NullOptional); + } + case 9: { + LogStep(9, "Step 3a: Read the global attribute: AttributeList"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 10: { + LogStep(10, "Step 3a: Read the global attribute: AttributeList"); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 11: { + LogStep(11, "Step 3b: Read the feature dependent FAN.S.F00 (SPD) attribute in AttributeList"); + VerifyOrDo(!ShouldSkip("FAN.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 12: { + LogStep(12, "Step 3c: Read the feature dependent FAN.S.F02(RCK) attribute in AttributeList"); + VerifyOrDo(!ShouldSkip("FAN.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 13: { + LogStep(13, "Step 3d: Read the feature dependent FAN.S.F03(WND) attribute in AttributeList"); + VerifyOrDo(!ShouldSkip("FAN.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 14: { + LogStep(14, "Step 3e: Read the feature dependent FAN.S.F05(DIR) attribute in AttributeList"); + VerifyOrDo(!ShouldSkip("FAN.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AttributeList::Id, true, + chip::NullOptional); + } + case 15: { + LogStep(15, + "Step 3f: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 16: { + LogStep(16, "Step 4a: Read the global attribute: AcceptedCommandList"); + VerifyOrDo(!ShouldSkip(" !FAN.S.C00.Rsp "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AcceptedCommandList::Id, + true, chip::NullOptional); + } + case 17: { + LogStep(17, + "Step 4b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 18: { + LogStep(18, "Step 5a: Read the optional command (ResetCondition) in AcceptedCommandList"); + VerifyOrDo(!ShouldSkip("FAN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), FanControl::Id, FanControl::Attributes::AcceptedCommandList::Id, + true, chip::NullOptional); + } + case 19: { + LogStep(19, + "Step 5b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values " + "in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed " + "MEI range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the " + "Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + } + return CHIP_NO_ERROR; + } +}; + +class Test_TC_FAN_2_1Suite : public TestCommand +{ +public: + Test_TC_FAN_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_FAN_2_1", 5, credsIssuerConfig) + { + AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); + AddArgument("cluster", &mCluster); + AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); + AddArgument("timeout", 0, UINT16_MAX, &mTimeout); + } + + ~Test_TC_FAN_2_1Suite() {} + + chip::System::Clock::Timeout GetWaitDuration() const override + { + return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); + } + +private: + chip::Optional mNodeId; + chip::Optional mCluster; + chip::Optional mEndpoint; + chip::Optional mTimeout; + + chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } + + // + // Tests methods + // + + void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override + { + bool shouldContinue = false; + + switch (mTestIndex - 1) + { + case 0: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 1: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::Clusters::FanControl::FanModeEnum value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 6U)); + } + break; + case 2: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::Clusters::FanControl::FanModeSequenceEnum value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 5U)); + } + break; + case 3: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::Nullable value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "Percent", "Percent")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); + } + break; + case 4: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::Percent value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "Percent", "Percent")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); + } + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -39585,61 +40564,59 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("DGGEN.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip("DGGEN.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4b: Read optional attribute(UpTime) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0002 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0003 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4d: Read optional attribute(BootReason) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0004 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0005 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0006 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.A0007 && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -39651,7 +40628,7 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -39661,39 +40638,37 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand } case 12: { LogStep(12, "Step 5a: Read the global attribute: EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 13: { LogStep(13, "Step 5b: Read optional event(HardwareFaultChange) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E00"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 5c: Read optional event(RadioFaultChange) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E01"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 5d: Read optional event(NetworkFaultChange) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E02"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGGEN.S.E02 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 16: { LogStep(16, - "Step 5e: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5e: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -39703,7 +40678,6 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand } case 17: { LogStep(17, "Step 6a: Read the global attribute: AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("DGGEN.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id, GeneralDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -39715,7 +40689,7 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -39730,7 +40704,7 @@ class Test_TC_DGGEN_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -40048,7 +41022,7 @@ class Test_TC_DGGEN_2_1Suite : public TestCommand class Test_TC_GRPKEY_1_1Suite : public TestCommand { public: - Test_TC_GRPKEY_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_GRPKEY_1_1", 13, credsIssuerConfig) + Test_TC_GRPKEY_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_GRPKEY_1_1", 14, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -40168,6 +41142,10 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand shouldContinue = true; break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40179,11 +41157,11 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); } break; - case 10: + case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 11: + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40193,7 +41171,7 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); } break; - case 12: + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; @@ -40272,6 +41250,22 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand } case 8: { LogStep(8, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 9: { + LogStep(9, "Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " "standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the Manufacturer " "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " @@ -40286,13 +41280,13 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); return UserPrompt(kIdentityAlpha, value); } - case 9: { - LogStep(9, "Step 6a: TH reads AcceptedCommandList from DUT"); + case 10: { + LogStep(10, "Step 6a: TH reads AcceptedCommandList from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id, GroupKeyManagement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, + case 11: { + LogStep(11, "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " @@ -40306,13 +41300,13 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); return UserPrompt(kIdentityAlpha, value); } - case 11: { - LogStep(11, "Step 7a: TH reads GeneratedCommandList from DUT"); + case 12: { + LogStep(12, "Step 7a: TH reads GeneratedCommandList from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id, GroupKeyManagement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } - case 12: { - LogStep(12, + case 13: { + LogStep(13, "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " @@ -40334,7 +41328,7 @@ class Test_TC_GRPKEY_1_1Suite : public TestCommand class Test_TC_ICDM_1_1Suite : public TestCommand { public: - Test_TC_ICDM_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_ICDM_1_1", 14, credsIssuerConfig) + Test_TC_ICDM_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_ICDM_1_1", 19, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -40459,6 +41453,10 @@ class Test_TC_ICDM_1_1Suite : public TestCommand } break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40470,7 +41468,23 @@ class Test_TC_ICDM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 10: + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("acceptedCommandList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40480,7 +41494,7 @@ class Test_TC_ICDM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; - case 11: + case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40489,7 +41503,11 @@ class Test_TC_ICDM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; - case 12: + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 16: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40501,7 +41519,7 @@ class Test_TC_ICDM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 13: + case 17: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -40510,6 +41528,10 @@ class Test_TC_ICDM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -40533,30 +41555,30 @@ class Test_TC_ICDM_1_1Suite : public TestCommand return WaitForCommissionee(kIdentityAlpha, value); } case 1: { - LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); + LogStep(1, "Step 2: TH reads ClusterRevision attribute from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { - LogStep(2, "Step 3: Read the global attribute: FeatureMap"); + LogStep(2, "Step 3: TH reads FeatureMap attribute from DUT"); VerifyOrDo(!ShouldSkip("ICDM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { - LogStep(3, "Step 3: Read the global attribute: FeatureMap"); + LogStep(3, "Step 3: TH reads FeatureMap attribute from DUT"); VerifyOrDo(!ShouldSkip(" !ICDM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { - LogStep(4, "Step 4a: Read the global attribute: AttributeList"); + LogStep(4, "Step 4a: TH reads AttributeList attribute from DUT"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { - LogStep(5, "Step 4a: Read the global attribute: AttributeList"); + LogStep(5, "Step 4a: TH reads AttributeList attribute from DUT"); VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::AttributeList::Id, true, chip::NullOptional); @@ -40580,34 +41602,104 @@ class Test_TC_ICDM_1_1Suite : public TestCommand true, chip::NullOptional); } case 9: { - LogStep(9, "Step 5: Read the global attribute: EventList"); + LogStep(9, + "Step 4e: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 5a: Read the global attribute: EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::EventList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Step 6a: Read the global attribute: AcceptedCommandList"); + case 11: { + LogStep(11, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 12: { + LogStep(12, "Step 6a: TH reads AcceptedCommandList attribute from DUT"); + VerifyOrDo(!ShouldSkip(" !ICDM.S.F00 && !ICDM.S.C03.Rsp "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Step 6b: Read the optional command (StayActiveRequest) in AttributeList"); + case 13: { + LogStep(13, "Step 6b: TH reads AcceptedCommandList attribute from DUT if ICDM.S.F00 is true"); + VerifyOrDo(!ShouldSkip("ICDM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, + IcdManagement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); + } + case 14: { + LogStep(14, "Step 6c: Read the optional command (StayActiveRequest) in AttributeList"); VerifyOrDo(!ShouldSkip("ICDM.S.C03.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 12: { - LogStep(12, "Step 7: Read the global attribute: GeneratedCommandList"); + case 15: { + LogStep(15, + "Step 6d: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 16: { + LogStep(16, "Step 7a: TH reads GeneratedCommandList attribute from DUT"); VerifyOrDo(!ShouldSkip(" !ICDM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } - case 13: { - LogStep(13, "Step 7: Read the global attribute: GeneratedCommandList"); + case 17: { + LogStep(17, "Step 7a: TH reads GeneratedCommandList attribute from DUT"); VerifyOrDo(!ShouldSkip("ICDM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), IcdManagement::Id, IcdManagement::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 18: { + LogStep(18, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -40840,7 +41932,6 @@ class Test_TC_I_1_1Suite : public TestCommand VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); VerifyOrReturn(CheckConstraintType("value", "list", "list")); VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); VerifyOrReturn(CheckConstraintContains("value", value, 65530UL)); @@ -40931,13 +42022,13 @@ class Test_TC_I_1_1Suite : public TestCommand chip::NullOptional); } case 3: { - LogStep(3, "Step 4: Read the global attribute: AttributeList"); + LogStep(3, "Step 4: TH reads AttributeList from DUT"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Identify::Id, Identify::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { - LogStep(4, "Step 4: Read the global attribute: AttributeList"); + LogStep(4, "Step 4: TH reads AttributeList from DUT"); VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Identify::Id, Identify::Attributes::AttributeList::Id, true, chip::NullOptional); @@ -40962,7 +42053,7 @@ class Test_TC_I_1_1Suite : public TestCommand LogStep(8, "Step 7: Read EventList attribute from the DUT. For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -41853,7 +42944,7 @@ class Test_TC_ILL_1_1Suite : public TestCommand LogStep(7, "Step 5: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -42461,7 +43552,7 @@ class Test_TC_LVL_1_1Suite : public TestCommand switch (testIndex) { case 0: { - LogStep(0, "Wait for the commissioned device to be retrieved"); + LogStep(0, "Step 0: Wait for the commissioned device to be retrieved"); ListFreer listFreer; chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; @@ -45925,55 +47016,52 @@ class Test_TC_LUNIT_1_2Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afffc && !LUNIT.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !LUNIT.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 3: Given LUNIT.S.F00(TEMP) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afffc && LUNIT.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("LUNIT.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4b: TH reads Feature dependent(LUNIT.S.F00) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afffb && LUNIT.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("LUNIT.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 5: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::EventList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 6: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 7: TH reads GeneratedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("LUNIT.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), UnitLocalization::Id, UnitLocalization::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -46319,55 +47407,51 @@ class Test_TC_LTIME_1_2Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4b: TH reads optional attribute(ActiveCalendarType) in AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afffb && LTIME.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("LTIME.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4c: TH reads optional attribute(SupportedCalendarTypes) in AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afffb && LTIME.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("LTIME.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 5: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && LTIME.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::EventList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 6: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 7: TH reads GeneratedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("LTIME.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeFormatLocalization::Id, TimeFormatLocalization::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -54208,7 +55292,7 @@ class Test_TC_CONTENTLAUNCHER_10_7Suite : public TestCommand class Test_TC_MOD_1_1Suite : public TestCommand { public: - Test_TC_MOD_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_MOD_1_1", 11, credsIssuerConfig) + Test_TC_MOD_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_MOD_1_1", 15, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -54321,6 +55405,10 @@ class Test_TC_MOD_1_1Suite : public TestCommand } break; case 8: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 9: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -54332,7 +55420,11 @@ class Test_TC_MOD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 9: + case 10: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -54341,7 +55433,11 @@ class Test_TC_MOD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 10: + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -54353,6 +55449,10 @@ class Test_TC_MOD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -54422,21 +55522,84 @@ class Test_TC_MOD_1_1Suite : public TestCommand chip::NullOptional); } case 8: { - LogStep(8, "Read the global attribute: EventList"); + LogStep(8, + "Step 4d: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 9: { + LogStep(9, "Step 5a: TH reads from the DUT the EventList attribute"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ModeSelect::Id, ModeSelect::Attributes::EventList::Id, true, chip::NullOptional); } - case 9: { - LogStep(9, "Step 5: Read the global attribute: AcceptedCommandList"); + case 10: { + LogStep(10, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 11: { + LogStep(11, "Step 6a: TH reads AcceptedCommandList attribute from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ModeSelect::Id, ModeSelect::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Step 6: Read the global attribute: GeneratedCommandList"); + case 12: { + LogStep(12, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 13: { + LogStep(13, "Step 7a: TH reads GeneratedCommandList attribute from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ModeSelect::Id, ModeSelect::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 14: { + LogStep(14, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -55267,7 +56430,7 @@ class Test_TC_OCC_2_3Suite : public TestCommand class Test_TC_OO_1_1Suite : public TestCommand { public: - Test_TC_OO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_OO_1_1", 12, credsIssuerConfig) + Test_TC_OO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_OO_1_1", 15, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -55387,6 +56550,10 @@ class Test_TC_OO_1_1Suite : public TestCommand shouldContinue = true; break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -55397,7 +56564,7 @@ class Test_TC_OO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; - case 10: + case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -55408,7 +56575,11 @@ class Test_TC_OO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 66UL)); } break; - case 11: + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -55420,6 +56591,10 @@ class Test_TC_OO_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -55485,8 +56660,12 @@ class Test_TC_OO_1_1Suite : public TestCommand } case 8: { LogStep(8, - "Step 5: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " - "manufacturer specific event IDs."); + "Step 4c: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -55496,21 +56675,68 @@ class Test_TC_OO_1_1Suite : public TestCommand return UserPrompt(kIdentityAlpha, value); } case 9: { - LogStep(9, "Step 6a: Read the global attribute: AcceptedCommandList"); + LogStep(9, + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OnOff::Id, OnOff::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Step 6b: Read the feature dependent(OO.S.F00) commands in AcceptedCommandList"); + case 11: { + LogStep(11, "Step 6b: Read the feature dependent(OO.S.F00) commands in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("OO.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OnOff::Id, OnOff::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Step 7: Read the global attribute: GeneratedCommandList"); + case 12: { + LogStep(12, + "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 13: { + LogStep(13, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OnOff::Id, OnOff::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 14: { + LogStep(14, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -56462,7 +57688,7 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand { public: Test_TC_OPSTATE_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_OPSTATE_1_1", 13, credsIssuerConfig) + TestCommand("Test_TC_OPSTATE_1_1", 18, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -56564,6 +57790,10 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand } break; case 6: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 7: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56572,7 +57802,7 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 7: + case 8: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56581,7 +57811,11 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; - case 8: + case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56591,7 +57825,7 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; - case 9: + case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56600,7 +57834,7 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; - case 10: + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56610,7 +57844,7 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; - case 11: + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56620,7 +57854,23 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; - case 12: + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("generatedCommandList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 16: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -56629,6 +57879,10 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); } break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -56680,48 +57934,116 @@ class Test_TC_OPSTATE_1_1Suite : public TestCommand OperationalState::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { - LogStep(6, "Step 5a: TH reads from the DUT the EventList attribute."); + LogStep(6, + "Step 4c: TH reads AttributeList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 7: { + LogStep(7, "Step 5a: TH reads from the DUT the EventList attribute."); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::EventList::Id, true, chip::NullOptional); } - case 7: { - LogStep(7, "Step 5b: TH reads from the DUT the optional event(OperationCompletion) in EventList."); + case 8: { + LogStep(8, "Step 5b: TH reads from the DUT the optional event(OperationCompletion) in EventList."); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && OPSTATE.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::EventList::Id, true, chip::NullOptional); } - case 8: { - LogStep(8, "Step 6a: Read the optional command(Start) in AcceptedCommandList"); + case 9: { + LogStep(9, + "Step 5c: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 6a: Read the optional command(Start) in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("OPSTATE.S.C02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 9: { - LogStep(9, "Step 6b: Read the optional command(Stop) in AcceptedCommandList"); + case 11: { + LogStep(11, "Step 6b: Read the optional command(Stop) in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("OPSTATE.S.C01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Step 6c: Read the optional command(Pause) in AcceptedCommandList"); + case 12: { + LogStep(12, "Step 6c: Read the optional command(Pause) in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("OPSTATE.S.C00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Step 6d: Read the optional command(Resume) in AcceptedCommandList"); + case 13: { + LogStep(13, "Step 6d: Read the optional command(Resume) in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("OPSTATE.S.C03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 12: { - LogStep(12, "Step 7: Read the global attribute: GeneratedCommandList"); + case 14: { + LogStep(14, + "Step 6e: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 15: { + LogStep(15, "Step 7a: Read the global attribute: GeneratedCommandList"); + VerifyOrDo(!ShouldSkip("!OPSTATE.S.C00 || !OPSTATE.S.C01 || !OPSTATE.S.C02 || !OPSTATE.S.C03"), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, + OperationalState::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); + } + case 16: { + LogStep(16, "Step 7a: Read the global attribute: GeneratedCommandList"); VerifyOrDo(!ShouldSkip("(OPSTATE.S.C00 || OPSTATE.S.C01 || OPSTATE.S.C02 || OPSTATE.S.C03)"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), OperationalState::Id, OperationalState::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 17: { + LogStep(17, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -57098,7 +58420,7 @@ class Test_TC_PS_1_1Suite : public TestCommand LogStep(19, "Step 7e: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -57346,7 +58668,7 @@ class Test_TC_PS_2_1Suite : public TestCommand { chip::app::Clusters::PowerSource::BatCommonDesignationEnum value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum16", "int32u")); + VerifyOrReturn(CheckConstraintType("value", "enum16", "enum16")); VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); VerifyOrReturn(CheckConstraintMaxValue("value", value, 80U)); } @@ -57374,7 +58696,7 @@ class Test_TC_PS_2_1Suite : public TestCommand { chip::app::Clusters::PowerSource::BatApprovedChemistryEnum value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum16", "int32u")); + VerifyOrReturn(CheckConstraintType("value", "enum16", "enum16")); VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); VerifyOrReturn(CheckConstraintMaxValue("value", value, 32U)); } @@ -57867,67 +59189,66 @@ class Test_TC_PRS_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("PRS.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { - LogStep(2, "Step 3a: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip("PRS.S.Afffc && !PRS.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(2, "Step 3: Read the global attribute: FeatureMap"); + VerifyOrDo(!ShouldSkip(" !PRS.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { - LogStep(3, "Step 3b: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PRS.S.F00 && PRS.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(3, "Step 3: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("PRS.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: Read the global mandatory attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4a: Read the global mandatory attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4b: Read the optional attribute(ScaledValue) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0010 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0010"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4c: Read the optional attribute(MinScaledValue) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0011 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0011"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4d: Read the optional attribute(MaxScaledValue) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0012 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4e: Read the optional attribute(Scale) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0014 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0014"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4f: Read the optional attribute(Tolerance) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0003 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } case 11: { LogStep(11, "Step 4g: Read the optional attribute(ScaledTolerance) in AttributeList"); - VerifyOrDo(!ShouldSkip("PRS.S.A0013 && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PRS.S.A0013"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PressureMeasurement::Id, PressureMeasurement::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -57939,7 +59260,7 @@ class Test_TC_PRS_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PRS.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -57949,12 +59270,13 @@ class Test_TC_PRS_1_1Suite : public TestCommand } case 13: { LogStep(13, - "Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PRS.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -57969,7 +59291,7 @@ class Test_TC_PRS_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PRS.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -57984,7 +59306,7 @@ class Test_TC_PRS_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PRS.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -58850,165 +60172,164 @@ class Test_TC_PCC_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision attribute from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3a: TH reads the FeatureMap attribute from the DUT"); - VerifyOrDo(!ShouldSkip(" PCC.S.Afffc && !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 && !PCC.S.F04 && " - "!PCC.S.F05 && !PCC.S.F06 "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo( + !ShouldSkip(" !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 && !PCC.S.F04 && !PCC.S.F05 && !PCC.S.F06 "), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 3b: Given PCC.S.F00(PRSCONST) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F00 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 3c: Given PCC.S.F01(PRSCOMP) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F01 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 3d: Given PCC.S.F02(FLW) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F02 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 3e: Given PCC.S.F03(SPD) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F03 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 3f: Given PCC.S.F04(TEMP) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F04 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 3g: Given PCC.S.F05(AUTO) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F05 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 3h: Given PCC.S.F06(LOCAL) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("PCC.S.F06 && PCC.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.F06"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4a: TH reads the AttributeList attribute from the DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 11: { LogStep(11, "Step 4a: TH reads the AttributeList attribute from the DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 12: { LogStep(12, "Step 4b: TH reads optional attribute(MinConstPressure) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0003 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 13: { LogStep(13, "Step 4c TH reads optional attribute(MaxConstPressure) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0004 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 4d: TH reads optional attribute(MinCompPressure) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0005 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 4e: TH reads optional attribute(MaxCompPressure) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0006 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 4f: TH reads optional attribute(MinConstSpeed) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0007 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 17: { LogStep(17, "Step 4g: TH reads optional attribute(MaxConstSpeed) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0008 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 18: { LogStep(18, "Step 4h: TH reads optional attribute(MinConstFlow) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0009 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 19: { LogStep(19, "Step 4i: TH reads optional attribute(MaxConstFlow) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A000a && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 20: { LogStep(20, "Step 4j: TH reads optional attribute(MinConstTemp) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A000b && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 21: { LogStep(21, "Step 4k: TH reads optional attribute(MaxConstTemp) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A000c && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 22: { LogStep(22, "Step 4l: TH reads optional attribute(PumpStatus) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0010 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0010"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 23: { LogStep(23, "Step 4m: TH reads optional attribute(Speed) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0014 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0014"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 24: { LogStep(24, "Step 4n: TH reads optional attribute(LifetimeRunningHours) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0015 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0015"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 25: { LogStep(25, "Step 4o: TH reads optional attribute(Power) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0016 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0016"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 26: { LogStep(26, "Step 4p: TH reads optional attribute(LifetimeEnergyConsumed) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0017 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0017"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } case 27: { LogStep(27, "Step 4q: TH reads optional attribute(ControlMode) attribute in AttributeList from the DUT"); - VerifyOrDo(!ShouldSkip("PCC.S.A0021 && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PCC.S.A0021"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -59019,7 +60340,7 @@ class Test_TC_PCC_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PCC.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -59029,142 +60350,124 @@ class Test_TC_PCC_1_1Suite : public TestCommand } case 29: { LogStep(29, "Step 5a: TH reads EventList from DUT"); - VerifyOrDo( - !ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.Afffa && !PCC.S.E00 && !PCC.S.E01 && !PCC.S.E02 && !PCC.S.E03 && " - "!PCC.S.E04 && !PCC.S.E05 && !PCC.S.E06 && !PCC.S.E07 && !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && " - "!PCC.S.E0b && !PCC.S.E0c && !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !PCC.S.E00 && !PCC.S.E01 && !PCC.S.E02 && !PCC.S.E03 && !PCC.S.E04 " + "&& !PCC.S.E05 && !PCC.S.E06 && !PCC.S.E07 && !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && " + "!PCC.S.E0b && !PCC.S.E0c && !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 "), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 30: { LogStep(30, "Step 5b: TH reads from the DUT the EventList optional (SupplyVoltageLow)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E00 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 31: { LogStep(31, "Step 5c: TH reads from the DUT the EventList optional (SupplyVoltageHigh)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E01 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 32: { LogStep(32, "Step 5d: TH reads from the DUT the EventList optional (PowerMissingPhase)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E02 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 33: { LogStep(33, "Step 5e: TH reads from the DUT the EventList optional (SystemPressureLow)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E03 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 34: { LogStep(34, "Step 5f: TH reads from the DUT the EventList optional (SystemPressureHigh)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E04 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 35: { LogStep(35, "Step 5g: TH reads from the DUT the EventList optional (DryRunning)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E05 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 36: { LogStep(36, "Step 5h: TH reads from the DUT the EventList optional (MotorTemperatureHigh)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E06 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E06"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 37: { LogStep(37, "Step 5i: TH reads from the DUT the EventList optional (PumpMotorFatalFailure)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E07 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E07"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 38: { LogStep(38, "Step 5j: TH reads from the DUT the EventList optional (ElectronicTemperatureHigh)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E08 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E08"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 39: { LogStep(39, "Step 5k: TH reads from the DUT the EventList optional (PumpBlocked)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E09 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E09"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 40: { LogStep(40, "Step 5l: TH reads from the DUT the EventList optional (SensorFailure)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0a && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 41: { LogStep(41, "Step 5m: TH reads from the DUT the EventList optional (ElectronicNonFatalFailure)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0b && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0b"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 42: { LogStep(42, "Step 5n: TH reads from the DUT the EventList optional (ElectronicFatalFailure)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0c && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0c"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 43: { LogStep(43, "Step 5o: TH reads from the DUT the EventList optional (GeneralFault)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0d && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0d"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 44: { LogStep(44, "Step 5p: TH reads from the DUT the EventList optional (Leakage)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0e && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0e"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 45: { LogStep(45, "Step 5q: TH reads from the DUT the EventList optional (AirDetection)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0f && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0f"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 46: { LogStep(46, "Step 5r: TH reads from the DUT the EventList optional (TurbineOperation)attribute."); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E10 && PCC.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E10"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), PumpConfigurationAndControl::Id, PumpConfigurationAndControl::Attributes::EventList::Id, true, chip::NullOptional); } case 47: { LogStep(47, - "Step 5s: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " - "standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2. The list MAY contain values in the Manufacturer " - "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " - "0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), " - "where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PCC.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5s: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -59179,7 +60482,7 @@ class Test_TC_PCC_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PCC.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -59194,7 +60497,7 @@ class Test_TC_PCC_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PCC.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -60487,7 +61790,7 @@ class Test_TC_PSCFG_1_1Suite : public TestCommand LogStep(7, "Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -60773,7 +62076,7 @@ class Test_TC_RH_1_1Suite : public TestCommand LogStep(8, "Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -65802,6 +67105,10 @@ class Test_TC_SWTCH_1_1Suite : public TestCommand { chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("acceptedCommandList", iter_0, 0)); + } VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; @@ -65901,10 +67208,8 @@ class Test_TC_SWTCH_1_1Suite : public TestCommand } case 11: { LogStep(11, "Step 5a: Read the global attribute: EventList "); - VerifyOrDo( - !ShouldSkip( - "PICS_EVENT_LIST_ENABLED && !SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 "), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Switch::Id, Switch::Attributes::EventList::Id, true, chip::NullOptional); } @@ -65923,28 +67228,28 @@ class Test_TC_SWTCH_1_1Suite : public TestCommand } case 14: { LogStep(14, "Step 5d: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04"), + VerifyOrDo(!ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Switch::Id, Switch::Attributes::EventList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 5e: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && !SWTCH.S.F04"), + VerifyOrDo(!ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && !SWTCH.S.F04 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Switch::Id, Switch::Attributes::EventList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 5f: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) "); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && SWTCH.S.F04"), + VerifyOrDo(!ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && SWTCH.S.F04 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Switch::Id, Switch::Attributes::EventList::Id, true, chip::NullOptional); } case 17: { LogStep(17, "Step 5g: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) "); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && SWTCH.S.F04"), + VerifyOrDo(!ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && SWTCH.S.F04 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Switch::Id, Switch::Attributes::EventList::Id, true, chip::NullOptional); @@ -66084,7 +67389,7 @@ class Test_TC_RVCOPSTATE_1_1Suite : public TestCommand { public: Test_TC_RVCOPSTATE_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCOPSTATE_1_1", 13, credsIssuerConfig) + TestCommand("Test_TC_RVCOPSTATE_1_1", 14, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -66243,6 +67548,18 @@ class Test_TC_RVCOPSTATE_1_1Suite : public TestCommand } break; case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("generatedCommandList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -66339,6 +67656,14 @@ class Test_TC_RVCOPSTATE_1_1Suite : public TestCommand } case 12: { LogStep(12, "Step 7: Read the global attribute: GeneratedCommandList"); + VerifyOrDo( + !ShouldSkip(" !RVCOPSTATE.S.C00.Rsp && !RVCOPSTATE.S.C01.Rsp && !RVCOPSTATE.S.C02.Rsp && !RVCOPSTATE.S.C03.Rsp "), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcOperationalState::Id, + RvcOperationalState::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); + } + case 13: { + LogStep(13, "Step 7: Read the global attribute: GeneratedCommandList"); VerifyOrDo( !ShouldSkip(" RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp || RVCOPSTATE.S.C03.Rsp "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); @@ -66542,7 +67867,7 @@ class Test_TC_TMP_1_1Suite : public TestCommand LogStep(8, "Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -67645,7 +68970,7 @@ class Test_TC_TSTAT_1_1Suite : public TestCommand LogStep(58, "Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -68829,7 +70154,7 @@ class Test_TC_TSTAT_2_1Suite : public TestCommand class Test_TC_TSUIC_1_1Suite : public TestCommand { public: - Test_TC_TSUIC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_TSUIC_1_1", 8, credsIssuerConfig) + Test_TC_TSUIC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_TSUIC_1_1", 11, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -68918,6 +70243,10 @@ class Test_TC_TSUIC_1_1Suite : public TestCommand } break; case 5: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 6: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -68929,7 +70258,11 @@ class Test_TC_TSUIC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 6: + case 7: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 8: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -68941,7 +70274,11 @@ class Test_TC_TSUIC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 7: + case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; @@ -68990,22 +70327,70 @@ class Test_TC_TSUIC_1_1Suite : public TestCommand ThermostatUserInterfaceConfiguration::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { - LogStep(5, "Step 5: Read the global attribute: AcceptedCommandList"); + LogStep(5, + "Step 4b: Read the global attribute: AttributeList. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 6: { + LogStep(6, "Step 5a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ThermostatUserInterfaceConfiguration::Id, ThermostatUserInterfaceConfiguration::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 6: { - LogStep(6, "Step 6: Read the global attribute: GeneratedCommandList"); + case 7: { + LogStep(7, + "Step 5b: Read the global attribute: AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 8: { + LogStep(8, "Step 6a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ThermostatUserInterfaceConfiguration::Id, ThermostatUserInterfaceConfiguration::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } - case 7: { - LogStep(7, + case 9: { + LogStep(9, + "Step 6b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but it can contain " "manufacturer specific event IDs."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -69703,7 +71088,7 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand { public: Test_TC_DGTHREAD_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_DGTHREAD_1_1", 21, credsIssuerConfig) + TestCommand("Test_TC_DGTHREAD_1_1", 24, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -69980,6 +71365,10 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand } break; case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 19: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -69991,7 +71380,7 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 19: + case 20: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -70000,7 +71389,11 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 20: + case 21: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 22: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -70012,6 +71405,10 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 23: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -70120,40 +71517,86 @@ class Test_TC_DGTHREAD_1_1Suite : public TestCommand } case 15: { LogStep(15, "Step 5a: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGTHREAD.S.E00 && !DGTHREAD.S.E01 "), + VerifyOrDo(!ShouldSkip(" !DGTHREAD.S.E00 && !DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 5b: TH reads DGTHREAD.S.E00(ConnectionStatus) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGTHREAD.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 17: { LogStep(17, "Step 5c: TH reads DGTHREAD.S.E01(NetworkFaultChange) event in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 18: { - LogStep(18, "Step 6a: TH reads AcceptedCommandList from DUT"); + LogStep(18, + "Step 5d: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 19: { + LogStep(19, "Step 6a: TH reads AcceptedCommandList from DUT"); VerifyOrDo(!ShouldSkip(" !DGTHREAD.S.F01 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 19: { - LogStep(19, "Step 6b: TH reads AcceptedCommandList from DUT"); + case 20: { + LogStep(20, "Step 6b: TH reads AcceptedCommandList from DUT"); VerifyOrDo(!ShouldSkip("DGTHREAD.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 20: { - LogStep(20, "Step 7: TH reads GeneratedCommandList from DUT"); + case 21: { + LogStep(21, + "Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 22: { + LogStep(22, "Step 7a: TH reads GeneratedCommandList from DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id, ThreadNetworkDiagnostics::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 23: { + LogStep(23, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -71517,7 +72960,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand { public: Test_TC_TIMESYNC_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_TIMESYNC_1_1", 36, credsIssuerConfig) + TestCommand("Test_TC_TIMESYNC_1_1", 40, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -71756,6 +73199,10 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand } break; case 22: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 23: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71763,7 +73210,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; - case 23: + case 24: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71773,7 +73220,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); } break; - case 24: + case 25: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71783,7 +73230,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 2UL)); } break; - case 25: + case 26: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71791,7 +73238,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); } break; - case 26: + case 27: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71799,7 +73246,11 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 4UL)); } break; - case 27: + case 28: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71807,7 +73258,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 28: + case 30: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71816,7 +73267,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); } break; - case 29: + case 31: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71825,7 +73276,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 4UL)); } break; - case 30: + case 32: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71833,7 +73284,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); } break; - case 31: + case 33: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71841,7 +73292,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 5UL)); } break; - case 32: + case 34: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71849,7 +73300,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); } break; - case 33: + case 35: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71857,7 +73308,11 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 1UL)); } break; - case 34: + case 36: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 37: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71865,7 +73320,7 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); } break; - case 35: + case 38: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -71873,6 +73328,10 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintExcludes("value", value, 3UL)); } break; + case 39: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -72021,88 +73480,152 @@ class Test_TC_TIMESYNC_1_1Suite : public TestCommand TimeSynchronization::Attributes::AttributeList::Id, true, chip::NullOptional); } case 22: { - LogStep(22, "TS5: Check for mandatory events in EventList"); + LogStep(22, + "TS4: Check for mandatory attributes in AttributeList. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 23: { + LogStep(23, "TS5: Check for mandatory events in EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::EventList::Id, true, chip::NullOptional); } - case 23: { - LogStep(23, "TS5: Check for TZ feature-based events in EventList"); + case 24: { + LogStep(24, "TS5: Check for TZ feature-based events in EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::EventList::Id, true, chip::NullOptional); } - case 24: { - LogStep(24, "TS5: Check for TZ feature-based events not in EventList"); + case 25: { + LogStep(25, "TS5: Check for TZ feature-based events not in EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::EventList::Id, true, chip::NullOptional); } - case 25: { - LogStep(25, "TS5: Check for TSC feature-based events in EventList"); + case 26: { + LogStep(26, "TS5: Check for TSC feature-based events in EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::EventList::Id, true, chip::NullOptional); } - case 26: { - LogStep(26, "TS5: Check for TSC feature-based events not in EventList"); + case 27: { + LogStep(27, "TS5: Check for TSC feature-based events not in EventList"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !TIMESYNC.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::EventList::Id, true, chip::NullOptional); } - case 27: { - LogStep(27, "TS6: Check for mandatory commands in AcceptedCommandList"); + case 28: { + LogStep(28, + "TS5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 29: { + LogStep(29, "TS6: Check for mandatory commands in AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 28: { - LogStep(28, "TS6: Check for TZ feature-based commands in AcceptedCommandList"); + case 30: { + LogStep(30, "TS6: Check for TZ feature-based commands in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 29: { - LogStep(29, "TS6: Check for TZ feature-based commands in not AcceptedCommandList"); + case 31: { + LogStep(31, "TS6: Check for TZ feature-based commands in not AcceptedCommandList"); VerifyOrDo(!ShouldSkip("!TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 30: { - LogStep(30, "TS6: Check for NTPC feature-based commands in AcceptedCommandList"); + case 32: { + LogStep(32, "TS6: Check for NTPC feature-based commands in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("TIMESYNC.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 31: { - LogStep(31, "TS6: Check for NTPC feature-based commands in not AcceptedCommandList"); + case 33: { + LogStep(33, "TS6: Check for NTPC feature-based commands in not AcceptedCommandList"); VerifyOrDo(!ShouldSkip("!TIMESYNC.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 32: { - LogStep(32, "TS6: Check for TSC feature-based commands in AcceptedCommandList"); + case 34: { + LogStep(34, "TS6: Check for TSC feature-based commands in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("TIMESYNC.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 33: { - LogStep(33, "TS6: Check for TSC feature-based commands in not AcceptedCommandList"); + case 35: { + LogStep(35, "TS6: Check for TSC feature-based commands in not AcceptedCommandList"); VerifyOrDo(!ShouldSkip("!TIMESYNC.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 34: { - LogStep(34, "TS6: Check for TZ feature-based commands in AcceptedCommandList"); + case 36: { + LogStep(36, + "TS6: Check for mandatory commands in AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 37: { + LogStep(37, "TS7: Check for TZ feature-based commands in GeneratedCommandList"); VerifyOrDo(!ShouldSkip("TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } - case 35: { - LogStep(35, "TS6: Check for TZ feature-based commands in not AcceptedCommandList"); + case 38: { + LogStep(38, "TS7: Check for TZ feature-based commands in not GeneratedCommandList"); VerifyOrDo(!ShouldSkip("!TIMESYNC.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), TimeSynchronization::Id, TimeSynchronization::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 39: { + LogStep(39, + "TS7: Check for mandatory commands in GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -72401,25 +73924,23 @@ class Test_TC_ULABEL_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - VerifyOrDo(!ShouldSkip("ULABEL.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), UserLabel::Id, UserLabel::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip("ULABEL.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), UserLabel::Id, UserLabel::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), UserLabel::Id, UserLabel::Attributes::AttributeList::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), UserLabel::Id, UserLabel::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -72431,7 +73952,7 @@ class Test_TC_ULABEL_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -72446,7 +73967,7 @@ class Test_TC_ULABEL_1_1Suite : public TestCommand "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -72461,7 +73982,7 @@ class Test_TC_ULABEL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -72476,7 +73997,7 @@ class Test_TC_ULABEL_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -73286,26 +74807,26 @@ class Test_TC_DGWIFI_1_1Suite : public TestCommand } case 13: { LogStep(13, "Step 7a: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGWIFI.S.E00 && !DGWIFI.S.E01 && !DGWIFI.S.E02 "), + VerifyOrDo(!ShouldSkip(" !DGWIFI.S.E00 && !DGWIFI.S.E01 && !DGWIFI.S.E02 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), WiFiNetworkDiagnostics::Id, WiFiNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 7b: TH reads optional attribute (Disconnection) in EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGWIFI.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), WiFiNetworkDiagnostics::Id, WiFiNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 7c: TH reads optional attribute (AssociationFailure) in EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGWIFI.S.E01 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), WiFiNetworkDiagnostics::Id, WiFiNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 16: { LogStep(16, "Step 7d: TH reads optional attribute (ConnectionStatus) in EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGWIFI.S.E02 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), WiFiNetworkDiagnostics::Id, WiFiNetworkDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } @@ -74040,13 +75561,12 @@ class Test_TC_WNCV_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads from the DUT the (0xFFFD) ClusterRevision attribute"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3a: TH reads from the DUT the (0xFFFC) FeatureMap attribute"); - VerifyOrDo(!ShouldSkip(" WNCV.S.Afffc && !WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && !WNCV.S.F03 && !WNCV.S.F04 "), + VerifyOrDo(!ShouldSkip("!WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && !WNCV.S.F03 && !WNCV.S.F04 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::FeatureMap::Id, true, chip::NullOptional); @@ -74083,45 +75603,43 @@ class Test_TC_WNCV_1_1Suite : public TestCommand } case 8: { LogStep(8, "Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 10: { LogStep(10, "Step 4b: TH reads optional attribute(SafetyStatus) in AttributeList"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afffb && WNCV.S.A001a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.A001a"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 11: { LogStep(11, "Step 4c: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 & WNCV.S.F03) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03 && WNCV.S.Afffb"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 12: { LogStep(12, "Step 4d: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 ) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F00 && WNCV.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 13: { LogStep(13, "Step 4e: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 & WNCV.S.F03) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03 && WNCV.S.Afffb"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } case 14: { LogStep(14, "Step 4f: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 ) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -74133,31 +75651,29 @@ class Test_TC_WNCV_1_1Suite : public TestCommand } case 16: { LogStep(16, "Step 6a: TH reads from the DUT the (0xFFF9) AcceptedCommandList attribute"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 17: { LogStep(17, "Step 6b: TH reads Feature dependent(WNCV.S.F00 & WNCV.S.F02) command in AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afff9 && WNCV.S.F00 && WNCV.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F00 && WNCV.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 18: { LogStep(18, "Step 6c: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F03) command in AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F03"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 19: { LogStep(19, "Step 6d: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F04) command in AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("WNCV.S.F01 && WNCV.S.F04"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 20: { LogStep(20, "Step 7: TH reads from the DUT the (0xFFF8) GeneratedCommandList attribute"); - VerifyOrDo(!ShouldSkip("WNCV.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WindowCovering::Id, WindowCovering::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } @@ -81104,7 +82620,7 @@ class TestCASERecoverySuite : public TestCommand { uint16_t value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("dataModelRevision", value, 1U)); + VerifyOrReturn(CheckValue("dataModelRevision", value, 17U)); } break; case 2: @@ -81127,7 +82643,7 @@ class TestCASERecoverySuite : public TestCommand { uint16_t value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("dataModelRevision", value, 1U)); + VerifyOrReturn(CheckValue("dataModelRevision", value, 17U)); } break; default: @@ -92411,9 +93927,12 @@ class TestDescriptorClusterSuite : public TestCommand { auto iter_0 = value.begin(); VerifyOrReturn(CheckNextListItemDecodes("deviceTypeList", iter_0, 0)); - VerifyOrReturn(CheckValue("deviceTypeList[0].deviceType", iter_0.GetValue().deviceType, 22UL)); + VerifyOrReturn(CheckValue("deviceTypeList[0].deviceType", iter_0.GetValue().deviceType, 17UL)); VerifyOrReturn(CheckValue("deviceTypeList[0].revision", iter_0.GetValue().revision, 1U)); - VerifyOrReturn(CheckNoMoreListItems("deviceTypeList", iter_0, 1)); + VerifyOrReturn(CheckNextListItemDecodes("deviceTypeList", iter_0, 1)); + VerifyOrReturn(CheckValue("deviceTypeList[1].deviceType", iter_0.GetValue().deviceType, 22UL)); + VerifyOrReturn(CheckValue("deviceTypeList[1].revision", iter_0.GetValue().revision, 1U)); + VerifyOrReturn(CheckNoMoreListItems("deviceTypeList", iter_0, 2)); } } break; @@ -100431,56 +101950,54 @@ class Test_TC_DGSW_1_1Suite : public TestCommand } case 1: { LogStep(1, "Step 2: TH reads the ClusterRevision from DUT"); - VerifyOrDo(!ShouldSkip("DGSW.S.Afffd"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { LogStep(2, "Step 3a: TH reads the FeatureMap from DUT"); - VerifyOrDo(!ShouldSkip(" !DGSW.S.F00 && DGSW.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !DGSW.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { LogStep(3, "Step 3b: Given DGSW.S.F00(Watermarks) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("DGSW.S.F00 && DGSW.S.Afffc"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { LogStep(4, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { LogStep(5, "Step 4a: TH reads AttributeList from DUT"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { LogStep(6, "Step 4b: TH reads optional attribute(ThreadMetrics) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGSW.S.A0000 && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, "Step 4c: TH reads optional attribute(CurrentHeapFree) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGSW.S.A0001 && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, "Step 4d: TH reads optional attribute(CurrentHeapUsed) in AttributeList"); - VerifyOrDo(!ShouldSkip("DGSW.S.A0002 && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { LogStep(9, "Step 4e: TH reads Feature dependent attribute(CurrentHeapHighWatermark) in AttributeList"); - VerifyOrDo(!ShouldSkip("( DGSW.S.F00 || DGSW.S.A0003 ) && DGSW.S.Afffb"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("( DGSW.S.F00 || DGSW.S.A0003 )"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -100492,7 +102009,7 @@ class Test_TC_DGSW_1_1Suite : public TestCommand "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afffb"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -100502,26 +102019,25 @@ class Test_TC_DGSW_1_1Suite : public TestCommand } case 11: { LogStep(11, "Step 5a: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DGSW.S.E00 && DGSW.S.Afffa"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.E00 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 12: { LogStep(12, "Step 5b: TH reads EventList from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGSW.S.E00 && DGSW.S.Afffa "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !DGSW.S.E00 && PICS_EVENT_LIST_ENABLED "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::EventList::Id, true, chip::NullOptional); } case 13: { LogStep(13, - "Step 5c: TH reads EventList attribute from DUT. 1.The list MAY contain values in the Manufacturer Extensible " - "Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), " - "these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid range: " - "(0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the " - "allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + "Step 5c: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -100531,13 +102047,13 @@ class Test_TC_DGSW_1_1Suite : public TestCommand } case 14: { LogStep(14, "Step 6a: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip("DGSW.S.F00 && DGSW.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DGSW.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } case 15: { LogStep(15, "Step 6b: TH reads AcceptedCommandList from DUT"); - VerifyOrDo(!ShouldSkip(" !DGSW.S.F00 && DGSW.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip(" !DGSW.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(0), SoftwareDiagnostics::Id, SoftwareDiagnostics::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } @@ -100549,7 +102065,7 @@ class Test_TC_DGSW_1_1Suite : public TestCommand "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afff9"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -100564,7 +102080,7 @@ class Test_TC_DGSW_1_1Suite : public TestCommand "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " "is the allowed MEI range (0x0001 - 0xFFF1)"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afff8"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); @@ -108874,13 +110390,13 @@ class Test_TC_DRLK_1_1Suite : public TestCommand } case 36: { LogStep(36, "Step 5b: TH reads optional event(Door position sensor) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DRLK.S.F05"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DRLK.S.F05 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::EventList::Id, true, chip::NullOptional); } case 37: { LogStep(37, "Step 5c: TH reads optional event(User commands and database) in EventList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && DRLK.S.F08"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + VerifyOrDo(!ShouldSkip("DRLK.S.F08 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::EventList::Id, true, chip::NullOptional); } @@ -108954,10 +110470,10 @@ class Test_TC_DRLK_1_1Suite : public TestCommand } }; -class Test_TC_DRLK_2_2Suite : public TestCommand +class Test_TC_DRLK_2_4Suite : public TestCommand { public: - Test_TC_DRLK_2_2Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_2", 27, credsIssuerConfig) + Test_TC_DRLK_2_4Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_4", 16, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -108965,7 +110481,7 @@ class Test_TC_DRLK_2_2Suite : public TestCommand AddArgument("timeout", 0, UINT16_MAX, &mTimeout); } - ~Test_TC_DRLK_2_2Suite() {} + ~Test_TC_DRLK_2_4Suite() {} chip::System::Clock::Timeout GetWaitDuration() const override { @@ -109055,18 +110571,13 @@ class Test_TC_DRLK_2_2Suite : public TestCommand VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, false)); - } + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); break; case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); break; case 9: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); @@ -109075,71 +110586,26 @@ class Test_TC_DRLK_2_2Suite : public TestCommand VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, true)); - } - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint8_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintMinValue("value", value, 1U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 255U)); - } - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 18: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 19: + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 22: + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { - uint8_t value; + chip::app::DataModel::Nullable value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintMinValue("value", value, 1U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 255U)); + VerifyOrReturn(CheckValueNonNull("lockState", value)); + VerifyOrReturn(CheckValue("lockState.Value()", value.Value(), 1U)); } break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 25: + case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; - case 26: + case 15: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; default: @@ -109165,7 +110631,7 @@ class Test_TC_DRLK_2_2Suite : public TestCommand return WaitForCommissionee(kIdentityAlpha, value); } case 1: { - LogStep(1, "Precondition: Create new user"); + LogStep(1, "Create new user"); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::SetUser::Type value; value.operationType = static_cast(0); @@ -109186,7 +110652,7 @@ class Test_TC_DRLK_2_2Suite : public TestCommand ); } case 2: { - LogStep(2, "Precondition: Read the user back and verify its fields"); + LogStep(2, "Read the user back and verify its fields"); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::GetUser::Type value; value.userIndex = 1U; @@ -109196,7 +110662,7 @@ class Test_TC_DRLK_2_2Suite : public TestCommand ); } case 3: { - LogStep(3, "Precondition: Create new PIN credential and lock/unlock user"); + LogStep(3, "Create new PIN credential and lock/unlock user"); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::SetCredential::Type value; value.operationType = static_cast(0); @@ -109215,7 +110681,7 @@ class Test_TC_DRLK_2_2Suite : public TestCommand ); } case 4: { - LogStep(4, "Precondition: Verify created PIN credential"); + LogStep(4, "Verify created PIN credential"); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::GetCredentialStatus::Type value; @@ -109228,213 +110694,91 @@ class Test_TC_DRLK_2_2Suite : public TestCommand ); } case 5: { - LogStep(5, "Step 1a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(5, "Step 1a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); + VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); + uint32_t value; + value = 10UL; + return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, + chip::NullOptional, chip::NullOptional); } case 6: { - LogStep(6, - "Step 1b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and Verify DUT " - "responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("!DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(6, "Step 1b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); + VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); + uint32_t value; + value = 60UL; + return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, + chip::NullOptional, chip::NullOptional); } case 7: { - LogStep(7, "Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); + LogStep(7, "Step 1c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); + VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + uint32_t value; + value = 10UL; + return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, + chip::NullOptional, chip::NullOptional); } case 8: { - LogStep(8, "Step 3: TH sends Lock Door Command to the DUT without PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(8, "Step 1d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); + VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::LockDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::LockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); + uint32_t value; + value = 60UL; + return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, + chip::NullOptional, chip::NullOptional); } case 9: { - LogStep(9, "Step 4: TH sends Lock Door Command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(9, "Step 2a: TH sends the Unlock with Timeout argument value as 10 seconds"); + VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::LockDoor::Type value; + chip::app::Clusters::DoorLock::Commands::UnlockWithTimeout::Type value; + value.timeout = 10U; value.PINCode.Emplace(); value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::LockDoor::Id, value, + return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockWithTimeout::Id, value, chip::Optional(1000), chip::NullOptional ); } case 10: { - LogStep(10, "Step 5a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 11: { - LogStep(11, - "Step 5b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and Verify DUT " - "responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("!DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 12: { - LogStep(12, "Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); - } - case 13: { - LogStep(13, "Step 7: TH sends Lock Door Command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(10, "Step 2b: TH sends the Unlock with Timeout argument value as 60 seconds"); + VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::LockDoor::Type value; + chip::app::Clusters::DoorLock::Commands::UnlockWithTimeout::Type value; + value.timeout = 60U; value.PINCode.Emplace(); value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::LockDoor::Id, value, + return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockWithTimeout::Id, value, chip::Optional(1000), chip::NullOptional ); } - case 14: { - LogStep(14, "Step 8: TH sends Lock Door Command to the DUT without valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + case 11: { + LogStep(11, "Wait for AutoRelockTime Expires"); + VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::LockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("645321garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::LockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); + chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; + value.ms = 11000UL; + return WaitForMs(kIdentityAlpha, value); } - case 15: { - LogStep(15, "Step 9: TH sends Lock Door Command to the DUT without any argument PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + case 12: { + LogStep(12, "Wait for AutoRelockTime Expires"); + VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::LockDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::LockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); + chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; + value.ms = 70000UL; + return WaitForMs(kIdentityAlpha, value); } - case 16: { - LogStep(16, "Step 10a: H reads the WrongCodeEntryLimit attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, true, + case 13: { + LogStep(13, "Step 2c: TH reads LockState attribute"); + VerifyOrDo(!ShouldSkip("DRLK.S.A0000 && DRLK.S.C03.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::LockState::Id, true, chip::NullOptional); } - case 17: { - LogStep(17, - "Step 10b: TH sends an Unlock Door Command from the DUT with invalid PINCode. Repeat this step " - "PIXIT.DRLK.WrongCodeEntryLimit times and Verify that DUT sends failure response to the TH"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt(kIdentityAlpha, value); - } - case 18: { - LogStep(18, - "Step 10c: TH sends an Unlock Door Command from User1 to the DUT with the valid PINCode and verify the DUT " - "response"); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt(kIdentityAlpha, value); - } - case 19: { - LogStep(19, - "Step 10d: Wait for PIXIT.DRLK.UserCodeTemporaryDisableTime.TH then sends an Unlock Door Command from User1 to " - "the DUT with the valid PINCode."); - VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt(kIdentityAlpha, value); - } - case 20: { - LogStep(20, - "Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and Verify that the " - "DUT sends Success response"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 21: { - LogStep(21, - "Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and verify DUT " - "responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("!DRLK.S.A0030"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 22: { - LogStep(22, "Step 11a: TH reads the UserCodeTemporaryDisableTime attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, true, chip::NullOptional); - } - case 23: { - LogStep(23, - "Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on the DUT and Verify " - "that the DUT sends Success response"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 24: { - LogStep(24, - "Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on the DUT and verify " - "DUT responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("!DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 25: { - LogStep(25, "Clean the created user"); + case 14: { + LogStep(14, "Cleanup the created user"); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::ClearUser::Type value; value.userIndex = 1U; @@ -109443,8 +110787,8 @@ class Test_TC_DRLK_2_2Suite : public TestCommand ); } - case 26: { - LogStep(26, "Cleanup the created credential"); + case 15: { + LogStep(15, "Clean the created credential"); VerifyOrDo(!ShouldSkip("DRLK.S.C26.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); ListFreer listFreer; chip::app::Clusters::DoorLock::Commands::ClearCredential::Type value; @@ -109463,10 +110807,10 @@ class Test_TC_DRLK_2_2Suite : public TestCommand } }; -class Test_TC_DRLK_2_3Suite : public TestCommand +class Test_TC_DRLK_2_5Suite : public TestCommand { public: - Test_TC_DRLK_2_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_3", 39, credsIssuerConfig) + Test_TC_DRLK_2_5Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_5", 12, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -109474,1025 +110818,21 @@ class Test_TC_DRLK_2_3Suite : public TestCommand AddArgument("timeout", 0, UINT16_MAX, &mTimeout); } - ~Test_TC_DRLK_2_3Suite() {} + ~Test_TC_DRLK_2_5Suite() {} - chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(200)); } + chip::System::Clock::Timeout GetWaitDuration() const override + { + return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); + } private: chip::Optional mNodeId; chip::Optional mCluster; chip::Optional mEndpoint; chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetUserResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("userIndex", value.userIndex, 1U)); - VerifyOrReturn(CheckValueNonNull("userName", value.userName)); - VerifyOrReturn(CheckValueAsString("userName.Value()", value.userName.Value(), chip::CharSpan("xxx", 3))); - VerifyOrReturn(CheckValueNonNull("userUniqueID", value.userUniqueID)); - VerifyOrReturn(CheckValue("userUniqueID.Value()", value.userUniqueID.Value(), 6452UL)); - VerifyOrReturn(CheckValueNonNull("userStatus", value.userStatus)); - VerifyOrReturn(CheckValue("userStatus.Value()", value.userStatus.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("userType", value.userType)); - VerifyOrReturn(CheckValue("userType.Value()", value.userType.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentialRule", value.credentialRule)); - VerifyOrReturn(CheckValue("credentialRule.Value()", value.credentialRule.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentials", value.credentials)); - { - auto iter_1 = value.credentials.Value().begin(); - VerifyOrReturn(CheckNoMoreListItems("credentials.Value()", iter_1, 0)); - } - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextUserIndex", value.nextUserIndex)); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::SetCredentialResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("status", value.status, 0U)); - VerifyOrReturn(CheckValueNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValueNonNull("nextCredentialIndex", value.nextCredentialIndex)); - VerifyOrReturn(CheckValue("nextCredentialIndex.Value()", value.nextCredentialIndex.Value(), 2U)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetCredentialStatusResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("credentialExists", value.credentialExists, true)); - VerifyOrReturn(CheckValueNonNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValue("userIndex.Value()", value.userIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextCredentialIndex", value.nextCredentialIndex)); - } - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, false)); - } - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, true)); - } - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 18: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 19: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 22: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint8_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("userCodeTemporaryDisableTime", value, 15U)); - } - break; - case 25: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 26: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 27: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 28: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 29: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 30: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 31: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("autoRelockTime", value, 10UL)); - } - break; - case 32: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("autoRelockTime", value, 60UL)); - } - break; - case 33: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 34: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 35: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 36: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::Nullable value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValueNonNull("lockState", value)); - VerifyOrReturn(CheckValue("lockState.Value()", value.Value(), 1U)); - } - break; - case 37: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 38: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Precondition: Create new user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetUser::Type value; - value.operationType = static_cast(0); - value.userIndex = 1U; - value.userName.SetNonNull(); - value.userName.Value() = chip::Span("xxxgarbage: not in length on purpose", 3); - value.userUniqueID.SetNonNull(); - value.userUniqueID.Value() = 6452UL; - value.userStatus.SetNonNull(); - value.userStatus.Value() = static_cast(1); - value.userType.SetNonNull(); - value.userType.Value() = static_cast(0); - value.credentialRule.SetNonNull(); - value.credentialRule.Value() = static_cast(0); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 2: { - LogStep(2, "Precondition: Read the user back and verify its fields"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetUser::Id, value, - chip::NullOptional - - ); - } - case 3: { - LogStep(3, "Precondition: Create new PIN credential and lock/unlock user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetCredential::Type value; - value.operationType = static_cast(0); - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - value.credentialData = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - value.userIndex.SetNonNull(); - value.userIndex.Value() = 1U; - value.userStatus.SetNull(); - value.userType.SetNull(); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 4: { - LogStep(4, "Precondition: Verify created PIN credential"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetCredentialStatus::Type value; - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetCredentialStatus::Id, value, - chip::NullOptional - - ); - } - case 5: { - LogStep(5, "Step 1a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 6: { - LogStep(6, - "Step 1b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and Verify DUT " - "responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 7: { - LogStep(7, "Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); - } - case 8: { - LogStep(8, "Step 3: TH sends the unlock Door command to the DUT without PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 9: { - LogStep(9, "Step 4: TH sends the unlock Door command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 10: { - LogStep(10, "Step 5a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 11: { - LogStep(11, - "Step 5b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and Verify DUT " - "responds with UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 12: { - LogStep(12, "Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); - } - case 13: { - LogStep(13, "Step 7: TH sends the unlock Door command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 14: { - LogStep(14, "Step 8: TH sends the unlock Door command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("1234568garbage: not in length on purpose"), 7); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 15: { - LogStep(15, "Step 9: TH sends the unlock Door command to the DUT without PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 16: { - LogStep(16, - "Step 10a: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT and Verify that the DUT sends Success " - "response"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0030.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 17: { - LogStep(17, - "Step 10b: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT and verify DUT responds with " - "UNSUPPORTED_WRITE"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0030.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 18: { - LogStep(18, - "Step 11a: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT and Verify that the " - "DUT sends Success response"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 19: { - LogStep(19, - "Step 11b: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT and Verify that the " - "DUT sends Success response"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0031.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 20: { - LogStep(20, "Step 12a: TH sends the unlock Door command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("1234568garbage: not in length on purpose"), 7); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 21: { - LogStep(21, "Step 12b: TH sends the unlock Door command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("1234568garbage: not in length on purpose"), 7); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 22: { - LogStep(22, "Step 12c: TH sends the unlock Door command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("1234568garbage: not in length on purpose"), 7); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 23: { - LogStep(23, "Step 12d: TH sends the unlock Door command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("1234568garbage: not in length on purpose"), 7); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 24: { - LogStep(24, - "Step 13: TH reads the UserCodeTemporaryDisableTime attribute from the DUT and check attribute is triggered"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, true, chip::NullOptional); - } - case 25: { - LogStep(25, "Step 14: TH sends the unlock Door command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 26: { - LogStep(26, "Wait for UserCodeTemporaryDisableTime expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 15000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 27: { - LogStep(27, "Step 15a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 28: { - LogStep(28, "Step 15b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 29: { - LogStep(29, "Step 15c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); - VerifyOrDo(!ShouldSkip(" !DRLK.S.A0023.Write && PICS_SDK_CI_ONLY "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 30: { - LogStep(30, "Step 15d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip(" !DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP "), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 31: { - LogStep(31, "Step 16a: TH reads the AutoRelockTime attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, true, - chip::NullOptional); - } - case 32: { - LogStep(32, "Step 16b: TH reads the AutoRelockTime attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, true, - chip::NullOptional); - } - case 33: { - LogStep(33, - "Step 17: TH sends the unlock Door command to the DUT with valid PINCode and Verify that DUT sends SUCCESS " - "response to the TH"); - VerifyOrDo(!ShouldSkip("DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 34: { - LogStep(34, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 10000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 35: { - LogStep(35, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 60000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 36: { - LogStep(36, "Step 18: TH reads LockState attribute"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0000 && DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::LockState::Id, true, - chip::NullOptional); - } - case 37: { - LogStep(37, "Cleanup the created user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 38: { - LogStep(38, "Clean the created credential"); - VerifyOrDo(!ShouldSkip("DRLK.S.C26.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearCredential::Type value; - value.credential.SetNonNull(); - - value.credential.Value().credentialType = static_cast(1); - value.credential.Value().credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_DRLK_2_4Suite : public TestCommand -{ -public: - Test_TC_DRLK_2_4Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_4", 16, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_DRLK_2_4Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetUserResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("userIndex", value.userIndex, 1U)); - VerifyOrReturn(CheckValueNonNull("userName", value.userName)); - VerifyOrReturn(CheckValueAsString("userName.Value()", value.userName.Value(), chip::CharSpan("xxx", 3))); - VerifyOrReturn(CheckValueNonNull("userUniqueID", value.userUniqueID)); - VerifyOrReturn(CheckValue("userUniqueID.Value()", value.userUniqueID.Value(), 6452UL)); - VerifyOrReturn(CheckValueNonNull("userStatus", value.userStatus)); - VerifyOrReturn(CheckValue("userStatus.Value()", value.userStatus.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("userType", value.userType)); - VerifyOrReturn(CheckValue("userType.Value()", value.userType.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentialRule", value.credentialRule)); - VerifyOrReturn(CheckValue("credentialRule.Value()", value.credentialRule.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentials", value.credentials)); - { - auto iter_1 = value.credentials.Value().begin(); - VerifyOrReturn(CheckNoMoreListItems("credentials.Value()", iter_1, 0)); - } - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextUserIndex", value.nextUserIndex)); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::SetCredentialResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("status", value.status, 0U)); - VerifyOrReturn(CheckValueNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValueNonNull("nextCredentialIndex", value.nextCredentialIndex)); - VerifyOrReturn(CheckValue("nextCredentialIndex.Value()", value.nextCredentialIndex.Value(), 2U)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetCredentialStatusResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("credentialExists", value.credentialExists, true)); - VerifyOrReturn(CheckValueNonNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValue("userIndex.Value()", value.userIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextCredentialIndex", value.nextCredentialIndex)); - } - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::Nullable value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValueNonNull("lockState", value)); - VerifyOrReturn(CheckValue("lockState.Value()", value.Value(), 1U)); - } - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Create new user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetUser::Type value; - value.operationType = static_cast(0); - value.userIndex = 1U; - value.userName.SetNonNull(); - value.userName.Value() = chip::Span("xxxgarbage: not in length on purpose", 3); - value.userUniqueID.SetNonNull(); - value.userUniqueID.Value() = 6452UL; - value.userStatus.SetNonNull(); - value.userStatus.Value() = static_cast(1); - value.userType.SetNonNull(); - value.userType.Value() = static_cast(0); - value.credentialRule.SetNonNull(); - value.credentialRule.Value() = static_cast(0); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 2: { - LogStep(2, "Read the user back and verify its fields"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetUser::Id, value, - chip::NullOptional - - ); - } - case 3: { - LogStep(3, "Create new PIN credential and lock/unlock user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetCredential::Type value; - value.operationType = static_cast(0); - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - value.credentialData = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - value.userIndex.SetNonNull(); - value.userIndex.Value() = 1U; - value.userStatus.SetNull(); - value.userType.SetNull(); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 4: { - LogStep(4, "Verify created PIN credential"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetCredentialStatus::Type value; - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetCredentialStatus::Id, value, - chip::NullOptional - - ); - } - case 5: { - LogStep(5, "Step 1a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 6: { - LogStep(6, "Step 1b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 7: { - LogStep(7, "Step 1c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 8: { - LogStep(8, "Step 1d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 9: { - LogStep(9, "Step 2a: TH sends the Unlock with Timeout argument value as 10 seconds"); - VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockWithTimeout::Type value; - value.timeout = 10U; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockWithTimeout::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 10: { - LogStep(10, "Step 2b: TH sends the Unlock with Timeout argument value as 60 seconds"); - VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnlockWithTimeout::Type value; - value.timeout = 60U; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnlockWithTimeout::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 11: { - LogStep(11, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 11000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 12: { - LogStep(12, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 70000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 13: { - LogStep(13, "Step 2c: TH reads LockState attribute"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0000 && DRLK.S.C03.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::LockState::Id, true, - chip::NullOptional); - } - case 14: { - LogStep(14, "Cleanup the created user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 15: { - LogStep(15, "Clean the created credential"); - VerifyOrDo(!ShouldSkip("DRLK.S.C26.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearCredential::Type value; - value.credential.SetNonNull(); - - value.credential.Value().credentialType = static_cast(1); - value.credential.Value().credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_DRLK_2_5Suite : public TestCommand -{ -public: - Test_TC_DRLK_2_5Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_5", 12, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_DRLK_2_5Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - uint8_t NumberOfWeekDaySchedulesSupportedPerUser; - uint16_t NumberOfTotalUsersSupported; + + uint8_t NumberOfWeekDaySchedulesSupportedPerUser; + uint16_t NumberOfTotalUsersSupported; chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } @@ -112523,670 +112863,6 @@ class Test_TC_DRLK_2_11Suite : public TestCommand } }; -class Test_TC_DRLK_2_12Suite : public TestCommand -{ -public: - Test_TC_DRLK_2_12Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_12", 39, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_DRLK_2_12Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetUserResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("userIndex", value.userIndex, 1U)); - VerifyOrReturn(CheckValueNonNull("userName", value.userName)); - VerifyOrReturn(CheckValueAsString("userName.Value()", value.userName.Value(), chip::CharSpan("xxx", 3))); - VerifyOrReturn(CheckValueNonNull("userUniqueID", value.userUniqueID)); - VerifyOrReturn(CheckValue("userUniqueID.Value()", value.userUniqueID.Value(), 6452UL)); - VerifyOrReturn(CheckValueNonNull("userStatus", value.userStatus)); - VerifyOrReturn(CheckValue("userStatus.Value()", value.userStatus.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("userType", value.userType)); - VerifyOrReturn(CheckValue("userType.Value()", value.userType.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentialRule", value.credentialRule)); - VerifyOrReturn(CheckValue("credentialRule.Value()", value.credentialRule.Value(), 0U)); - VerifyOrReturn(CheckValueNonNull("credentials", value.credentials)); - { - auto iter_1 = value.credentials.Value().begin(); - VerifyOrReturn(CheckNoMoreListItems("credentials.Value()", iter_1, 0)); - } - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextUserIndex", value.nextUserIndex)); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::SetCredentialResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("status", value.status, 0U)); - VerifyOrReturn(CheckValueNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValueNonNull("nextCredentialIndex", value.nextCredentialIndex)); - VerifyOrReturn(CheckValue("nextCredentialIndex.Value()", value.nextCredentialIndex.Value(), 2U)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::DoorLock::Commands::GetCredentialStatusResponse::DecodableType value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("credentialExists", value.credentialExists, true)); - VerifyOrReturn(CheckValueNonNull("userIndex", value.userIndex)); - VerifyOrReturn(CheckValue("userIndex.Value()", value.userIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("creatorFabricIndex", value.creatorFabricIndex)); - VerifyOrReturn(CheckValue("creatorFabricIndex.Value()", value.creatorFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNonNull("lastModifiedFabricIndex", value.lastModifiedFabricIndex)); - VerifyOrReturn(CheckValue("lastModifiedFabricIndex.Value()", value.lastModifiedFabricIndex.Value(), 1U)); - VerifyOrReturn(CheckValueNull("nextCredentialIndex", value.nextCredentialIndex)); - } - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, false)); - } - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("requirePINforRemoteOperation", value, true)); - } - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 18: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 19: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 22: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint8_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("userCodeTemporaryDisableTime", value, 15U)); - } - break; - case 25: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 26: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 27: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 28: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 29: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 30: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 31: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("autoRelockTime", value, 10UL)); - } - break; - case 32: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("autoRelockTime", value, 60UL)); - } - break; - case 33: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 34: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 35: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 36: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::Nullable value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValueNonNull("lockState", value)); - VerifyOrReturn(CheckValue("lockState.Value()", value.Value(), 1U)); - } - break; - case 37: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 38: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Precondition: Create new user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetUser::Type value; - value.operationType = static_cast(0); - value.userIndex = 1U; - value.userName.SetNonNull(); - value.userName.Value() = chip::Span("xxxgarbage: not in length on purpose", 3); - value.userUniqueID.SetNonNull(); - value.userUniqueID.Value() = 6452UL; - value.userStatus.SetNonNull(); - value.userStatus.Value() = static_cast(1); - value.userType.SetNonNull(); - value.userType.Value() = static_cast(0); - value.credentialRule.SetNonNull(); - value.credentialRule.Value() = static_cast(0); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 2: { - LogStep(2, "Precondition: Read the user back and verify its fields"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetUser::Id, value, - chip::NullOptional - - ); - } - case 3: { - LogStep(3, "Precondition: Create new PIN credential and lock/unlock user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::SetCredential::Type value; - value.operationType = static_cast(0); - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - value.credentialData = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - value.userIndex.SetNonNull(); - value.userIndex.Value() = 1U; - value.userStatus.SetNull(); - value.userType.SetNull(); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 4: { - LogStep(4, "Precondition: Verify created PIN credential"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::GetCredentialStatus::Type value; - - value.credential.credentialType = static_cast(1); - value.credential.credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetCredentialStatus::Id, value, - chip::NullOptional - - ); - } - case 5: { - LogStep(5, "Step 1: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 6: { - LogStep(6, "Step 1: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = false; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 7: { - LogStep(7, "Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); - } - case 8: { - LogStep(8, "Step 3: TH sends Ubolt Door Command to the DUT without PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 9: { - LogStep(9, "Step 4: TH sends Ubolt Door Command to the DUT with PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 10: { - LogStep(10, "Step 5: TH writes the RequirePINforRemoteOperation attribute value as true on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 11: { - LogStep(11, "Step 5: TH writes the RequirePINforRemoteOperation attribute value as true on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - bool value; - value = true; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 12: { - LogStep(12, "Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::RequirePINforRemoteOperation::Id, true, chip::NullOptional); - } - case 13: { - LogStep(13, "Step 7: TH sends Ubolt Door Command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 14: { - LogStep(14, "Step 8: TH sends Unbolt Door Command to the DUT with Invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123458garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 15: { - LogStep(15, "Step 9: TH sends Unbolt Door Command to the DUT without PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 16: { - LogStep(16, "Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 17: { - LogStep(17, "Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0030.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 3U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::WrongCodeEntryLimit::Id, - value, chip::NullOptional, chip::NullOptional); - } - case 18: { - LogStep(18, - "Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT and Verify that the " - "DUT sends Success response"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 19: { - LogStep(19, - "Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT and Verify that the " - "DUT sends Success response"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0031.Write"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint8_t value; - value = 15U; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, value, chip::NullOptional, - chip::NullOptional); - } - case 20: { - LogStep(20, "Step 12a: TH sends Unbolt Door Command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123457garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 21: { - LogStep(21, "Step 12b: TH sends Unbolt Door Command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123458garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 22: { - LogStep(22, "Step 12c: TH sends Unbolt Door Command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123459garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 23: { - LogStep(23, "Step 12d: TH sends Unbolt Door Command to the DUT with invalid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123460garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 24: { - LogStep(24, "Step 13: TH reads UserCodedTemporaryDisableTime attribute from DUT"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, - DoorLock::Attributes::UserCodeTemporaryDisableTime::Id, true, chip::NullOptional); - } - case 25: { - LogStep( - 25, - "Step 14: TH sends Unbolt Door Command to the DUT with valid PINCode before UserCodeTemporaryDisableTime expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 26: { - LogStep(26, "Wait for UserCodeTemporaryDisableTime expires"); - VerifyOrDo(!ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 15000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 27: { - LogStep(27, "Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 28: { - LogStep(28, "Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 29: { - LogStep(29, "Step 15: TH writes AutoRelockTime attribute value as 10 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 10UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 30: { - LogStep(30, "Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT"); - VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - uint32_t value; - value = 60UL; - return WriteAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, value, - chip::NullOptional, chip::NullOptional); - } - case 31: { - LogStep(31, "Step 16: TH reads the AutoRelockTime attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, true, - chip::NullOptional); - } - case 32: { - LogStep(32, "Step 16: TH reads the AutoRelockTime attribute from the DUT"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::AutoRelockTime::Id, true, - chip::NullOptional); - } - case 33: { - LogStep(33, "Step 17: TH sends the Unbolt Door command to the DUT with valid PINCode"); - VerifyOrDo(!ShouldSkip("DRLK.S.C27.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type value; - value.PINCode.Emplace(); - value.PINCode.Value() = chip::ByteSpan(chip::Uint8::from_const_char("123456garbage: not in length on purpose"), 6); - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::UnboltDoor::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 34: { - LogStep(34, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 10000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 35: { - LogStep(35, "Wait for AutoRelockTime Expires"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 60000UL; - return WaitForMs(kIdentityAlpha, value); - } - case 36: { - LogStep(36, "Step 18: TH reads LockState attribute"); - VerifyOrDo(!ShouldSkip("DRLK.S.A0000 && DRLK.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Attributes::LockState::Id, true, - chip::NullOptional); - } - case 37: { - LogStep(37, "Cleanup the created user"); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearUser::Type value; - value.userIndex = 1U; - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearUser::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - case 38: { - LogStep(38, "Clean the created credential"); - VerifyOrDo(!ShouldSkip("DRLK.S.C26.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - ListFreer listFreer; - chip::app::Clusters::DoorLock::Commands::ClearCredential::Type value; - value.credential.SetNonNull(); - - value.credential.Value().credentialType = static_cast(1); - value.credential.Value().credentialIndex = 1U; - - return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearCredential::Id, value, - chip::Optional(1000), chip::NullOptional - - ); - } - } - return CHIP_NO_ERROR; - } -}; - class TestGroupMessagingSuite : public TestCommand { public: @@ -115177,7 +114853,7 @@ class Test_TC_ACFREMON_1_1Suite : public TestCommand { public: Test_TC_ACFREMON_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_ACFREMON_1_1", 16, credsIssuerConfig) + TestCommand("Test_TC_ACFREMON_1_1", 20, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -115327,6 +115003,566 @@ class Test_TC_ACFREMON_1_1Suite : public TestCommand } break; case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("eventList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("acceptedCommandList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 16: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); + } + break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + { + auto iter_0 = value.begin(); + VerifyOrReturn(CheckNoMoreListItems("generatedCommandList", iter_0, 0)); + } + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + default: + LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); + } + + if (shouldContinue) + { + ContinueOnChipMainThread(CHIP_NO_ERROR); + } + } + + CHIP_ERROR DoTestStep(uint16_t testIndex) override + { + using namespace chip::app::Clusters; + switch (testIndex) + { + case 0: { + LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); + ListFreer listFreer; + chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; + value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; + return WaitForCommissionee(kIdentityAlpha, value); + } + case 1: { + LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::ClusterRevision::Id, true, chip::NullOptional); + } + case 2: { + LogStep(2, "Step 3a: Read the global attribute: FeatureMap"); + VerifyOrDo(!ShouldSkip("!ACFREMON.S.F00 && !ACFREMON.S.F01 && !ACFREMON.S.F02"), + return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); + } + case 3: { + LogStep(3, "Step 3b: Given ACFREMON.S.F00(Condition) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); + } + case 4: { + LogStep(4, "Step 3c: Given ACFREMON.S.F01(Warning) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); + } + case 5: { + LogStep(5, "Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure featuremap has the correct bit set"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); + } + case 6: { + LogStep(6, "Step 4a: Read the global attribute: AttributeList"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 7: { + LogStep(7, "Step 4a: Read the global attribute: AttributeList"); + VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 8: { + LogStep(8, "Step 4b: Read the feature dependent(ACFREMON.S.F00) attribute in AttributeList"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 9: { + LogStep(9, "Step 4c: Read the optional attribute InPlaceIndicator (ACFREMON.S.A0003) in AttributeList"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 10: { + LogStep(10, "Step 4d: Read the optional attribute LastChangedTime (ACFREMON.S.A0004) in AttributeList"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 11: { + LogStep(11, "Step 4e: Read the optional attribute ReplacementProductList (ACFREMON.S.F02) in AttributeList"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); + } + case 12: { + LogStep(12, + "Step 4f: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any additional values in the " + "standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values " + "in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) " + "and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 13: { + LogStep(13, "Step 5a: TH reads EventList attribute from DUT"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::EventList::Id, true, chip::NullOptional); + } + case 14: { + LogStep(14, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 15: { + LogStep(15, "Step 6a: Read the global attribute: AcceptedCommandList"); + VerifyOrDo(!ShouldSkip("!ACFREMON.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); + } + case 16: { + LogStep(16, "Step 6a: Read the optional command (ResetCondition) in AcceptedCommandList"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); + } + case 17: { + LogStep( + 17, + "Step 6b: TH reads from the DUT the AcceptedCommandList attribute. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list " + "MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 18: { + LogStep(18, "Step 7a: Read the global attribute: GeneratedCommandList"); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); + } + case 19: { + LogStep( + 19, + "Step 7b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list " + "MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + } + return CHIP_NO_ERROR; + } +}; + +class Test_TC_ACFREMON_2_1Suite : public TestCommand +{ +public: + Test_TC_ACFREMON_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : + TestCommand("Test_TC_ACFREMON_2_1", 7, credsIssuerConfig) + { + AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); + AddArgument("cluster", &mCluster); + AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); + AddArgument("timeout", 0, UINT16_MAX, &mTimeout); + } + + ~Test_TC_ACFREMON_2_1Suite() {} + + chip::System::Clock::Timeout GetWaitDuration() const override + { + return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); + } + +private: + chip::Optional mNodeId; + chip::Optional mCluster; + chip::Optional mEndpoint; + chip::Optional mTimeout; + + chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } + + // + // Tests methods + // + + void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override + { + bool shouldContinue = false; + + switch (mTestIndex - 1) + { + case 0: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 1: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::Percent value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "percent", "percent")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); + } + break; + case 2: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::Clusters::ActivatedCarbonFilterMonitoring::DegradationDirectionEnum value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 1U)); + } + break; + case 3: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::Clusters::ActivatedCarbonFilterMonitoring::ChangeIndicationEnum value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); + VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); + VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U)); + } + break; + case 4: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + bool value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean")); + } + break; + case 5: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::Nullable value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "epoch_s", "epoch_s")); + } + break; + case 6: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList< + chip::app::Clusters::ActivatedCarbonFilterMonitoring::Structs::ReplacementProductStruct::DecodableType> + value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + } + break; + default: + LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); + } + + if (shouldContinue) + { + ContinueOnChipMainThread(CHIP_NO_ERROR); + } + } + + CHIP_ERROR DoTestStep(uint16_t testIndex) override + { + using namespace chip::app::Clusters; + switch (testIndex) + { + case 0: { + LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); + ListFreer listFreer; + chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; + value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; + return WaitForCommissionee(kIdentityAlpha, value); + } + case 1: { + LogStep(1, "Step 2: TH reads from the DUT the Condition attribute."); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::Condition::Id, true, chip::NullOptional); + } + case 2: { + LogStep(2, "Step 3: TH reads from the DUT the DegradationDirection attribute.."); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::DegradationDirection::Id, true, chip::NullOptional); + } + case 3: { + LogStep(3, "Step 4: TH reads from the DUT the ChangeIndication attribute."); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::ChangeIndication::Id, true, chip::NullOptional); + } + case 4: { + LogStep(4, "Step 5: TH reads from the DUT the InPlaceIndicator attribute"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::InPlaceIndicator::Id, true, chip::NullOptional); + } + case 5: { + LogStep(5, "Step 6: TH reads from the DUT the LastChangedTime attribute"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::LastChangedTime::Id, true, chip::NullOptional); + } + case 6: { + LogStep(6, "Step 7: TH reads from the DUT the ReplacementProductList attribute"); + VerifyOrDo(!ShouldSkip("ACFREMON.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, + ActivatedCarbonFilterMonitoring::Attributes::ReplacementProductList::Id, true, chip::NullOptional); + } + } + return CHIP_NO_ERROR; + } +}; + +class Test_TC_HEPAFREMON_1_1Suite : public TestCommand +{ +public: + Test_TC_HEPAFREMON_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : + TestCommand("Test_TC_HEPAFREMON_1_1", 20, credsIssuerConfig) + { + AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); + AddArgument("cluster", &mCluster); + AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); + AddArgument("timeout", 0, UINT16_MAX, &mTimeout); + } + + ~Test_TC_HEPAFREMON_1_1Suite() {} + + chip::System::Clock::Timeout GetWaitDuration() const override + { + return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); + } + +private: + chip::Optional mNodeId; + chip::Optional mCluster; + chip::Optional mEndpoint; + chip::Optional mTimeout; + + chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } + + // + // Tests methods + // + + void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override + { + bool shouldContinue = false; + + switch (mTestIndex - 1) + { + case 0: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 1: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + uint16_t value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckValue("clusterRevision", value, 1U)); + VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u")); + } + break; + case 2: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + uint32_t value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckValue("featureMap", value, 0UL)); + VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); + } + break; + case 3: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + uint32_t value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); + VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 1UL)); + } + break; + case 4: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + uint32_t value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); + VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 2UL)); + } + break; + case 5: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + uint32_t value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); + VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 3UL)); + } + break; + case 6: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65530UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); + } + break; + case 7: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); + } + break; + case 8: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); + VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); + } + break; + case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); + } + break; + case 10: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); + } + break; + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + { + chip::app::DataModel::DecodableList value; + VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); + VerifyOrReturn(CheckConstraintType("value", "list", "list")); + VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); + } + break; + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -115338,484 +115574,23 @@ class Test_TC_ACFREMON_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - } - break; case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); - } + shouldContinue = true; break; case 15: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - { - auto iter_0 = value.begin(); - VerifyOrReturn(CheckNoMoreListItems("generatedCommandList", iter_0, 0)); - } VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Step 2: Read the global attribute: ClusterRevision"); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::ClusterRevision::Id, true, chip::NullOptional); - } - case 2: { - LogStep(2, "Step 3a: Read the global attribute: FeatureMap"); - VerifyOrDo(!ShouldSkip("!ACFREMON.S.F00 && !ACFREMON.S.F01 && !ACFREMON.S.F02"), - return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); - } - case 3: { - LogStep(3, "Step 3b: Given ACFREMON.S.F00(Condition) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); - } - case 4: { - LogStep(4, "Step 3c: Given ACFREMON.S.F01(Warning) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); - } - case 5: { - LogStep(5, "Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure featuremap has the correct bit set"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::FeatureMap::Id, true, chip::NullOptional); - } - case 6: { - LogStep(6, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 7: { - LogStep(7, "Step 4a: Read the global attribute: AttributeList"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 8: { - LogStep(8, "Step 4b: Read the feature dependent(ACFREMON.S.F00) attribute in AttributeList"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 9: { - LogStep(9, "Step 4c: Read the optional attribute InPlaceIndicator (ACFREMON.S.A0003) in AttributeList"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 10: { - LogStep(10, "Step 4d: Read the optional attribute LastChangedTime (ACFREMON.S.A0004) in AttributeList"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 11: { - LogStep(11, "Step 4e: Read the optional attribute ReplacementProductList (ACFREMON.S.F02) in AttributeList"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); - } - case 12: { - LogStep(12, "Step 5: TH reads EventList attribute from DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::EventList::Id, true, chip::NullOptional); - } - case 13: { - LogStep(13, "Step 6a: Read the global attribute: AcceptedCommandList"); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); - } - case 14: { - LogStep(14, "Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); - } - case 15: { - LogStep(15, "Step 7: Read the global attribute: GeneratedCommandList"); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); - } - } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_ACFREMON_2_1Suite : public TestCommand -{ -public: - Test_TC_ACFREMON_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_ACFREMON_2_1", 7, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_ACFREMON_2_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - shouldContinue = true; - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::Percent value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "percent", "percent")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 100U)); - } - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::ActivatedCarbonFilterMonitoring::DegradationDirectionEnum value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 1U)); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::Clusters::ActivatedCarbonFilterMonitoring::ChangeIndicationEnum value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8")); - VerifyOrReturn(CheckConstraintMinValue("value", value, 0U)); - VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - bool value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean")); - } - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::Nullable value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "epoch_s", "epoch_s")); - } - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList< - chip::app::Clusters::ActivatedCarbonFilterMonitoring::Structs::ReplacementProductStruct::DecodableType> - value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - } - break; - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - { - case 0: { - LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); - ListFreer listFreer; - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee(kIdentityAlpha, value); - } - case 1: { - LogStep(1, "Step 2: TH reads from the DUT the Condition attribute."); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::Condition::Id, true, chip::NullOptional); - } - case 2: { - LogStep(2, "Step 3: TH reads from the DUT the DegradationDirection attribute.."); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::DegradationDirection::Id, true, chip::NullOptional); - } - case 3: { - LogStep(3, "Step 4: TH reads from the DUT the ChangeIndication attribute."); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::ChangeIndication::Id, true, chip::NullOptional); - } - case 4: { - LogStep(4, "Step 5: TH reads from the DUT the InPlaceIndicator attribute"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::InPlaceIndicator::Id, true, chip::NullOptional); - } - case 5: { - LogStep(5, "Step 6: TH reads from the DUT the LastChangedTime attribute"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::LastChangedTime::Id, true, chip::NullOptional); - } - case 6: { - LogStep(6, "Step 7: TH reads from the DUT the ReplacementProductList attribute"); - VerifyOrDo(!ShouldSkip("ACFREMON.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); - return ReadAttribute(kIdentityAlpha, GetEndpoint(1), ActivatedCarbonFilterMonitoring::Id, - ActivatedCarbonFilterMonitoring::Attributes::ReplacementProductList::Id, true, chip::NullOptional); - } - } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_HEPAFREMON_1_1Suite : public TestCommand -{ -public: - Test_TC_HEPAFREMON_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_HEPAFREMON_1_1", 16, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_HEPAFREMON_1_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - case 0: + case 16: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); shouldContinue = true; break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint16_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("clusterRevision", value, 1U)); - VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u")); - } - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckValue("featureMap", value, 0UL)); - VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); - } - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); - VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 1UL)); - } - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); - VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 2UL)); - } - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - uint32_t value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32")); - VerifyOrReturn(CheckConstraintHasMasksSet("value", value, 3UL)); - } - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65530UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); - } - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65528UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65529UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65531UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65532UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 65533UL)); - } - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 1UL)); - VerifyOrReturn(CheckConstraintContains("value", value, 2UL)); - } - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 3UL)); - } - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 4UL)); - } - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - VerifyOrReturn(CheckConstraintContains("value", value, 5UL)); - } - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - { - auto iter_0 = value.begin(); - VerifyOrReturn(CheckNoMoreListItems("eventList", iter_0, 0)); - } - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - } - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - { - chip::app::DataModel::DecodableList value; - VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value))); - VerifyOrReturn(CheckConstraintType("value", "list", "list")); - } - break; - case 14: + case 17: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -115824,7 +115599,7 @@ class Test_TC_HEPAFREMON_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintContains("value", value, 0UL)); } break; - case 15: + case 18: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -115836,6 +115611,10 @@ class Test_TC_HEPAFREMON_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -115925,27 +115704,89 @@ class Test_TC_HEPAFREMON_1_1Suite : public TestCommand HepaFilterMonitoring::Attributes::AttributeList::Id, true, chip::NullOptional); } case 12: { - LogStep(12, "Step 5: TH reads EventList attribute from DUT"); + LogStep(12, + "Step 4f: TH reads from the DUT the AttributeList attribute. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.TThe list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 13: { + LogStep(13, "Step 5a: TH reads EventList attribute from DUT"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), HepaFilterMonitoring::Id, HepaFilterMonitoring::Attributes::EventList::Id, true, chip::NullOptional); } - case 13: { - LogStep(13, "Step 6a: Read the global attribute: AcceptedCommandList"); + case 14: { + LogStep(14, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 15: { + LogStep(15, "Step 6a: Read the global attribute: AcceptedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), HepaFilterMonitoring::Id, HepaFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 14: { - LogStep(14, "Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList"); + case 16: { + LogStep(16, + "Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 17: { + LogStep(17, "Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList"); VerifyOrDo(!ShouldSkip("HEPAFREMON.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), HepaFilterMonitoring::Id, HepaFilterMonitoring::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 15: { - LogStep(15, "Step 7: Read the global attribute: GeneratedCommandList"); + case 18: { + LogStep(18, "Step 7a: Read the global attribute: GeneratedCommandList"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), HepaFilterMonitoring::Id, HepaFilterMonitoring::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 19: { + LogStep(19, + "Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in the Manufacturer " + "Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or invalid " + "range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } } return CHIP_NO_ERROR; } @@ -119703,6 +119544,61 @@ class Test_TC_DA_1_6Suite : public TestCommand } }; +class Test_TC_DA_1_8Suite : public TestCommand +{ +public: + Test_TC_DA_1_8Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DA_1_8", 0, credsIssuerConfig) + { + AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); + AddArgument("cluster", &mCluster); + AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); + AddArgument("timeout", 0, UINT16_MAX, &mTimeout); + } + + ~Test_TC_DA_1_8Suite() {} + + chip::System::Clock::Timeout GetWaitDuration() const override + { + return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); + } + +private: + chip::Optional mNodeId; + chip::Optional mCluster; + chip::Optional mEndpoint; + chip::Optional mTimeout; + + chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } + + // + // Tests methods + // + + void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override + { + bool shouldContinue = false; + + switch (mTestIndex - 1) + { + default: + LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); + } + + if (shouldContinue) + { + ContinueOnChipMainThread(CHIP_NO_ERROR); + } + } + + CHIP_ERROR DoTestStep(uint16_t testIndex) override + { + using namespace chip::app::Clusters; + switch (testIndex) + {} + return CHIP_NO_ERROR; + } +}; + class Test_TC_BINFO_3_1Suite : public TestCommand { public: @@ -139848,7 +139744,7 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand { public: Test_TC_RVCCLEANM_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCCLEANM_1_1", 12, credsIssuerConfig) + TestCommand("Test_TC_RVCCLEANM_1_1", 16, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -139971,6 +139867,10 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand } break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -139982,7 +139882,11 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 10: + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -139996,7 +139900,11 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 11: + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -140010,6 +139918,10 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -140038,13 +139950,13 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand true, chip::NullOptional); } case 2: { - LogStep(2, "TH reads the FeatureMap attribute from the DUT"); + LogStep(2, "Step 3: TH reads the FeatureMap attribute from the DUT"); VerifyOrDo(!ShouldSkip(" !RVCCLEANM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { - LogStep(3, "Given RVCCLEANM.S.F00(DEPONOFF) ensure featuremap has the correct bit set"); + LogStep(3, "Step 3: Given RVCCLEANM.S.F00(DEPONOFF) ensure featuremap has the correct bit set"); VerifyOrDo(!ShouldSkip("RVCCLEANM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::FeatureMap::Id, true, chip::NullOptional); @@ -140062,158 +139974,113 @@ class Test_TC_RVCCLEANM_1_1Suite : public TestCommand true, chip::NullOptional); } case 6: { - LogStep(6, "TH reads the optional attribute(StartUpMode) in AttributeList from the DUT"); + LogStep(6, "Step 4b: TH reads the optional attribute(StartUpMode) in AttributeList from the DUT"); VerifyOrDo(!ShouldSkip("RVCCLEANM.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, - "Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional attribute(OnMode) is in AttributeList " - "from the DUT"); + "Step 4c: Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional attribute(OnMode) is in " + "AttributeList from the DUT"); VerifyOrDo(!ShouldSkip("RVCCLEANM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, - "Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional attribute(OnMode) is not in AttributeList " - "from the DUT"); + "Step 4c: Read the Feature dependent(RVCCLEANM.S.F00 - DEPONOFF) and optional attribute(OnMode) is not in " + "AttributeList from the DUT"); VerifyOrDo(!ShouldSkip(" !RVCCLEANM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { - LogStep(9, "Read the global attribute: EventList from the DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && RVCCLEANM.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep( + 9, + "Step 4d: TH reads the AttributeList attribute from the DUT. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in " + "the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and " + "(0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 5a: Read the global attribute: EventList from the DUT"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::EventList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Read the global attribute AcceptedCommandList. Check if it contains id 0x0 (ChangeToMode)"); + case 11: { + LogStep( + 11, + "Step 5b: Read the global attribute: EventList from the DUT. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY contain " + "values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the " + "allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in " + "the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and " + "(0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 12: { + LogStep(12, "Step 6a: Read the global attribute AcceptedCommandList. Check if it contains id 0x0 (ChangeToMode)"); VerifyOrDo(!ShouldSkip("RVCCLEANM.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Read the global attribute: GeneratedCommandList. Check if it contains id 0x1 (ChangeToModeResponse)"); + case 13: { + LogStep(13, + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 14: { + LogStep(14, + "Step 7a: Read the global attribute: GeneratedCommandList. Check if it contains id 0x1 (ChangeToModeResponse)"); VerifyOrDo(!ShouldSkip("RVCCLEANM.S.C01.Tx"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcCleanMode::Id, RvcCleanMode::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 15: { + LogStep(15, + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_RVCCLEANM_1_2Suite : public TestCommand -{ -public: - Test_TC_RVCCLEANM_1_2Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCCLEANM_1_2", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCCLEANM_1_2Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - -class Test_TC_RVCCLEANM_2_1Suite : public TestCommand -{ -public: - Test_TC_RVCCLEANM_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCCLEANM_2_1", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCCLEANM_2_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} return CHIP_NO_ERROR; } }; @@ -140274,62 +140141,6 @@ class Test_TC_RVCCLEANM_3_1Suite : public TestCommand } }; -class Test_TC_RVCCLEANM_3_2Suite : public TestCommand -{ -public: - Test_TC_RVCCLEANM_3_2Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCCLEANM_3_2", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCCLEANM_3_2Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - class Test_TC_RVCCLEANM_3_3Suite : public TestCommand { public: @@ -140386,62 +140197,6 @@ class Test_TC_RVCCLEANM_3_3Suite : public TestCommand } }; -class Test_TC_RVCOPSTATE_2_1Suite : public TestCommand -{ -public: - Test_TC_RVCOPSTATE_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCOPSTATE_2_1", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCOPSTATE_2_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - class Test_TC_RVCOPSTATE_2_2Suite : public TestCommand { public: @@ -140498,67 +140253,11 @@ class Test_TC_RVCOPSTATE_2_2Suite : public TestCommand } }; -class Test_TC_RVCOPSTATE_2_3Suite : public TestCommand -{ -public: - Test_TC_RVCOPSTATE_2_3Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCOPSTATE_2_3", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCOPSTATE_2_3Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - class Test_TC_RVCRUNM_1_1Suite : public TestCommand { public: Test_TC_RVCRUNM_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCRUNM_1_1", 12, credsIssuerConfig) + TestCommand("Test_TC_RVCRUNM_1_1", 16, credsIssuerConfig) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); AddArgument("cluster", &mCluster); @@ -140681,6 +140380,10 @@ class Test_TC_RVCRUNM_1_1Suite : public TestCommand } break; case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -140692,7 +140395,11 @@ class Test_TC_RVCRUNM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 10: + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -140706,7 +140413,11 @@ class Test_TC_RVCRUNM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; - case 11: + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; + case 14: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); { chip::app::DataModel::DecodableList value; @@ -140720,6 +140431,10 @@ class Test_TC_RVCRUNM_1_1Suite : public TestCommand VerifyOrReturn(CheckConstraintType("value", "list", "list")); } break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + shouldContinue = true; + break; default: LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); } @@ -140736,194 +140451,147 @@ class Test_TC_RVCRUNM_1_1Suite : public TestCommand switch (testIndex) { case 0: { - LogStep(0, "Wait for the commissioned device to be retrieved"); + LogStep(0, "Step 1: Wait for the commissioned device to be retrieved"); ListFreer listFreer; chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; return WaitForCommissionee(kIdentityAlpha, value); } case 1: { - LogStep(1, "TH reads the ClusterRevision attribute from the DUT"); + LogStep(1, "Step 2: TH reads the ClusterRevision attribute from the DUT"); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::ClusterRevision::Id, true, chip::NullOptional); } case 2: { - LogStep(2, "TH reads the FeatureMap attribute from the DUT"); + LogStep(2, "Step 3a: TH reads the FeatureMap attribute from the DUT"); VerifyOrDo(!ShouldSkip(" !RVCRUNM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 3: { - LogStep(3, "Given RVCRUNM.S.F00(DEPONOFF) ensure featuremap has the correct bit set"); + LogStep(3, "Step 3b: Given RVCRUNM.S.F00(DEPONOFF) ensure featuremap has the correct bit set"); VerifyOrDo(!ShouldSkip("RVCRUNM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::FeatureMap::Id, true, chip::NullOptional); } case 4: { - LogStep(4, "TH reads the AttributeList attribute from the DUT"); + LogStep(4, "Step 4a: TH reads the AttributeList attribute from the DUT"); VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { - LogStep(5, "TH reads the AttributeList attribute from the DUT"); + LogStep(5, "Step 4a: TH reads the AttributeList attribute from the DUT"); VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { - LogStep(6, "TH reads the optional attribute(StartUpMode) in AttributeList from the DUT"); + LogStep(6, "Step 4b: TH reads the optional attribute(StartUpMode) in AttributeList from the DUT"); VerifyOrDo(!ShouldSkip("RVCRUNM.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { LogStep(7, - "Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional attribute(OnMode) is in AttributeList from " - "the DUT"); + "Step 4c: Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional attribute(OnMode) is in " + "AttributeList from the DUT"); VerifyOrDo(!ShouldSkip("RVCRUNM.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 8: { LogStep(8, - "Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional attribute(OnMode) is not in AttributeList " - "from the DUT"); + "Step 4d: Read the Feature dependent(RVCRUNM.S.F00 - DEPONOFF) and optional attribute(OnMode) is not in " + "AttributeList from the DUT"); VerifyOrDo(!ShouldSkip(" !RVCRUNM.S.F00 "), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AttributeList::Id, true, chip::NullOptional); } case 9: { - LogStep(9, "Read the global attribute: EventList from the DUT"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && RVCRUNM.S.Afffa"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(9, + "Step 4e: Check for mandatory attributes in AttributeList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2.The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 10: { + LogStep(10, "Step 5a: Read the global attribute: EventList from the DUT"); + VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::EventList::Id, true, chip::NullOptional); } - case 10: { - LogStep(10, "Read the global attribute AcceptedCommandList. Check if it contains id 0x0 (ChangeToMode)"); + case 11: { + LogStep(11, + "Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any additional values in " + "the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 12: { + LogStep(12, "Step 6a: Read the global attribute AcceptedCommandList. Check if it contains id 0x0 (ChangeToMode)"); VerifyOrDo(!ShouldSkip("RVCRUNM.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::AcceptedCommandList::Id, true, chip::NullOptional); } - case 11: { - LogStep(11, "Read the global attribute: GeneratedCommandList. Check if it contains id 0x1 (ChangeToModeResponse)"); + case 13: { + LogStep(13, + "Step 6b: Read the global attribute AcceptedCommandList. 1. The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); + } + case 14: { + LogStep(14, + "Step 7a: Read the global attribute: GeneratedCommandList. Check if it contains id 0x1 (ChangeToModeResponse)"); VerifyOrDo(!ShouldSkip("RVCRUNM.S.C01.Tx"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), RvcRunMode::Id, RvcRunMode::Attributes::GeneratedCommandList::Id, true, chip::NullOptional); } + case 15: { + LogStep(15, + "Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any additional values " + "in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"); + VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + ListFreer listFreer; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt(kIdentityAlpha, value); } - return CHIP_NO_ERROR; - } -}; - -class Test_TC_RVCRUNM_1_2Suite : public TestCommand -{ -public: - Test_TC_RVCRUNM_1_2Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCRUNM_1_2", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCRUNM_1_2Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - -class Test_TC_RVCRUNM_2_1Suite : public TestCommand -{ -public: - Test_TC_RVCRUNM_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCRUNM_2_1", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCRUNM_2_1Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} return CHIP_NO_ERROR; } }; @@ -140984,62 +140652,6 @@ class Test_TC_RVCRUNM_3_1Suite : public TestCommand } }; -class Test_TC_RVCRUNM_3_2Suite : public TestCommand -{ -public: - Test_TC_RVCRUNM_3_2Suite(CredentialIssuerCommands * credsIssuerConfig) : - TestCommand("Test_TC_RVCRUNM_3_2", 0, credsIssuerConfig) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - - ~Test_TC_RVCRUNM_3_2Suite() {} - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; } - - // - // Tests methods - // - - void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override - { - bool shouldContinue = false; - - switch (mTestIndex - 1) - { - default: - LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT)); - } - - if (shouldContinue) - { - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - } - - CHIP_ERROR DoTestStep(uint16_t testIndex) override - { - using namespace chip::app::Clusters; - switch (testIndex) - {} - return CHIP_NO_ERROR; - } -}; - class Test_TC_RVCRUNM_3_3Suite : public TestCommand { public: @@ -142818,26 +142430,26 @@ class Test_TC_S_1_1Suite : public TestCommand chip::NullOptional); } case 4: { - LogStep(4, "Step 4a: Read AttributeList (global attribute 65531)"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && S.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(4, "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is true"); + VerifyOrDo(!ShouldSkip("S.S.A0005 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Scenes::Id, Scenes::Attributes::AttributeList::Id, true, chip::NullOptional); } case 5: { - LogStep(5, "Step 4a: Read AttributeList (global attribute 65531)"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && S.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(5, "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is true"); + VerifyOrDo(!ShouldSkip("S.S.A0005 && !PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Scenes::Id, Scenes::Attributes::AttributeList::Id, true, chip::NullOptional); } case 6: { - LogStep(6, "Step 4b: Read AttributeList (global attribute 65531)"); - VerifyOrDo(!ShouldSkip("PICS_EVENT_LIST_ENABLED && (!S.S.A0005)"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(6, "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is false"); + VerifyOrDo(!ShouldSkip(" !S.S.A0005 && PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Scenes::Id, Scenes::Attributes::AttributeList::Id, true, chip::NullOptional); } case 7: { - LogStep(7, "Step 4b: Read AttributeList (global attribute 65531)"); - VerifyOrDo(!ShouldSkip("!PICS_EVENT_LIST_ENABLED && (!S.S.A0005)"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); + LogStep(7, "Step 4: Read AttributeList (global attribute 65531) if S.S.A0005 is false"); + VerifyOrDo(!ShouldSkip(" !S.S.A0005 && !PICS_EVENT_LIST_ENABLED"), return ContinueOnChipMainThread(CHIP_NO_ERROR)); return ReadAttribute(kIdentityAlpha, GetEndpoint(1), Scenes::Id, Scenes::Attributes::AttributeList::Id, true, chip::NullOptional); } @@ -143884,15 +143496,12 @@ void registerCommandsTests(Commands & commands, CredentialIssuerCommands * creds make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), @@ -143962,6 +143571,7 @@ void registerCommandsTests(Commands & commands, CredentialIssuerCommands * creds make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), + make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), @@ -144157,19 +143767,11 @@ void registerCommandsTests(Commands & commands, CredentialIssuerCommands * creds make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), - make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), make_unique(credsIssuerConfig), diff --git a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h index bae08b8fa26891..03e4ef2a816c23 100644 --- a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h +++ b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h @@ -279,15 +279,12 @@ class TestList : public Command { printf("DL_UsersAndCredentials\n"); printf("DL_Schedules\n"); printf("Test_TC_DRLK_1_1\n"); - printf("Test_TC_DRLK_2_2\n"); - printf("Test_TC_DRLK_2_3\n"); printf("Test_TC_DRLK_2_4\n"); printf("Test_TC_DRLK_2_5\n"); printf("Test_TC_DRLK_2_6\n"); printf("Test_TC_DRLK_2_7\n"); printf("Test_TC_DRLK_2_8\n"); printf("Test_TC_DRLK_2_11\n"); - printf("Test_TC_DRLK_2_12\n"); printf("TestGroupsCluster\n"); printf("Test_TC_G_1_1\n"); printf("TestActivatedCarbonFilterMonitoring\n"); @@ -2516,23 +2513,15 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads ClusterRevision attribute from DUT\n"); - if (ShouldSkip("ACL.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsClusterRevisionAttributeFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads FeatureMap attribute from DUT\n"); - if (ShouldSkip("ACL.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsFeatureMapAttributeFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList attribute from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && ACL.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -2540,7 +2529,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList attribute from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && ACL.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -2548,7 +2537,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: TH reads optional attribute (Extension) in AttributeList\n"); - if (ShouldSkip("ACL.S.A0001 && ACL.S.Afffb")) { + if (ShouldSkip("ACL.S.A0001")) { NextTest(); return; } @@ -2562,7 +2551,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ACL.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -2570,7 +2559,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 5a: TH reads EventList attribute from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && ACL.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -2584,7 +2573,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { "(0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or " "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ACL.S.Afffa")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -2597,7 +2586,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ACL.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -2610,7 +2599,7 @@ class Test_TC_ACL_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ACL.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -6442,36 +6431,94 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { err = TestStep3eGivenAIRQUALSF03ExtremelyPoorEnsureFeaturemapHasTheCorrectBitSet_6(); break; case 7: - ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4a: Read the global attribute: AttributeList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4ReadTheGlobalAttributeAttributeList_7(); + err = TestStep4aReadTheGlobalAttributeAttributeList_7(); break; case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4a: Read the global attribute: AttributeList\n"); if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4ReadTheGlobalAttributeAttributeList_8(); + err = TestStep4aReadTheGlobalAttributeAttributeList_8(); break; case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 5: TH reads EventList attribute from DUT\n"); + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 4b: TH reads from the DUT the AttributeList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4bThReadsFromTheDutTheAttributeListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); + break; + case 10: + ChipLogProgress(chipTool, " ***** Test Step 10 : Step 5a: TH reads EventList attribute from DUT\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 10: - ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_10(); - break; case 11: - ChipLogProgress(chipTool, " ***** Test Step 11 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_11(); + ChipLogProgress(chipTool, + " ***** Test Step 11 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11(); + break; + case 12: + ChipLogProgress(chipTool, " ***** Test Step 12 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_12(); + break; + case 13: + ChipLogProgress(chipTool, + " ***** Test Step 13 : Step 6b: TH reads from the DUT the AcceptedCommandList attribute. 1.The list SHALL NOT " + "contain any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - " + "0x0000_FFFE). 2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - " + "0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list " + "SHALL NOT contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), " + "(0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsFromTheDutTheAcceptedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); + break; + case 14: + ChipLogProgress(chipTool, " ***** Test Step 14 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_14(); + break; + case 15: + ChipLogProgress(chipTool, + " ***** Test Step 15 : Step 7b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT " + "contain any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - " + "0x0000_FFFE). 2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - " + "0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list " + "SHALL NOT contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), " + "(0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15(); break; } @@ -6520,6 +6567,18 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -6533,7 +6592,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 12; + const uint16_t mTestCount = 16; chip::Optional mNodeId; chip::Optional mCluster; @@ -6672,7 +6731,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_7() + CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_7() { MTRBaseDevice * device = GetDevice("alpha"); @@ -6680,7 +6739,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4a: Read the global attribute: AttributeList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -6699,7 +6758,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_8() + CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_8() { MTRBaseDevice * device = GetDevice("alpha"); @@ -6707,7 +6766,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4a: Read the global attribute: AttributeList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -6725,7 +6784,29 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_10() + CHIP_ERROR + TestStep4bThReadsFromTheDutTheAttributeListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_12() { MTRBaseDevice * device = GetDevice("alpha"); @@ -6733,7 +6814,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -6744,7 +6825,18 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_11() + CHIP_ERROR + TestStep6bThReadsFromTheDutTheAcceptedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_14() { MTRBaseDevice * device = GetDevice("alpha"); @@ -6752,7 +6844,7 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -6767,6 +6859,17 @@ class Test_TC_AIRQUAL_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_AIRQUAL_2_1 : public TestCommandBridge { @@ -6963,7 +7066,7 @@ class Test_TC_BOOL_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 7: Read the global attribute: EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BOOL.S.E00")) { + if (ShouldSkip("BOOL.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -6971,7 +7074,7 @@ class Test_TC_BOOL_1_1 : public TestCommandBridge { return; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read the global attribute: EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !BOOL.S.E00 ")) { + if (ShouldSkip(" !BOOL.S.E00 && PICS_EVENT_LIST_ENABLED ")) { NextTest(); return; } @@ -7364,168 +7467,224 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } err = TestStep4aThReadsAttributeListFromDut_3(); break; case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4b: TH reads optional attribute(VendorName) in AttributeList\n"); - if (ShouldSkip("BRBINFO.S.A0001")) { + ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); + if (ShouldSkip(" !PICS_EVENT_LIST_ENABLED ")) { NextTest(); return; } - err = TestStep4bThReadsOptionalAttributeVendorNameInAttributeList_4(); + err = TestStep4aThReadsAttributeListFromDut_4(); break; case 5: - ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4c: TH reads optional attribute(VendorID) in AttributeList\n"); - if (ShouldSkip("BRBINFO.S.A0002")) { + ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: TH reads optional attribute(VendorName) in AttributeList\n"); + if (ShouldSkip("BRBINFO.S.A0001")) { NextTest(); return; } - err = TestStep4cThReadsOptionalAttributeVendorIDInAttributeList_5(); + err = TestStep4bThReadsOptionalAttributeVendorNameInAttributeList_5(); break; case 6: - ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4d: TH reads optional attribute(ProductName) in AttributeList\n"); - if (ShouldSkip("BRBINFO.S.A0003")) { + ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4c: TH reads optional attribute(VendorID) in AttributeList\n"); + if (ShouldSkip("BRBINFO.S.A0002")) { NextTest(); return; } - err = TestStep4dThReadsOptionalAttributeProductNameInAttributeList_6(); + err = TestStep4cThReadsOptionalAttributeVendorIDInAttributeList_6(); break; case 7: - ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4e: TH reads optional attribute(NodeLabel) in AttributeList\n"); - if (ShouldSkip("BRBINFO.S.A0005")) { + ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4d: TH reads optional attribute(ProductName) in AttributeList\n"); + if (ShouldSkip("BRBINFO.S.A0003")) { NextTest(); return; } - err = TestStep4eThReadsOptionalAttributeNodeLabelInAttributeList_7(); + err = TestStep4dThReadsOptionalAttributeProductNameInAttributeList_7(); break; case 8: + ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4e: TH reads optional attribute(NodeLabel) in AttributeList\n"); + if (ShouldSkip("BRBINFO.S.A0005")) { + NextTest(); + return; + } + err = TestStep4eThReadsOptionalAttributeNodeLabelInAttributeList_8(); + break; + case 9: ChipLogProgress( - chipTool, " ***** Test Step 8 : Step 4f: TH reads optional attribute(HardwareVersion) in AttributeList\n"); + chipTool, " ***** Test Step 9 : Step 4f: TH reads optional attribute(HardwareVersion) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A0007")) { NextTest(); return; } - err = TestStep4fThReadsOptionalAttributeHardwareVersionInAttributeList_8(); + err = TestStep4fThReadsOptionalAttributeHardwareVersionInAttributeList_9(); break; - case 9: + case 10: ChipLogProgress( - chipTool, " ***** Test Step 9 : Step 4g: TH reads optional attribute(HardwareVersionString) in AttributeList\n"); + chipTool, " ***** Test Step 10 : Step 4g: TH reads optional attribute(HardwareVersionString) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A0008")) { NextTest(); return; } - err = TestStep4gThReadsOptionalAttributeHardwareVersionStringInAttributeList_9(); + err = TestStep4gThReadsOptionalAttributeHardwareVersionStringInAttributeList_10(); break; - case 10: + case 11: ChipLogProgress( - chipTool, " ***** Test Step 10 : Step 4h: TH reads optional attribute(SoftwareVersion) in AttributeList\n"); + chipTool, " ***** Test Step 11 : Step 4h: TH reads optional attribute(SoftwareVersion) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A0009")) { NextTest(); return; } - err = TestStep4hThReadsOptionalAttributeSoftwareVersionInAttributeList_10(); + err = TestStep4hThReadsOptionalAttributeSoftwareVersionInAttributeList_11(); break; - case 11: + case 12: ChipLogProgress( - chipTool, " ***** Test Step 11 : Step 4i: TH reads optional attribute(SoftwareVersionString) in AttributeList\n"); + chipTool, " ***** Test Step 12 : Step 4i: TH reads optional attribute(SoftwareVersionString) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000a")) { NextTest(); return; } - err = TestStep4iThReadsOptionalAttributeSoftwareVersionStringInAttributeList_11(); + err = TestStep4iThReadsOptionalAttributeSoftwareVersionStringInAttributeList_12(); break; - case 12: + case 13: ChipLogProgress( - chipTool, " ***** Test Step 12 : Step 4j: TH reads optional attribute(ManufacturingDate) in AttributeList\n"); + chipTool, " ***** Test Step 13 : Step 4j: TH reads optional attribute(ManufacturingDate) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000b")) { NextTest(); return; } - err = TestStep4jThReadsOptionalAttributeManufacturingDateInAttributeList_12(); + err = TestStep4jThReadsOptionalAttributeManufacturingDateInAttributeList_13(); break; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4k: TH reads optional attribute(PartNumber) in AttributeList\n"); + case 14: + ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4k: TH reads optional attribute(PartNumber) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000c")) { NextTest(); return; } - err = TestStep4kThReadsOptionalAttributePartNumberInAttributeList_13(); + err = TestStep4kThReadsOptionalAttributePartNumberInAttributeList_14(); break; - case 14: - ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4l: TH reads optional attribute(ProductURL) in AttributeList\n"); + case 15: + ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4l: TH reads optional attribute(ProductURL) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000d")) { NextTest(); return; } - err = TestStep4lThReadsOptionalAttributeProductURLInAttributeList_14(); + err = TestStep4lThReadsOptionalAttributeProductURLInAttributeList_15(); break; - case 15: + case 16: ChipLogProgress( - chipTool, " ***** Test Step 15 : Step 4m: TH reads optional attribute(ProductLabel) in AttributeList\n"); + chipTool, " ***** Test Step 16 : Step 4m: TH reads optional attribute(ProductLabel) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000e")) { NextTest(); return; } - err = TestStep4mThReadsOptionalAttributeProductLabelInAttributeList_15(); + err = TestStep4mThReadsOptionalAttributeProductLabelInAttributeList_16(); break; - case 16: + case 17: ChipLogProgress( - chipTool, " ***** Test Step 16 : Step 4n: TH reads optional attribute(SerialNumber) in AttributeList\n"); + chipTool, " ***** Test Step 17 : Step 4n: TH reads optional attribute(SerialNumber) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A000f")) { NextTest(); return; } - err = TestStep4nThReadsOptionalAttributeSerialNumberInAttributeList_16(); + err = TestStep4nThReadsOptionalAttributeSerialNumberInAttributeList_17(); break; - case 17: - ChipLogProgress(chipTool, " ***** Test Step 17 : Step 4o: TH reads optional attribute(UniqueID) in AttributeList\n"); + case 18: + ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4o: TH reads optional attribute(UniqueID) in AttributeList\n"); if (ShouldSkip("BRBINFO.S.A0012")) { NextTest(); return; } - err = TestStep4oThReadsOptionalAttributeUniqueIDInAttributeList_17(); + err = TestStep4oThReadsOptionalAttributeUniqueIDInAttributeList_18(); break; - case 18: - ChipLogProgress(chipTool, " ***** Test Step 18 : Step 5a: TH reads optional event(StartUp) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E00")) { + case 19: + ChipLogProgress(chipTool, + " ***** Test Step 19 : Step 4p: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4pThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19(); + break; + case 20: + ChipLogProgress(chipTool, " ***** Test Step 20 : Step 5a: TH reads optional event(StartUp) in EventList\n"); + if (ShouldSkip("BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 19: - ChipLogProgress(chipTool, " ***** Test Step 19 : Step 5b: TH reads optional attribute(ShutDown) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E01")) { + case 21: + ChipLogProgress(chipTool, " ***** Test Step 21 : Step 5b: TH reads optional attribute(ShutDown) in EventList\n"); + if (ShouldSkip("BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 20: - ChipLogProgress(chipTool, " ***** Test Step 20 : Step 5c: TH reads optional attribute(Leave) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BRBINFO.S.E02")) { + case 22: + ChipLogProgress(chipTool, " ***** Test Step 22 : Step 5c: TH reads optional attribute(Leave) in EventList\n"); + if (ShouldSkip("BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 21: + case 23: ChipLogProgress(chipTool, - " ***** Test Step 21 : Step 5d: Read EventList attribute from the DUT and Verify that the DUT response provides a " - "list of supported events.\n"); + " ***** Test Step 23 : Step 5d: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5dThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_23(); + break; + case 24: + ChipLogProgress(chipTool, " ***** Test Step 24 : Step 6a: TH1 reads AcceptedCommandList from DUT\n"); + err = TestStep6aTh1ReadsAcceptedCommandListFromDut_24(); + break; + case 25: + ChipLogProgress(chipTool, + " ***** Test Step 25 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } - err = TestStep5dReadEventListAttributeFromTheDutAndVerifyThatTheDutResponseProvidesAListOfSupportedEvents_21(); + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_25(); break; - case 22: - ChipLogProgress(chipTool, " ***** Test Step 22 : Step 6: TH1 reads AcceptedCommandList from DUT\n"); - err = TestStep6Th1ReadsAcceptedCommandListFromDut_22(); + case 26: + ChipLogProgress(chipTool, " ***** Test Step 26 : Step 7a: TH1 reads GeneratedCommandList from DUT\n"); + err = TestStep7aTh1ReadsGeneratedCommandListFromDut_26(); break; - case 23: - ChipLogProgress(chipTool, " ***** Test Step 23 : Step 7: TH1 reads GeneratedCommandList from DUT\n"); - err = TestStep7Th1ReadsGeneratedCommandListFromDut_23(); + case 27: + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bTh1ReadsGeneratedCommandListFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); break; } @@ -7610,6 +7769,18 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { case 23: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 24: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 25: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 26: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 27: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -7623,7 +7794,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 24; + const uint16_t mTestCount = 28; chip::Optional mNodeId; chip::Optional mCluster; @@ -7683,6 +7854,35 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { + NSLog(@"Step 4a: TH reads AttributeList from DUT Error: %@", err); + + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + + VerifyOrReturn(CheckConstraintType("attributeList", "list", "list")); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 17UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65528UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65529UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65530UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65531UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65532UL)); + VerifyOrReturn(CheckConstraintContains("attributeList", value, 65533UL)); + + NextTest(); + }]; + + return CHIP_NO_ERROR; + } + + CHIP_ERROR TestStep4aThReadsAttributeListFromDut_4() + { + + MTRBaseDevice * device = GetDevice("alpha"); + __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasicInformation alloc] initWithDevice:device + endpointID:@(3) + queue:mCallbackQueue]; + VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { NSLog(@"Step 4a: TH reads AttributeList from DUT Error: %@", err); @@ -7702,7 +7902,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4bThReadsOptionalAttributeVendorNameInAttributeList_4() + CHIP_ERROR TestStep4bThReadsOptionalAttributeVendorNameInAttributeList_5() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7725,7 +7925,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4cThReadsOptionalAttributeVendorIDInAttributeList_5() + CHIP_ERROR TestStep4cThReadsOptionalAttributeVendorIDInAttributeList_6() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7748,7 +7948,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4dThReadsOptionalAttributeProductNameInAttributeList_6() + CHIP_ERROR TestStep4dThReadsOptionalAttributeProductNameInAttributeList_7() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7771,7 +7971,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4eThReadsOptionalAttributeNodeLabelInAttributeList_7() + CHIP_ERROR TestStep4eThReadsOptionalAttributeNodeLabelInAttributeList_8() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7794,7 +7994,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4fThReadsOptionalAttributeHardwareVersionInAttributeList_8() + CHIP_ERROR TestStep4fThReadsOptionalAttributeHardwareVersionInAttributeList_9() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7817,7 +8017,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4gThReadsOptionalAttributeHardwareVersionStringInAttributeList_9() + CHIP_ERROR TestStep4gThReadsOptionalAttributeHardwareVersionStringInAttributeList_10() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7840,7 +8040,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4hThReadsOptionalAttributeSoftwareVersionInAttributeList_10() + CHIP_ERROR TestStep4hThReadsOptionalAttributeSoftwareVersionInAttributeList_11() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7863,7 +8063,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4iThReadsOptionalAttributeSoftwareVersionStringInAttributeList_11() + CHIP_ERROR TestStep4iThReadsOptionalAttributeSoftwareVersionStringInAttributeList_12() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7886,7 +8086,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4jThReadsOptionalAttributeManufacturingDateInAttributeList_12() + CHIP_ERROR TestStep4jThReadsOptionalAttributeManufacturingDateInAttributeList_13() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7909,7 +8109,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4kThReadsOptionalAttributePartNumberInAttributeList_13() + CHIP_ERROR TestStep4kThReadsOptionalAttributePartNumberInAttributeList_14() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7932,7 +8132,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4lThReadsOptionalAttributeProductURLInAttributeList_14() + CHIP_ERROR TestStep4lThReadsOptionalAttributeProductURLInAttributeList_15() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7955,7 +8155,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4mThReadsOptionalAttributeProductLabelInAttributeList_15() + CHIP_ERROR TestStep4mThReadsOptionalAttributeProductLabelInAttributeList_16() { MTRBaseDevice * device = GetDevice("alpha"); @@ -7978,7 +8178,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4nThReadsOptionalAttributeSerialNumberInAttributeList_16() + CHIP_ERROR TestStep4nThReadsOptionalAttributeSerialNumberInAttributeList_17() { MTRBaseDevice * device = GetDevice("alpha"); @@ -8001,7 +8201,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4oThReadsOptionalAttributeUniqueIDInAttributeList_17() + CHIP_ERROR TestStep4oThReadsOptionalAttributeUniqueIDInAttributeList_18() { MTRBaseDevice * device = GetDevice("alpha"); @@ -8024,7 +8224,19 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep5dReadEventListAttributeFromTheDutAndVerifyThatTheDutResponseProvidesAListOfSupportedEvents_21() + CHIP_ERROR + TestStep4pThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5dThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_23() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -8034,7 +8246,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return UserPrompt("alpha", value); } - CHIP_ERROR TestStep6Th1ReadsAcceptedCommandListFromDut_22() + CHIP_ERROR TestStep6aTh1ReadsAcceptedCommandListFromDut_24() { MTRBaseDevice * device = GetDevice("alpha"); @@ -8044,7 +8256,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: TH1 reads AcceptedCommandList from DUT Error: %@", err); + NSLog(@"Step 6a: TH1 reads AcceptedCommandList from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -8060,7 +8272,18 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7Th1ReadsGeneratedCommandListFromDut_23() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_25() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aTh1ReadsGeneratedCommandListFromDut_26() { MTRBaseDevice * device = GetDevice("alpha"); @@ -8070,7 +8293,7 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: TH1 reads GeneratedCommandList from DUT Error: %@", err); + NSLog(@"Step 7a: TH1 reads GeneratedCommandList from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -8085,6 +8308,17 @@ class Test_TC_BRBINFO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bTh1ReadsGeneratedCommandListFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_ACT_1_1 : public TestCommandBridge { @@ -8163,7 +8397,7 @@ class Test_TC_ACT_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -8466,23 +8700,15 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("BIND.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("BIND.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BIND.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -8490,7 +8716,7 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && BIND.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -8504,7 +8730,7 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BIND.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -8512,16 +8738,17 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BIND.S.Afffa")) { + " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); break; case 7: ChipLogProgress(chipTool, @@ -8530,7 +8757,7 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BIND.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -8543,7 +8770,7 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BIND.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -8728,7 +8955,7 @@ class Test_TC_BIND_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -22224,21 +22451,21 @@ class Test_TC_CC_6_5 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, - " ***** Test Step 7 : TH writes to StartUpColorTemperatureMireds attribute with value " + " ***** Test Step 7 : Step 2a: TH writes to StartUpColorTemperatureMireds attribute with value " "StartUpColorTemperatureMireds\n"); if (ShouldSkip("PICS_SKIP_SAMPLE_APP && CC.S.A4010 && CC.S.F04")) { NextTest(); return; } - err = TestThWritesToStartUpColorTemperatureMiredsAttributeWithValueStartUpColorTemperatureMireds_7(); + err = TestStep2aThWritesToStartUpColorTemperatureMiredsAttributeWithValueStartUpColorTemperatureMireds_7(); break; case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 2a: TH reads StartUpColorTemperatureMireds attribute from DUT\n"); + ChipLogProgress(chipTool, " ***** Test Step 8 : Step 2b: TH reads StartUpColorTemperatureMireds attribute from DUT\n"); if (ShouldSkip("CC.S.A4010 && CC.S.F04")) { NextTest(); return; } - err = TestStep2aThReadsStartUpColorTemperatureMiredsAttributeFromDut_8(); + err = TestStep2bThReadsStartUpColorTemperatureMiredsAttributeFromDut_8(); break; case 9: ChipLogProgress(chipTool, @@ -22554,7 +22781,7 @@ class Test_TC_CC_6_5 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestThWritesToStartUpColorTemperatureMiredsAttributeWithValueStartUpColorTemperatureMireds_7() + CHIP_ERROR TestStep2aThWritesToStartUpColorTemperatureMiredsAttributeWithValueStartUpColorTemperatureMireds_7() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -22565,7 +22792,7 @@ class Test_TC_CC_6_5 : public TestCommandBridge { } NSNumber * _Nullable StartUpColorTemperatureMiredsValue; - CHIP_ERROR TestStep2aThReadsStartUpColorTemperatureMiredsAttributeFromDut_8() + CHIP_ERROR TestStep2bThReadsStartUpColorTemperatureMiredsAttributeFromDut_8() { MTRBaseDevice * device = GetDevice("alpha"); @@ -22573,7 +22800,7 @@ class Test_TC_CC_6_5 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeStartUpColorTemperatureMiredsWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2a: TH reads StartUpColorTemperatureMireds attribute from DUT Error: %@", err); + NSLog(@"Step 2b: TH reads StartUpColorTemperatureMireds attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -27706,7 +27933,7 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { break; case 16: ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { + if (ShouldSkip(" !PICS_EVENT_LIST_ENABLED ")) { NextTest(); return; } @@ -27810,20 +28037,74 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenCdoconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -27926,6 +28207,18 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -27939,7 +28232,7 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -28575,7 +28868,29 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -28585,7 +28900,7 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -28601,7 +28916,18 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -28611,7 +28937,7 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -28626,6 +28952,17 @@ class Test_TC_CDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_CDOCONC_2_1 : public TestCommandBridge { @@ -29367,20 +29704,74 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenCmoconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH1 reads GeneratedCommandList from DUT. 1.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bTh1ReadsGeneratedCommandListFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -29483,6 +29874,18 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -29496,7 +29899,7 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -30132,7 +30535,29 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -30142,7 +30567,7 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -30158,7 +30583,18 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -30168,7 +30604,7 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -30183,6 +30619,17 @@ class Test_TC_CMOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bTh1ReadsGeneratedCommandListFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_CMOCONC_2_1 : public TestCommandBridge { @@ -30924,20 +31371,74 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenFldconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7ThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -31040,6 +31541,18 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -31053,7 +31566,7 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -31689,7 +32202,29 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -31699,7 +32234,7 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -31715,7 +32250,18 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -31740,6 +32286,17 @@ class Test_TC_FLDCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7ThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_FLDCONC_2_1 : public TestCommandBridge { @@ -32453,48 +33010,103 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { break; case 24: ChipLogProgress(chipTool, - " ***** Test Step 24 : Step 3i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from " + " ***** Test Step 24 : Step 4i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from " "AttributeList when NDOCONC.S.F05 (AVG) is not set\n"); if (ShouldSkip(" !NDOCONC.S.F05 ")) { NextTest(); return; } - err = TestStep3iCheckThatAverageMeasuredValueAndAverageMeasuredValueWindowAreExcludedFromAttributeListWhenNdoconcsf05AvgIsNotSet_24(); + err = TestStep4iCheckThatAverageMeasuredValueAndAverageMeasuredValueWindowAreExcludedFromAttributeListWhenNdoconcsf05AvgIsNotSet_24(); break; case 25: ChipLogProgress(chipTool, - " ***** Test Step 25 : Step 3j: Read the optional, feature dependent attribute LevelValue in AttributeList\n"); + " ***** Test Step 25 : Step 4j: Read the optional, feature dependent attribute LevelValue in AttributeList\n"); if (ShouldSkip("NDOCONC.S.F01")) { NextTest(); return; } - err = TestStep3jReadTheOptionalFeatureDependentAttributeLevelValueInAttributeList_25(); + err = TestStep4jReadTheOptionalFeatureDependentAttributeLevelValueInAttributeList_25(); break; case 26: ChipLogProgress(chipTool, - " ***** Test Step 26 : Step 3k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is " + " ***** Test Step 26 : Step 4k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is " "not set\n"); if (ShouldSkip(" !NDOCONC.S.F01 ")) { NextTest(); return; } - err = TestStep3kCheckThatLevelValueIsExcludedFromAttributeListWhenNdoconcsf01LevIsNotSet_26(); + err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenNdoconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " + "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -32597,6 +33209,18 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -32610,7 +33234,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -33173,7 +33797,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep3iCheckThatAverageMeasuredValueAndAverageMeasuredValueWindowAreExcludedFromAttributeListWhenNdoconcsf05AvgIsNotSet_24() + TestStep4iCheckThatAverageMeasuredValueAndAverageMeasuredValueWindowAreExcludedFromAttributeListWhenNdoconcsf05AvgIsNotSet_24() { MTRBaseDevice * device = GetDevice("alpha"); @@ -33183,7 +33807,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from AttributeList when " + NSLog(@"Step 4i: Check that AverageMeasuredValue and AverageMeasuredValueWindow are excluded from AttributeList when " @"NDOCONC.S.F05 (AVG) is not set Error: %@", err); @@ -33199,7 +33823,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3jReadTheOptionalFeatureDependentAttributeLevelValueInAttributeList_25() + CHIP_ERROR TestStep4jReadTheOptionalFeatureDependentAttributeLevelValueInAttributeList_25() { MTRBaseDevice * device = GetDevice("alpha"); @@ -33209,7 +33833,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3j: Read the optional, feature dependent attribute LevelValue in AttributeList Error: %@", err); + NSLog(@"Step 4j: Read the optional, feature dependent attribute LevelValue in AttributeList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -33222,7 +33846,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3kCheckThatLevelValueIsExcludedFromAttributeListWhenNdoconcsf01LevIsNotSet_26() + CHIP_ERROR TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenNdoconcsf01LevIsNotSet_26() { MTRBaseDevice * device = GetDevice("alpha"); @@ -33232,7 +33856,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is not set Error: %@", + NSLog(@"Step 4k: Check that LevelValue is excluded from AttributeList when NDOCONC.S.F01 (LEV) is not set Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -33246,7 +33870,29 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -33256,7 +33902,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -33272,7 +33918,18 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -33282,7 +33939,7 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -33297,6 +33954,17 @@ class Test_TC_NDOCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_NDOCONC_2_1 : public TestCommandBridge { @@ -34034,20 +34702,73 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenOzconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: Read the global attribute: EventList. 1.The list SHALL NOT contain any additional " + "values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. The list " + "MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX " + "is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any " + "values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - " + "0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bReadTheGlobalAttributeEventList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -34150,6 +34871,18 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -34163,7 +34896,7 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -34798,7 +35531,29 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bReadTheGlobalAttributeEventList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -34808,7 +35563,7 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -34824,7 +35579,18 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -34834,7 +35600,7 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -34849,6 +35615,17 @@ class Test_TC_OZCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_OZCONC_2_1 : public TestCommandBridge { @@ -35590,20 +36367,74 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenPmhconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -35706,6 +36537,18 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -35719,7 +36562,7 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -36355,7 +37198,29 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -36365,7 +37230,7 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -36381,7 +37246,18 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -36391,7 +37267,7 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -36406,6 +37282,17 @@ class Test_TC_PMHCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_PMHCONC_2_1 : public TestCommandBridge { @@ -37147,20 +38034,74 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenPmiconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7b: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7bReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -37263,6 +38204,18 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -37276,7 +38229,7 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -37912,7 +38865,29 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -37922,7 +38897,7 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -37938,7 +38913,18 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7bReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -37948,7 +38934,7 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7b: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -37963,6 +38949,17 @@ class Test_TC_PMICONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_PMICONC_2_1 : public TestCommandBridge { @@ -38704,20 +39701,74 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenPmkconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -38820,6 +39871,18 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -38833,7 +39896,7 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -39469,7 +40532,29 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -39479,7 +40564,7 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -39495,7 +40580,18 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -39505,7 +40601,7 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -39520,6 +40616,17 @@ class Test_TC_PMKCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_PMKCONC_2_1 : public TestCommandBridge { @@ -40257,20 +41364,77 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenRnconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4l: TH reads the AttributeList attribute from the DUT. 1.The list SHALL NOT contain " + "any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - " + "0x0000_FFFE) 2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - " + "0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list " + "SHALL NOT contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), " + "(0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4lThReadsTheAttributeListAttributeFromTheDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: Read the global attribute AcceptedCommandList. 1. The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -40373,6 +41537,18 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -40386,7 +41562,7 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -41021,7 +42197,29 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4lThReadsTheAttributeListAttributeFromTheDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -41031,7 +42229,7 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -41047,7 +42245,18 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -41057,7 +42266,7 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -41072,6 +42281,17 @@ class Test_TC_RNCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_RNCONC_2_1 : public TestCommandBridge { @@ -41816,20 +43036,76 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { err = TestStep4kCheckThatLevelValueIsExcludedFromAttributeListWhenTvocconcsf01LevIsNotSet_26(); break; case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5l: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 27 : Step 4b: Read the global attribute: AttributeList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4bReadTheGlobalAttributeAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27(); + break; + case 28: + ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : Step 6: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_28(); - break; case 29: - ChipLogProgress(chipTool, " ***** Test Step 29 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_29(); + ChipLogProgress(chipTool, + " ***** Test Step 29 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_30(); + break; + case 31: + ChipLogProgress(chipTool, + " ***** Test Step 31 : Step 6b: Read the global attribute: AcceptedCommandList. 1. The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31(); + break; + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_32(); + break; + case 33: + ChipLogProgress(chipTool, + " ***** Test Step 33 : Step 7b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33(); break; } @@ -41932,6 +43208,18 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { case 29: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 30: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 31: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 32: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 33: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -41945,7 +43233,7 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 30; + const uint16_t mTestCount = 34; chip::Optional mNodeId; chip::Optional mCluster; @@ -42607,7 +43895,29 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_28() + CHIP_ERROR + TestStep4bReadTheGlobalAttributeAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_27() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_29() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -42618,7 +43928,7 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -42634,7 +43944,18 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_29() + CHIP_ERROR + TestStep6bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_31() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -42645,7 +43966,7 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -42660,6 +43981,17 @@ class Test_TC_TVOCCONC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_33() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_TVOCCONC_2_1 : public TestCommandBridge { @@ -44161,23 +45493,15 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("OPCREDS.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("OPCREDS.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44185,7 +45509,7 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && OPCREDS.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44199,7 +45523,7 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -44207,23 +45531,20 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afffa")) { + " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6a: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("OPCREDS.S.Afff9")) { - NextTest(); - return; - } err = TestStep6aThReadsAcceptedCommandListFromDut_7(); break; case 8: @@ -44234,7 +45555,7 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -44242,10 +45563,6 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 7a: TH reads GeneratedCommandList from DUT\n"); - if (ShouldSkip("OPCREDS.S.Afff8")) { - NextTest(); - return; - } err = TestStep7aThReadsGeneratedCommandListFromDut_9(); break; case 10: @@ -44255,7 +45572,7 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && OPCREDS.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -44464,7 +45781,7 @@ class Test_TC_OPCREDS_1_2 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -44597,23 +45914,15 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("BINFO.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("BINFO.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44621,7 +45930,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && BINFO.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44630,7 +45939,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { case 5: ChipLogProgress( chipTool, " ***** Test Step 5 : Step 4b: TH reads optional attribute(ManufacturingDate) in attributeList\n"); - if (ShouldSkip("BINFO.S.A000b && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A000b")) { NextTest(); return; } @@ -44638,7 +45947,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4c: TH reads optional attribute(PartNumber) in attributeList\n"); - if (ShouldSkip("BINFO.S.A000c && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A000c")) { NextTest(); return; } @@ -44646,7 +45955,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4d: TH reads optional attribute(ProductURL) in attributeList\n"); - if (ShouldSkip("BINFO.S.A000d && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A000d")) { NextTest(); return; } @@ -44654,7 +45963,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4e: TH reads optional attribute(ProductLabel) in attributeList\n"); - if (ShouldSkip("BINFO.S.A000e && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A000e")) { NextTest(); return; } @@ -44662,7 +45971,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4f: TH reads optional attribute(SerialNumber) in attributeList\n"); - if (ShouldSkip("BINFO.S.A000f && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A000f")) { NextTest(); return; } @@ -44671,7 +45980,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { case 10: ChipLogProgress( chipTool, " ***** Test Step 10 : Step 4g: TH reads optional attribute(LocalConfigDisabled) in attributeList\n"); - if (ShouldSkip("BINFO.S.A0010 && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A0010")) { NextTest(); return; } @@ -44679,7 +45988,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 11: ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4h: TH reads optional attribute(Reachable) in attributeList\n"); - if (ShouldSkip("BINFO.S.A0011 && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A0011")) { NextTest(); return; } @@ -44687,7 +45996,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 12: ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4i: TH reads optional attribute(UniqueID) in attributeList\n"); - if (ShouldSkip("BINFO.S.A0012 && BINFO.S.Afffb")) { + if (ShouldSkip("BINFO.S.A0012")) { NextTest(); return; } @@ -44701,7 +46010,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -44709,8 +46018,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { break; case 14: ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5a: TH1 reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.Afffa && !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && " - "!BINFO.S.A0011 ")) { + if (ShouldSkip(" !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44718,7 +46026,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { return; case 15: ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5b: Read BINFO.S.E00(StartUp) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E00 && BINFO.S.Afffa")) { + if (ShouldSkip("BINFO.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44726,7 +46034,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { return; case 16: ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5c: Read BINFO.S.E01(ShutDown) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E01 && BINFO.S.Afffa")) { + if (ShouldSkip("BINFO.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44734,7 +46042,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { return; case 17: ChipLogProgress(chipTool, " ***** Test Step 17 : Step 5d: Read BINFO.S.E02(Leave) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.E02 && BINFO.S.Afffa")) { + if (ShouldSkip("BINFO.S.E02 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44742,7 +46050,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { return; case 18: ChipLogProgress(chipTool, " ***** Test Step 18 : Step 5e: Read (ReachableChanged) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && BINFO.S.A0011 && BINFO.S.Afffa")) { + if (ShouldSkip("BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44756,7 +46064,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { "(0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or " "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afffa")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -44769,7 +46077,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -44782,7 +46090,7 @@ class Test_TC_BINFO_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && BINFO.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -45273,15 +46581,11 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - if (ShouldSkip("CNET.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: Read the global attribute: FeatureMap\n"); - if (ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 && CNET.S.Afffc")) { + if (ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 ")) { NextTest(); return; } @@ -45290,7 +46594,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { case 3: ChipLogProgress( chipTool, " ***** Test Step 3 : Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set\n"); - if (ShouldSkip("CNET.S.F00 && CNET.S.Afffc")) { + if (ShouldSkip("CNET.S.F00")) { NextTest(); return; } @@ -45299,7 +46603,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { case 4: ChipLogProgress( chipTool, " ***** Test Step 4 : Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set\n"); - if (ShouldSkip("CNET.S.F01 && CNET.S.Afffc")) { + if (ShouldSkip("CNET.S.F01")) { NextTest(); return; } @@ -45308,7 +46612,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { case 5: ChipLogProgress( chipTool, " ***** Test Step 5 : Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set\n"); - if (ShouldSkip("CNET.S.F02 && CNET.S.Afffc")) { + if (ShouldSkip("CNET.S.F02")) { NextTest(); return; } @@ -45316,7 +46620,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && CNET.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -45324,7 +46628,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && CNET.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -45334,7 +46638,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4b: Read mandatory attributes in AttributeList if " "CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true\n"); - if (ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02 && CNET.S.Afffb")) { + if (ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02")) { NextTest(); return; } @@ -45343,7 +46647,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { case 9: ChipLogProgress( chipTool, " ***** Test Step 9 : Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList\n"); - if (ShouldSkip("CNET.S.A0002 && CNET.S.Afffb")) { + if (ShouldSkip("CNET.S.A0002")) { NextTest(); return; } @@ -45352,7 +46656,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { case 10: ChipLogProgress( chipTool, " ***** Test Step 10 : Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList\n"); - if (ShouldSkip("CNET.S.A0003 && CNET.S.Afffb")) { + if (ShouldSkip("CNET.S.A0003")) { NextTest(); return; } @@ -45366,7 +46670,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && CNET.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -45374,22 +46678,23 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { break; case 12: ChipLogProgress(chipTool, - " ***** Test Step 12 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && CNET.S.Afffa")) { + " ***** Test Step 12 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); break; case 13: ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features " "CNET.S.F00(WI),CNET.S.F01(TH)\n"); - if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff9")) { + if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 )")) { NextTest(); return; } @@ -45399,7 +46704,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is " "true)\n"); - if (ShouldSkip("CNET.S.F00 && CNET.S.Afff9")) { + if (ShouldSkip("CNET.S.F00")) { NextTest(); return; } @@ -45409,7 +46714,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is " "true)\n"); - if (ShouldSkip("CNET.S.F01 && CNET.S.Afff9")) { + if (ShouldSkip("CNET.S.F01")) { NextTest(); return; } @@ -45419,7 +46724,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 16 : Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) " "is true)\n"); - if (ShouldSkip("CNET.S.F02 && CNET.S.Afff9")) { + if (ShouldSkip("CNET.S.F02")) { NextTest(); return; } @@ -45433,7 +46738,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && CNET.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -45443,7 +46748,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related " "features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)\n"); - if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 ) && CNET.S.Afff8")) { + if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 )")) { NextTest(); return; } @@ -45453,7 +46758,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related " "features(CNET.S.F02(ET) must be true)\n"); - if (ShouldSkip("CNET.S.F02 && CNET.S.Afff8")) { + if (ShouldSkip("CNET.S.F02")) { NextTest(); return; } @@ -45466,7 +46771,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && CNET.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -45843,7 +47148,7 @@ class Test_TC_CNET_1_3 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -46076,6 +47381,10 @@ class Test_TC_DESC_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: @@ -46114,16 +47423,17 @@ class Test_TC_DESC_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); break; case 7: ChipLogProgress(chipTool, @@ -46220,25 +47530,11 @@ class Test_TC_DESC_1_1 : public TestCommandBridge { CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1() { - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDescriptor alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2: Read the global attribute: ClusterRevision Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("ClusterRevision", actualValue, 1U)); - } - - VerifyOrReturn(CheckConstraintType("clusterRevision", "int16u", "int16u")); - NextTest(); - }]; - - return CHIP_NO_ERROR; + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); } CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2() @@ -46336,7 +47632,7 @@ class Test_TC_DESC_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -46413,23 +47709,15 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("DLOG.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TTH reads the FeatureMap from DUT\n"); - if (ShouldSkip("DLOG.S.Afffc")) { - NextTest(); - return; - } err = TestStep3TthReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TTH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -46437,7 +47725,7 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TTH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && DLOG.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -46451,7 +47739,7 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -46459,23 +47747,20 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 4b: TTH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afffa")) { + " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4bTthReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6a: TTH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("DLOG.S.Afff9")) { - NextTest(); - return; - } err = TestStep6aTthReadsAcceptedCommandListFromDut_7(); break; case 8: @@ -46486,7 +47771,7 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -46494,10 +47779,6 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 7a: TTH reads GeneratedCommandList from DUT\n"); - if (ShouldSkip("DLOG.S.Afff8")) { - NextTest(); - return; - } err = TestStep7aTthReadsGeneratedCommandListFromDut_9(); break; case 10: @@ -46507,7 +47788,7 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DLOG.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -46696,7 +47977,7 @@ class Test_TC_DLOG_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep4bTthReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -46823,15 +48104,11 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("DGETH.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01 && DGETH.S.Afffc")) { + if (ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01")) { NextTest(); return; } @@ -46840,7 +48117,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { case 3: ChipLogProgress( chipTool, " ***** Test Step 3 : Step 3b: Given DGETH.S.F00 ensure featuremap has the correct bit set\n"); - if (ShouldSkip("DGETH.S.F00 && DGETH.S.Afffc")) { + if (ShouldSkip("DGETH.S.F00")) { NextTest(); return; } @@ -46849,7 +48126,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { case 4: ChipLogProgress( chipTool, " ***** Test Step 4 : Step 3c: Given DGETH.S.F01 ensure featuremap has the correct bit set\n"); - if (ShouldSkip("DGETH.S.F01 && DGETH.S.Afffc")) { + if (ShouldSkip("DGETH.S.F01")) { NextTest(); return; } @@ -46857,7 +48134,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -46865,7 +48142,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGETH.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -46873,7 +48150,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4b: TH reads optional attribute(PHYRate) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0000 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0000")) { NextTest(); return; } @@ -46881,7 +48158,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4c: TH reads optional attribute(FullDuplex) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0001 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0001")) { NextTest(); return; } @@ -46891,7 +48168,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4d: TH reads optional attribute(PacketRxCount) and Feature " "dependent(DGETH.S.F00(PKTCNT)) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0002 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0002")) { NextTest(); return; } @@ -46901,7 +48178,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4e: TH reads optional attribute(PacketRxCount) and Feature " "dependent(DGETH.S.F00(PKTCNT)) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0003 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0003")) { NextTest(); return; } @@ -46911,7 +48188,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4f: TH reads optional attribute(PacketRxCount) and Feature " "dependent(DGETH.S.F01(ERRCNT)) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0004 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0004")) { NextTest(); return; } @@ -46921,7 +48198,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4g: TH reads optional attribute(PacketRxCount) and Feature " "dependent(DGETH.S.F01(ERRCNT)) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0005 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0005")) { NextTest(); return; } @@ -46931,7 +48208,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4h: TH reads optional attribute(PacketRxCount) and Feature " "dependent(DGETH.S.F01(ERRCNT)) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0006 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0006")) { NextTest(); return; } @@ -46940,7 +48217,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { case 14: ChipLogProgress( chipTool, " ***** Test Step 14 : Step 4i: TH reads optional attribute(CarrierDetect) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0007 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0007")) { NextTest(); return; } @@ -46949,7 +48226,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { case 15: ChipLogProgress( chipTool, " ***** Test Step 15 : Step 4j: TH reads optional attribute(TimeSinceReset) in AttributeList\n"); - if (ShouldSkip("DGETH.S.A0008 && DGETH.S.Afffb")) { + if (ShouldSkip("DGETH.S.A0008")) { NextTest(); return; } @@ -46963,7 +48240,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -46971,20 +48248,21 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 17: ChipLogProgress(chipTool, - " ***** Test Step 17 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afffa")) { + " ***** Test Step 17 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17(); break; case 18: ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6a: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("( DGETH.S.F00 || DGETH.S.F01 ) && DGETH.S.Afff9")) { + if (ShouldSkip("( DGETH.S.F00 || DGETH.S.F01 )")) { NextTest(); return; } @@ -46992,7 +48270,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { break; case 19: ChipLogProgress(chipTool, " ***** Test Step 19 : Step 6b: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("DGETH.S.Afff9 && !DGETH.S.F00 && !DGETH.S.F01")) { + if (ShouldSkip(" !DGETH.S.F00 && !DGETH.S.F01 ")) { NextTest(); return; } @@ -47006,7 +48284,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -47019,7 +48297,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGETH.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -47508,7 +48786,7 @@ class Test_TC_DGETH_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -49003,23 +50281,15 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - if (ShouldSkip("FLW.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n"); - if (ShouldSkip("FLW.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ReadTheGlobalAttributeFeatureMap_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && FLW.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -49027,7 +50297,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && FLW.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -49035,7 +50305,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: Read the optional attribute(Tolerance) in AttributeList\n"); - if (ShouldSkip("FLW.S.A0003 && FLW.S.Afffb")) { + if (ShouldSkip("FLW.S.A0003")) { NextTest(); return; } @@ -49049,7 +50319,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLW.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49057,16 +50327,17 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, - " ***** Test Step 7 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLW.S.Afffa")) { + " ***** Test Step 7 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7(); break; case 8: ChipLogProgress(chipTool, @@ -49076,7 +50347,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLW.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49089,7 +50360,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLW.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49302,7 +50573,7 @@ class Test_TC_FLW_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -49614,23 +50885,15 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("FLABEL.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("FLABEL.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -49638,7 +50901,7 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && FLABEL.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -49652,7 +50915,7 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49660,16 +50923,17 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afffa")) { + " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); break; case 7: ChipLogProgress(chipTool, @@ -49678,7 +50942,7 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49691,7 +50955,7 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && FLABEL.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -49876,7 +51140,7 @@ class Test_TC_FLABEL_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -50074,21 +51338,63 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { err = TestStep3eReadTheFeatureDependentFansf05dirAttributeInAttributeList_14(); break; case 15: - ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4: Read the global attribute: AcceptedCommandList\n"); - if (ShouldSkip(" !FAN.S.C00.Rsp ")) { + ChipLogProgress(chipTool, + " ***** Test Step 15 : Step 3f: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } - err = TestStep4ReadTheGlobalAttributeAcceptedCommandList_15(); + err = TestStep3fThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15(); break; case 16: + ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4a: Read the global attribute: AcceptedCommandList\n"); + if (ShouldSkip(" !FAN.S.C00.Rsp ")) { + NextTest(); + return; + } + err = TestStep4aReadTheGlobalAttributeAcceptedCommandList_16(); + break; + case 17: + ChipLogProgress(chipTool, + " ***** Test Step 17 : Step 4b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " + "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17(); + break; + case 18: ChipLogProgress( - chipTool, " ***** Test Step 16 : Step 5: Read the optional command (ResetCondition) in AcceptedCommandList\n"); + chipTool, " ***** Test Step 18 : Step 5a: Read the optional command (ResetCondition) in AcceptedCommandList\n"); if (ShouldSkip("FAN.S.C00.Rsp")) { NextTest(); return; } - err = TestStep5ReadTheOptionalCommandResetConditionInAcceptedCommandList_16(); + err = TestStep5aReadTheOptionalCommandResetConditionInAcceptedCommandList_18(); + break; + case 19: + ChipLogProgress(chipTool, + " ***** Test Step 19 : Step 5b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT " + "contain any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY " + "contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is " + "the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in " + "the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19(); break; } @@ -50152,6 +51458,15 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { case 16: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -50165,7 +51480,7 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 17; + const uint16_t mTestCount = 20; chip::Optional mNodeId; chip::Optional mCluster; @@ -50475,7 +51790,18 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4ReadTheGlobalAttributeAcceptedCommandList_15() + CHIP_ERROR + TestStep3fThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep4aReadTheGlobalAttributeAcceptedCommandList_16() { MTRBaseDevice * device = GetDevice("alpha"); @@ -50483,7 +51809,7 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 4a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -50499,7 +51825,18 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep5ReadTheOptionalCommandResetConditionInAcceptedCommandList_16() + CHIP_ERROR + TestStep4bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep5aReadTheOptionalCommandResetConditionInAcceptedCommandList_18() { MTRBaseDevice * device = GetDevice("alpha"); @@ -50507,7 +51844,7 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 5: Read the optional command (ResetCondition) in AcceptedCommandList Error: %@", err); + NSLog(@"Step 5a: Read the optional command (ResetCondition) in AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -50519,6 +51856,17 @@ class Test_TC_FAN_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_FAN_2_1 : public TestCommandBridge { @@ -53032,23 +54380,15 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - if (ShouldSkip("DGGEN.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n"); - if (ShouldSkip("DGGEN.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ReadTheGlobalAttributeFeatureMap_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53056,7 +54396,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53064,7 +54404,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: Read optional attribute(UpTime) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0002 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0002")) { NextTest(); return; } @@ -53073,7 +54413,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { case 6: ChipLogProgress( chipTool, " ***** Test Step 6 : Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0003 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0003")) { NextTest(); return; } @@ -53081,7 +54421,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4d: Read optional attribute(BootReason) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0004 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0004")) { NextTest(); return; } @@ -53090,7 +54430,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { case 8: ChipLogProgress( chipTool, " ***** Test Step 8 : Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0005 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0005")) { NextTest(); return; } @@ -53099,7 +54439,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { case 9: ChipLogProgress( chipTool, " ***** Test Step 9 : Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0006 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0006")) { NextTest(); return; } @@ -53108,7 +54448,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { case 10: ChipLogProgress( chipTool, " ***** Test Step 10 : Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList\n"); - if (ShouldSkip("DGGEN.S.A0007 && DGGEN.S.Afffb")) { + if (ShouldSkip("DGGEN.S.A0007")) { NextTest(); return; } @@ -53122,7 +54462,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -53130,7 +54470,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { break; case 12: ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5a: Read the global attribute: EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53138,7 +54478,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { return; case 13: ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5b: Read optional event(HardwareFaultChange) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E00")) { + if (ShouldSkip("DGGEN.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53146,7 +54486,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { return; case 14: ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5c: Read optional event(RadioFaultChange) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E01")) { + if (ShouldSkip("DGGEN.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53154,7 +54494,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { return; case 15: ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5d: Read optional event(NetworkFaultChange) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGGEN.S.Afffa && DGGEN.S.E02")) { + if (ShouldSkip("DGGEN.S.E02 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -53162,23 +54502,20 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { return; case 16: ChipLogProgress(chipTool, - " ***** Test Step 16 : Step 5e: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afffa")) { + " ***** Test Step 16 : Step 5e: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5eThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16(); + err = TestStep5eThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16(); break; case 17: ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6a: Read the global attribute: AcceptedCommandList\n"); - if (ShouldSkip("DGGEN.S.Afff9")) { - NextTest(); - return; - } err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_17(); break; case 18: @@ -53189,7 +54526,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -53202,7 +54539,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGGEN.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -53570,7 +54907,7 @@ class Test_TC_DGGEN_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5eThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16() + TestStep5eThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -54220,7 +55557,21 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { return; case 8: ChipLogProgress(chipTool, - " ***** Test Step 8 : Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional " + " ***** Test Step 8 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8(); + break; + case 9: + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 5b: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional " "values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in the " "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " "(0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test Vendor or " @@ -54230,15 +55581,15 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { NextTest(); return; } - err = TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8(); - break; - case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 6a: TH reads AcceptedCommandList from DUT\n"); - err = TestStep6aThReadsAcceptedCommandListFromDut_9(); + err = TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); break; case 10: + ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6a: TH reads AcceptedCommandList from DUT\n"); + err = TestStep6aThReadsAcceptedCommandListFromDut_10(); + break; + case 11: ChipLogProgress(chipTool, - " ***** Test Step 10 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + " ***** Test Step 11 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " @@ -54247,15 +55598,15 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { NextTest(); return; } - err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_10(); - break; - case 11: - ChipLogProgress(chipTool, " ***** Test Step 11 : Step 7a: TH reads GeneratedCommandList from DUT\n"); - err = TestStep7aThReadsGeneratedCommandListFromDut_11(); + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11(); break; case 12: + ChipLogProgress(chipTool, " ***** Test Step 12 : Step 7a: TH reads GeneratedCommandList from DUT\n"); + err = TestStep7aThReadsGeneratedCommandListFromDut_12(); + break; + case 13: ChipLogProgress(chipTool, - " ***** Test Step 12 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + " ***** Test Step 13 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " @@ -54264,7 +55615,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { NextTest(); return; } - err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); break; } @@ -54316,6 +55667,9 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -54329,7 +55683,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 13; + const uint16_t mTestCount = 14; chip::Optional mNodeId; chip::Optional mCluster; @@ -54492,7 +55846,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8() + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -54502,7 +55856,18 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { return UserPrompt("alpha", value); } - CHIP_ERROR TestStep6aThReadsAcceptedCommandListFromDut_9() + CHIP_ERROR + TestStep5bThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aThReadsAcceptedCommandListFromDut_10() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54529,7 +55894,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_10() + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -54539,7 +55904,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { return UserPrompt("alpha", value); } - CHIP_ERROR TestStep7aThReadsGeneratedCommandListFromDut_11() + CHIP_ERROR TestStep7aThReadsGeneratedCommandListFromDut_12() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54564,7 +55929,7 @@ class Test_TC_GRPKEY_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -54618,40 +55983,40 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0(); break; case 1: - ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); + ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads ClusterRevision attribute from DUT\n"); + err = TestStep2ThReadsClusterRevisionAttributeFromDut_1(); break; case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n"); + ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads FeatureMap attribute from DUT\n"); if (ShouldSkip("ICDM.S.F00")) { NextTest(); return; } - err = TestStep3ReadTheGlobalAttributeFeatureMap_2(); + err = TestStep3ThReadsFeatureMapAttributeFromDut_2(); break; case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3: Read the global attribute: FeatureMap\n"); + ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3: TH reads FeatureMap attribute from DUT\n"); if (ShouldSkip(" !ICDM.S.F00 ")) { NextTest(); return; } - err = TestStep3ReadTheGlobalAttributeFeatureMap_3(); + err = TestStep3ThReadsFeatureMapAttributeFromDut_3(); break; case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList attribute from DUT\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4aReadTheGlobalAttributeAttributeList_4(); + err = TestStep4aThReadsAttributeListAttributeFromDut_4(); break; case 5: - ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: TH reads AttributeList attribute from DUT\n"); if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4aReadTheGlobalAttributeAttributeList_5(); + err = TestStep4aThReadsAttributeListAttributeFromDut_5(); break; case 6: ChipLogProgress( @@ -54680,41 +56045,109 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { err = TestStep4dReadTheOptionalAttributeClientsSupportedPerFabricInAttributeList_8(); break; case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 5: Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 4e: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4eThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); + break; + case 10: + ChipLogProgress(chipTool, " ***** Test Step 10 : Step 5a: Read the global attribute: EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 10: - ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6a: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_10(); - break; case 11: + ChipLogProgress(chipTool, + " ***** Test Step 11 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11(); + break; + case 12: + ChipLogProgress(chipTool, " ***** Test Step 12 : Step 6a: TH reads AcceptedCommandList attribute from DUT\n"); + if (ShouldSkip(" !ICDM.S.F00 && !ICDM.S.C03.Rsp ")) { + NextTest(); + return; + } + err = TestStep6aThReadsAcceptedCommandListAttributeFromDut_12(); + break; + case 13: + ChipLogProgress( + chipTool, " ***** Test Step 13 : Step 6b: TH reads AcceptedCommandList attribute from DUT if ICDM.S.F00 is true\n"); + if (ShouldSkip("ICDM.S.F00")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDutIfIcdmsf00IsTrue_13(); + break; + case 14: ChipLogProgress( - chipTool, " ***** Test Step 11 : Step 6b: Read the optional command (StayActiveRequest) in AttributeList\n"); + chipTool, " ***** Test Step 14 : Step 6c: Read the optional command (StayActiveRequest) in AttributeList\n"); if (ShouldSkip("ICDM.S.C03.Rsp")) { NextTest(); return; } - err = TestStep6bReadTheOptionalCommandStayActiveRequestInAttributeList_11(); + err = TestStep6cReadTheOptionalCommandStayActiveRequestInAttributeList_14(); break; - case 12: - ChipLogProgress(chipTool, " ***** Test Step 12 : Step 7: Read the global attribute: GeneratedCommandList\n"); + case 15: + ChipLogProgress(chipTool, + " ***** Test Step 15 : Step 6d: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " + "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6dThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15(); + break; + case 16: + ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7a: TH reads GeneratedCommandList attribute from DUT\n"); if (ShouldSkip(" !ICDM.S.F00 ")) { NextTest(); return; } - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_12(); + err = TestStep7aThReadsGeneratedCommandListAttributeFromDut_16(); break; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7: Read the global attribute: GeneratedCommandList\n"); + case 17: + ChipLogProgress(chipTool, " ***** Test Step 17 : Step 7a: TH reads GeneratedCommandList attribute from DUT\n"); if (ShouldSkip("ICDM.S.F00")) { NextTest(); return; } - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_13(); + err = TestStep7aThReadsGeneratedCommandListAttributeFromDut_17(); + break; + case 18: + ChipLogProgress(chipTool, + " ***** Test Step 18 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_18(); break; } @@ -54769,6 +56202,21 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { case 13: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 16: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -54782,7 +56230,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 14; + const uint16_t mTestCount = 19; chip::Optional mNodeId; chip::Optional mCluster; @@ -54797,7 +56245,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return WaitForCommissionee("alpha", value); } - CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1() + CHIP_ERROR TestStep2ThReadsClusterRevisionAttributeFromDut_1() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54805,7 +56253,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2: Read the global attribute: ClusterRevision Error: %@", err); + NSLog(@"Step 2: TH reads ClusterRevision attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -54821,7 +56269,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2() + CHIP_ERROR TestStep3ThReadsFeatureMapAttributeFromDut_2() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54829,7 +56277,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3: Read the global attribute: FeatureMap Error: %@", err); + NSLog(@"Step 3: TH reads FeatureMap attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -54845,7 +56293,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_3() + CHIP_ERROR TestStep3ThReadsFeatureMapAttributeFromDut_3() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54853,7 +56301,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3: Read the global attribute: FeatureMap Error: %@", err); + NSLog(@"Step 3: TH reads FeatureMap attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -54869,7 +56317,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_4() + CHIP_ERROR TestStep4aThReadsAttributeListAttributeFromDut_4() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54877,7 +56325,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4a: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4a: TH reads AttributeList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -54898,7 +56346,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_5() + CHIP_ERROR TestStep4aThReadsAttributeListAttributeFromDut_5() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54906,7 +56354,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4a: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4a: TH reads AttributeList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -54989,7 +56437,29 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_10() + CHIP_ERROR + TestStep4eThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_11() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aThReadsAcceptedCommandListAttributeFromDut_12() { MTRBaseDevice * device = GetDevice("alpha"); @@ -54997,7 +56467,31 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6a: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: TH reads AcceptedCommandList attribute from DUT Error: %@", err); + + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + + { + id actualValue = value; + VerifyOrReturn(CheckValue("AcceptedCommandList", [actualValue count], static_cast(0))); + } + + VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list")); + NextTest(); + }]; + + return CHIP_NO_ERROR; + } + + CHIP_ERROR TestStep6bThReadsAcceptedCommandListAttributeFromDutIfIcdmsf00IsTrue_13() + { + + MTRBaseDevice * device = GetDevice("alpha"); + __auto_type * cluster = [[MTRBaseClusterICDManagement alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue]; + VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + + [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { + NSLog(@"Step 6b: TH reads AcceptedCommandList attribute from DUT if ICDM.S.F00 is true Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -55011,7 +56505,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bReadTheOptionalCommandStayActiveRequestInAttributeList_11() + CHIP_ERROR TestStep6cReadTheOptionalCommandStayActiveRequestInAttributeList_14() { MTRBaseDevice * device = GetDevice("alpha"); @@ -55019,7 +56513,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6b: Read the optional command (StayActiveRequest) in AttributeList Error: %@", err); + NSLog(@"Step 6c: Read the optional command (StayActiveRequest) in AttributeList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -55032,7 +56526,18 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_12() + CHIP_ERROR + TestStep6dThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_15() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aThReadsGeneratedCommandListAttributeFromDut_16() { MTRBaseDevice * device = GetDevice("alpha"); @@ -55040,7 +56545,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: TH reads GeneratedCommandList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -55056,7 +56561,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_13() + CHIP_ERROR TestStep7aThReadsGeneratedCommandListAttributeFromDut_17() { MTRBaseDevice * device = GetDevice("alpha"); @@ -55064,7 +56569,7 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: TH reads GeneratedCommandList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -55076,6 +56581,17 @@ class Test_TC_ICDM_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_18() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_ICDM_2_1 : public TestCommandBridge { @@ -55414,20 +56930,20 @@ class Test_TC_I_1_1 : public TestCommandBridge { err = TestStep3ThReadsTheFeatureMapAttributeFromTheDut_2(); break; case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: TH reads AttributeList from DUT\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4ReadTheGlobalAttributeAttributeList_3(); + err = TestStep4ThReadsAttributeListFromDut_3(); break; case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4: Read the global attribute: AttributeList\n"); + ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4: TH reads AttributeList from DUT\n"); if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep4ReadTheGlobalAttributeAttributeList_4(); + err = TestStep4ThReadsAttributeListFromDut_4(); break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 5: Read the global attribute: AcceptedCommandList\n"); @@ -55450,7 +56966,7 @@ class Test_TC_I_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read EventList attribute from the DUT. For this cluster the list is usually empty " "but it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -55570,7 +57086,7 @@ class Test_TC_I_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_3() + CHIP_ERROR TestStep4ThReadsAttributeListFromDut_3() { MTRBaseDevice * device = GetDevice("alpha"); @@ -55578,13 +57094,12 @@ class Test_TC_I_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4: TH reads AttributeList from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); VerifyOrReturn(CheckConstraintType("attributeList", "list", "list")); VerifyOrReturn(CheckConstraintContains("attributeList", value, 0UL)); - VerifyOrReturn(CheckConstraintContains("attributeList", value, 1UL)); VerifyOrReturn(CheckConstraintContains("attributeList", value, 65528UL)); VerifyOrReturn(CheckConstraintContains("attributeList", value, 65529UL)); VerifyOrReturn(CheckConstraintContains("attributeList", value, 65530UL)); @@ -55598,7 +57113,7 @@ class Test_TC_I_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_4() + CHIP_ERROR TestStep4ThReadsAttributeListFromDut_4() { MTRBaseDevice * device = GetDevice("alpha"); @@ -55606,7 +57121,7 @@ class Test_TC_I_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 4: Read the global attribute: AttributeList Error: %@", err); + NSLog(@"Step 4: TH reads AttributeList from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -56994,7 +58509,7 @@ class Test_TC_ILL_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 7 : Step 5: Read EventList attribute from the DUT.For this cluster the list is usually empty but " "it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -57924,8 +59439,8 @@ class Test_TC_LVL_1_1 : public TestCommandBridge { // incorrect mTestIndex value observed when we get the response. switch (mTestIndex++) { case 0: - ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n"); - err = TestWaitForTheCommissionedDeviceToBeRetrieved_0(); + ChipLogProgress(chipTool, " ***** Test Step 0 : Step 0: Wait for the commissioned device to be retrieved\n"); + err = TestStep0WaitForTheCommissionedDeviceToBeRetrieved_0(); break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 1: Read the global attribute: ClusterRevision\n"); @@ -58170,7 +59685,7 @@ class Test_TC_LVL_1_1 : public TestCommandBridge { chip::Optional mEndpoint; chip::Optional mTimeout; - CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0() + CHIP_ERROR TestStep0WaitForTheCommissionedDeviceToBeRetrieved_0() { chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; @@ -65054,15 +66569,11 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("LUNIT.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("LUNIT.S.Afffc && !LUNIT.S.F00")) { + if (ShouldSkip(" !LUNIT.S.F00 ")) { NextTest(); return; } @@ -65071,7 +66582,7 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { case 3: ChipLogProgress( chipTool, " ***** Test Step 3 : Step 3: Given LUNIT.S.F00(TEMP) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("LUNIT.S.Afffc && LUNIT.S.F00")) { + if (ShouldSkip("LUNIT.S.F00")) { NextTest(); return; } @@ -65079,7 +66590,7 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65087,7 +66598,7 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65096,7 +66607,7 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { case 6: ChipLogProgress( chipTool, " ***** Test Step 6 : Step 4b: TH reads Feature dependent(LUNIT.S.F00) attribute in AttributeList\n"); - if (ShouldSkip("LUNIT.S.Afffb && LUNIT.S.F00")) { + if (ShouldSkip("LUNIT.S.F00")) { NextTest(); return; } @@ -65104,7 +66615,7 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 5: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && LUNIT.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65112,18 +66623,10 @@ class Test_TC_LUNIT_1_2 : public TestCommandBridge { return; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 6: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("LUNIT.S.Afff9")) { - NextTest(); - return; - } err = TestStep6ThReadsAcceptedCommandListFromDut_8(); break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 7: TH reads GeneratedCommandList from DUT\n"); - if (ShouldSkip("LUNIT.S.Afff8")) { - NextTest(); - return; - } err = TestStep7ThReadsGeneratedCommandListFromDut_9(); break; } @@ -65778,23 +67281,15 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("LTIME.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip("LTIME.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ThReadsTheFeatureMapFromDut_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65802,7 +67297,7 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && LTIME.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65811,7 +67306,7 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: TH reads optional attribute(ActiveCalendarType) in AttributeList from DUT\n"); - if (ShouldSkip("LTIME.S.Afffb && LTIME.S.A0001")) { + if (ShouldSkip("LTIME.S.A0001")) { NextTest(); return; } @@ -65820,7 +67315,7 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4c: TH reads optional attribute(SupportedCalendarTypes) in AttributeList from DUT\n"); - if (ShouldSkip("LTIME.S.Afffb && LTIME.S.A0002")) { + if (ShouldSkip("LTIME.S.A0002")) { NextTest(); return; } @@ -65828,7 +67323,7 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { break; case 7: ChipLogProgress(chipTool, " ***** Test Step 7 : Step 5: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && LTIME.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -65836,18 +67331,10 @@ class Test_TC_LTIME_1_2 : public TestCommandBridge { return; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 6: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("LTIME.S.Afff9")) { - NextTest(); - return; - } err = TestStep6ThReadsAcceptedCommandListFromDut_8(); break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 7: TH reads GeneratedCommandList from DUT\n"); - if (ShouldSkip("LTIME.S.Afff8")) { - NextTest(); - return; - } err = TestStep7ThReadsGeneratedCommandListFromDut_9(); break; } @@ -78900,20 +80387,75 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { err = TestStep4cThReadsTheOptionalAttributeOnModeInAttributeListFromTheDut_7(); break; case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Read the global attribute: EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 8 : Step 4d: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4dThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8(); + break; + case 9: + ChipLogProgress(chipTool, " ***** Test Step 9 : Step 5a: TH reads from the DUT the EventList attribute\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 5: Read the global attribute: AcceptedCommandList\n"); - err = TestStep5ReadTheGlobalAttributeAcceptedCommandList_9(); - break; case 10: - ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6: Read the global attribute: GeneratedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeGeneratedCommandList_10(); + ChipLogProgress(chipTool, + " ***** Test Step 10 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_10(); + break; + case 11: + ChipLogProgress(chipTool, " ***** Test Step 11 : Step 6a: TH reads AcceptedCommandList attribute from DUT\n"); + err = TestStep6aThReadsAcceptedCommandListAttributeFromDut_11(); + break; + case 12: + ChipLogProgress(chipTool, + " ***** Test Step 12 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " + "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + break; + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7a: TH reads GeneratedCommandList attribute from DUT\n"); + err = TestStep7aThReadsGeneratedCommandListAttributeFromDut_13(); + break; + case 14: + ChipLogProgress(chipTool, + " ***** Test Step 14 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14(); break; } @@ -78959,6 +80501,18 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { case 10: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 11: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -78972,7 +80526,7 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 11; + const uint16_t mTestCount = 15; chip::Optional mNodeId; chip::Optional mCluster; @@ -79146,7 +80700,29 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep5ReadTheGlobalAttributeAcceptedCommandList_9() + CHIP_ERROR + TestStep4dThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_10() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aThReadsAcceptedCommandListAttributeFromDut_11() { MTRBaseDevice * device = GetDevice("alpha"); @@ -79154,7 +80730,7 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 5: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: TH reads AcceptedCommandList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -79167,7 +80743,18 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeGeneratedCommandList_10() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aThReadsGeneratedCommandListAttributeFromDut_13() { MTRBaseDevice * device = GetDevice("alpha"); @@ -79175,7 +80762,7 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: TH reads GeneratedCommandList attribute from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -79190,6 +80777,17 @@ class Test_TC_MOD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class OTA_SuccessfulTransfer : public TestCommandBridge { @@ -80585,30 +82183,75 @@ class Test_TC_OO_1_1 : public TestCommandBridge { break; case 8: ChipLogProgress(chipTool, - " ***** Test Step 8 : Step 5: Read EventList attribute from the DUT.For this cluster the list is usually empty but " - "it can contain manufacturer specific event IDs.\n"); + " ***** Test Step 8 : Step 4c: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } - err = TestStep5ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_8(); + err = TestStep4cThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8(); break; case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 6a: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_9(); + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); break; case 10: + ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_10(); + break; + case 11: ChipLogProgress( - chipTool, " ***** Test Step 10 : Step 6b: Read the feature dependent(OO.S.F00) commands in AcceptedCommandList\n"); + chipTool, " ***** Test Step 11 : Step 6b: Read the feature dependent(OO.S.F00) commands in AcceptedCommandList\n"); if (ShouldSkip("OO.S.F00")) { NextTest(); return; } - err = TestStep6bReadTheFeatureDependentOOSF00CommandsInAcceptedCommandList_10(); + err = TestStep6bReadTheFeatureDependentOOSF00CommandsInAcceptedCommandList_11(); break; - case 11: - ChipLogProgress(chipTool, " ***** Test Step 11 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_11(); + case 12: + ChipLogProgress(chipTool, + " ***** Test Step 12 : Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " + "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " + "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6cThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + break; + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_13(); + break; + case 14: + ChipLogProgress(chipTool, + " ***** Test Step 14 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14(); break; } @@ -80657,6 +82300,15 @@ class Test_TC_OO_1_1 : public TestCommandBridge { case 11: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 12: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -80670,7 +82322,7 @@ class Test_TC_OO_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 12; + const uint16_t mTestCount = 15; chip::Optional mNodeId; chip::Optional mCluster; @@ -80847,7 +82499,18 @@ class Test_TC_OO_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_8() + TestStep4cThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_8() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -80857,7 +82520,7 @@ class Test_TC_OO_1_1 : public TestCommandBridge { return UserPrompt("alpha", value); } - CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_9() + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_10() { MTRBaseDevice * device = GetDevice("alpha"); @@ -80880,7 +82543,7 @@ class Test_TC_OO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bReadTheFeatureDependentOOSF00CommandsInAcceptedCommandList_10() + CHIP_ERROR TestStep6bReadTheFeatureDependentOOSF00CommandsInAcceptedCommandList_11() { MTRBaseDevice * device = GetDevice("alpha"); @@ -80903,7 +82566,18 @@ class Test_TC_OO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_11() + CHIP_ERROR + TestStep6cThReadsAcceptedCommandListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_13() { MTRBaseDevice * device = GetDevice("alpha"); @@ -80911,7 +82585,7 @@ class Test_TC_OO_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -80926,6 +82600,17 @@ class Test_TC_OO_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_OO_2_1 : public TestCommandBridge { @@ -82821,61 +84506,122 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { err = TestStep4bThReadsFromTheDutTheOptionalAttributeCountdownTimeInTheAttributeListFromTheDut_5(); break; case 6: - ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5a: TH reads from the DUT the EventList attribute.\n"); + ChipLogProgress(chipTool, + " ***** Test Step 6 : Step 4c: TH reads AttributeList attribute from DUT. 1.The list MAY contain values in the " + "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed MEI range " + "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " + "invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4cThReadsAttributeListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6(); + break; + case 7: + ChipLogProgress(chipTool, " ***** Test Step 7 : Step 5a: TH reads from the DUT the EventList attribute.\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 7: + case 8: ChipLogProgress(chipTool, - " ***** Test Step 7 : Step 5b: TH reads from the DUT the optional event(OperationCompletion) in EventList.\n"); + " ***** Test Step 8 : Step 5b: TH reads from the DUT the optional event(OperationCompletion) in EventList.\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED && OPSTATE.S.E01")) { NextTest(); return; } NextTest(); return; - case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 6a: Read the optional command(Start) in AcceptedCommandList\n"); + case 9: + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 5c: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5cThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); + break; + case 10: + ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6a: Read the optional command(Start) in AcceptedCommandList\n"); if (ShouldSkip("OPSTATE.S.C02")) { NextTest(); return; } - err = TestStep6aReadTheOptionalCommandStartInAcceptedCommandList_8(); + err = TestStep6aReadTheOptionalCommandStartInAcceptedCommandList_10(); break; - case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 6b: Read the optional command(Stop) in AcceptedCommandList\n"); + case 11: + ChipLogProgress(chipTool, " ***** Test Step 11 : Step 6b: Read the optional command(Stop) in AcceptedCommandList\n"); if (ShouldSkip("OPSTATE.S.C01")) { NextTest(); return; } - err = TestStep6bReadTheOptionalCommandStopInAcceptedCommandList_9(); + err = TestStep6bReadTheOptionalCommandStopInAcceptedCommandList_11(); break; - case 10: - ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6c: Read the optional command(Pause) in AcceptedCommandList\n"); + case 12: + ChipLogProgress(chipTool, " ***** Test Step 12 : Step 6c: Read the optional command(Pause) in AcceptedCommandList\n"); if (ShouldSkip("OPSTATE.S.C00")) { NextTest(); return; } - err = TestStep6cReadTheOptionalCommandPauseInAcceptedCommandList_10(); + err = TestStep6cReadTheOptionalCommandPauseInAcceptedCommandList_12(); break; - case 11: - ChipLogProgress(chipTool, " ***** Test Step 11 : Step 6d: Read the optional command(Resume) in AcceptedCommandList\n"); + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6d: Read the optional command(Resume) in AcceptedCommandList\n"); if (ShouldSkip("OPSTATE.S.C03")) { NextTest(); return; } - err = TestStep6dReadTheOptionalCommandResumeInAcceptedCommandList_11(); + err = TestStep6dReadTheOptionalCommandResumeInAcceptedCommandList_13(); break; - case 12: - ChipLogProgress(chipTool, " ***** Test Step 12 : Step 7: Read the global attribute: GeneratedCommandList\n"); + case 14: + ChipLogProgress(chipTool, + " ***** Test Step 14 : Step 6e: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6eThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14(); + break; + case 15: + ChipLogProgress(chipTool, " ***** Test Step 15 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + if (ShouldSkip("!OPSTATE.S.C00 || !OPSTATE.S.C01 || !OPSTATE.S.C02 || !OPSTATE.S.C03")) { + NextTest(); + return; + } + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_15(); + break; + case 16: + ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7a: Read the global attribute: GeneratedCommandList\n"); if (ShouldSkip("(OPSTATE.S.C00 || OPSTATE.S.C01 || OPSTATE.S.C02 || OPSTATE.S.C03)")) { NextTest(); return; } - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_12(); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_16(); + break; + case 17: + ChipLogProgress(chipTool, + " ***** Test Step 17 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17(); break; } @@ -82927,6 +84673,21 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 14: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 15: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 16: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -82940,7 +84701,7 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 13; + const uint16_t mTestCount = 18; chip::Optional mNodeId; chip::Optional mCluster; @@ -83087,7 +84848,29 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6aReadTheOptionalCommandStartInAcceptedCommandList_8() + CHIP_ERROR + TestStep4cThReadsAttributeListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_6() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5cThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheOptionalCommandStartInAcceptedCommandList_10() { MTRBaseDevice * device = GetDevice("alpha"); @@ -83109,7 +84892,7 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bReadTheOptionalCommandStopInAcceptedCommandList_9() + CHIP_ERROR TestStep6bReadTheOptionalCommandStopInAcceptedCommandList_11() { MTRBaseDevice * device = GetDevice("alpha"); @@ -83130,7 +84913,7 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6cReadTheOptionalCommandPauseInAcceptedCommandList_10() + CHIP_ERROR TestStep6cReadTheOptionalCommandPauseInAcceptedCommandList_12() { MTRBaseDevice * device = GetDevice("alpha"); @@ -83152,7 +84935,7 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6dReadTheOptionalCommandResumeInAcceptedCommandList_11() + CHIP_ERROR TestStep6dReadTheOptionalCommandResumeInAcceptedCommandList_13() { MTRBaseDevice * device = GetDevice("alpha"); @@ -83174,7 +84957,18 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_12() + CHIP_ERROR + TestStep6eThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_15() { MTRBaseDevice * device = GetDevice("alpha"); @@ -83182,7 +84976,31 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); + + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + + { + id actualValue = value; + VerifyOrReturn(CheckValue("GeneratedCommandList", [actualValue count], static_cast(0))); + } + + VerifyOrReturn(CheckConstraintType("generatedCommandList", "list", "list")); + NextTest(); + }]; + + return CHIP_NO_ERROR; + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_16() + { + + MTRBaseDevice * device = GetDevice("alpha"); + __auto_type * cluster = [[MTRBaseClusterOperationalState alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; + VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + + [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -83194,6 +85012,17 @@ class Test_TC_OPSTATE_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_PS_1_1 : public TestCommandBridge { @@ -83382,7 +85211,7 @@ class Test_TC_PS_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7e: Read EventList attribute from the DUT.For this cluster the list is usually empty " "but it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -84730,7 +86559,7 @@ class Test_TC_PS_2_1 : public TestCommandBridge { VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - VerifyOrReturn(CheckConstraintType("batCommonDesignation", "enum16", "int32u")); + VerifyOrReturn(CheckConstraintType("batCommonDesignation", "enum16", "enum16")); VerifyOrReturn(CheckConstraintMinValue("batCommonDesignation", [value unsignedShortValue], 0U)); VerifyOrReturn(CheckConstraintMaxValue("batCommonDesignation", [value unsignedShortValue], 80U)); @@ -84792,7 +86621,7 @@ class Test_TC_PS_2_1 : public TestCommandBridge { VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - VerifyOrReturn(CheckConstraintType("batApprovedChemistry", "enum16", "int32u")); + VerifyOrReturn(CheckConstraintType("batApprovedChemistry", "enum16", "enum16")); VerifyOrReturn(CheckConstraintMinValue("batApprovedChemistry", [value unsignedShortValue], 0U)); VerifyOrReturn(CheckConstraintMaxValue("batApprovedChemistry", [value unsignedShortValue], 32U)); @@ -85021,32 +86850,28 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - if (ShouldSkip("PRS.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: Read the global attribute: FeatureMap\n"); - if (ShouldSkip("PRS.S.Afffc && !PRS.S.F00")) { + ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n"); + if (ShouldSkip(" !PRS.S.F00 ")) { NextTest(); return; } - err = TestStep3aReadTheGlobalAttributeFeatureMap_2(); + err = TestStep3ReadTheGlobalAttributeFeatureMap_2(); break; case 3: ChipLogProgress( - chipTool, " ***** Test Step 3 : Step 3b: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PRS.S.F00 && PRS.S.Afffc")) { + chipTool, " ***** Test Step 3 : Step 3: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set\n"); + if (ShouldSkip("PRS.S.F00")) { NextTest(); return; } - err = TestStep3bGivenPrssf00extEnsureFeaturemapHasTheCorrectBitSet_3(); + err = TestStep3GivenPrssf00extEnsureFeaturemapHasTheCorrectBitSet_3(); break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global mandatory attribute: AttributeList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PRS.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -85054,7 +86879,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: Read the global mandatory attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && PRS.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -85062,7 +86887,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 6: ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4b: Read the optional attribute(ScaledValue) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0010 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0010")) { NextTest(); return; } @@ -85071,7 +86896,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { case 7: ChipLogProgress( chipTool, " ***** Test Step 7 : Step 4c: Read the optional attribute(MinScaledValue) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0011 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0011")) { NextTest(); return; } @@ -85080,7 +86905,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { case 8: ChipLogProgress( chipTool, " ***** Test Step 8 : Step 4d: Read the optional attribute(MaxScaledValue) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0012 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0012")) { NextTest(); return; } @@ -85088,7 +86913,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4e: Read the optional attribute(Scale) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0014 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0014")) { NextTest(); return; } @@ -85096,7 +86921,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 10: ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4f: Read the optional attribute(Tolerance) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0003 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0003")) { NextTest(); return; } @@ -85105,7 +86930,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { case 11: ChipLogProgress( chipTool, " ***** Test Step 11 : Step 4g: Read the optional attribute(ScaledTolerance) in AttributeList\n"); - if (ShouldSkip("PRS.S.A0013 && PRS.S.Afffb")) { + if (ShouldSkip("PRS.S.A0013")) { NextTest(); return; } @@ -85119,7 +86944,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PRS.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -85127,16 +86952,17 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { break; case 13: ChipLogProgress(chipTool, - " ***** Test Step 13 : Step 5: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PRS.S.Afffa")) { + " ***** Test Step 13 : Step 5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); + err = TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); break; case 14: ChipLogProgress(chipTool, @@ -85145,7 +86971,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PRS.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -85158,7 +86984,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PRS.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -85277,7 +87103,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3aReadTheGlobalAttributeFeatureMap_2() + CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2() { MTRBaseDevice * device = GetDevice("alpha"); @@ -85287,7 +87113,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3a: Read the global attribute: FeatureMap Error: %@", err); + NSLog(@"Step 3: Read the global attribute: FeatureMap Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -85303,7 +87129,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep3bGivenPrssf00extEnsureFeaturemapHasTheCorrectBitSet_3() + CHIP_ERROR TestStep3GivenPrssf00extEnsureFeaturemapHasTheCorrectBitSet_3() { MTRBaseDevice * device = GetDevice("alpha"); @@ -85313,7 +87139,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 3b: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set Error: %@", err); + NSLog(@"Step 3: Given PRS.S.F00(EXT) ensure featuremap has the correct bit set Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -85535,7 +87361,7 @@ class Test_TC_PRS_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5ThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() + TestStep5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -86239,16 +88065,11 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision attribute from the DUT\n"); - if (ShouldSkip("PCC.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionAttributeFromTheDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads the FeatureMap attribute from the DUT\n"); - if (ShouldSkip(" PCC.S.Afffc && !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 && !PCC.S.F04 && !PCC.S.F05 && " - "!PCC.S.F06 ")) { + if (ShouldSkip(" !PCC.S.F00 && !PCC.S.F01 && !PCC.S.F02 && !PCC.S.F03 && !PCC.S.F04 && !PCC.S.F05 && !PCC.S.F06 ")) { NextTest(); return; } @@ -86257,7 +88078,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 3: ChipLogProgress( chipTool, " ***** Test Step 3 : Step 3b: Given PCC.S.F00(PRSCONST) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F00 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F00")) { NextTest(); return; } @@ -86266,7 +88087,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 4: ChipLogProgress( chipTool, " ***** Test Step 4 : Step 3c: Given PCC.S.F01(PRSCOMP) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F01 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F01")) { NextTest(); return; } @@ -86275,7 +88096,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 5: ChipLogProgress( chipTool, " ***** Test Step 5 : Step 3d: Given PCC.S.F02(FLW) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F02 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F02")) { NextTest(); return; } @@ -86284,7 +88105,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 6: ChipLogProgress( chipTool, " ***** Test Step 6 : Step 3e: Given PCC.S.F03(SPD) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F03 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F03")) { NextTest(); return; } @@ -86293,7 +88114,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 7: ChipLogProgress( chipTool, " ***** Test Step 7 : Step 3f: Given PCC.S.F04(TEMP) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F04 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F04")) { NextTest(); return; } @@ -86302,7 +88123,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 8: ChipLogProgress( chipTool, " ***** Test Step 8 : Step 3g: Given PCC.S.F05(AUTO) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F05 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F05")) { NextTest(); return; } @@ -86311,7 +88132,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 9: ChipLogProgress( chipTool, " ***** Test Step 9 : Step 3h: Given PCC.S.F06(LOCAL) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("PCC.S.F06 && PCC.S.Afffc")) { + if (ShouldSkip("PCC.S.F06")) { NextTest(); return; } @@ -86319,7 +88140,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { break; case 10: ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4a: TH reads the AttributeList attribute from the DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -86327,7 +88148,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { break; case 11: ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4a: TH reads the AttributeList attribute from the DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && PCC.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -86337,7 +88158,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4b: TH reads optional attribute(MinConstPressure) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0003 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0003")) { NextTest(); return; } @@ -86347,7 +88168,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4c TH reads optional attribute(MaxConstPressure) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0004 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0004")) { NextTest(); return; } @@ -86357,7 +88178,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4d: TH reads optional attribute(MinCompPressure) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0005 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0005")) { NextTest(); return; } @@ -86367,7 +88188,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4e: TH reads optional attribute(MaxCompPressure) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0006 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0006")) { NextTest(); return; } @@ -86377,7 +88198,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4f: TH reads optional attribute(MinConstSpeed) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0007 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0007")) { NextTest(); return; } @@ -86387,7 +88208,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 17 : Step 4g: TH reads optional attribute(MaxConstSpeed) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0008 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0008")) { NextTest(); return; } @@ -86397,7 +88218,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4h: TH reads optional attribute(MinConstFlow) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0009 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0009")) { NextTest(); return; } @@ -86407,7 +88228,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4i: TH reads optional attribute(MaxConstFlow) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A000a && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A000a")) { NextTest(); return; } @@ -86417,7 +88238,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 20 : Step 4j: TH reads optional attribute(MinConstTemp) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A000b && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A000b")) { NextTest(); return; } @@ -86427,7 +88248,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 21 : Step 4k: TH reads optional attribute(MaxConstTemp) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A000c && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A000c")) { NextTest(); return; } @@ -86436,7 +88257,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 22: ChipLogProgress(chipTool, " ***** Test Step 22 : Step 4l: TH reads optional attribute(PumpStatus) attribute in AttributeList from the DUT\n"); - if (ShouldSkip("PCC.S.A0010 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0010")) { NextTest(); return; } @@ -86445,7 +88266,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 23: ChipLogProgress(chipTool, " ***** Test Step 23 : Step 4m: TH reads optional attribute(Speed) attribute in AttributeList from the DUT\n"); - if (ShouldSkip("PCC.S.A0014 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0014")) { NextTest(); return; } @@ -86455,7 +88276,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 24 : Step 4n: TH reads optional attribute(LifetimeRunningHours) attribute in AttributeList from " "the DUT\n"); - if (ShouldSkip("PCC.S.A0015 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0015")) { NextTest(); return; } @@ -86464,7 +88285,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 25: ChipLogProgress(chipTool, " ***** Test Step 25 : Step 4o: TH reads optional attribute(Power) attribute in AttributeList from the DUT\n"); - if (ShouldSkip("PCC.S.A0016 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0016")) { NextTest(); return; } @@ -86474,7 +88295,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 26 : Step 4p: TH reads optional attribute(LifetimeEnergyConsumed) attribute in AttributeList " "from the DUT\n"); - if (ShouldSkip("PCC.S.A0017 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0017")) { NextTest(); return; } @@ -86484,7 +88305,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 27 : Step 4q: TH reads optional attribute(ControlMode) attribute in AttributeList from the " "DUT\n"); - if (ShouldSkip("PCC.S.A0021 && PCC.S.Afffb")) { + if (ShouldSkip("PCC.S.A0021")) { NextTest(); return; } @@ -86497,7 +88318,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " "invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PCC.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -86505,9 +88326,9 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { break; case 29: ChipLogProgress(chipTool, " ***** Test Step 29 : Step 5a: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.Afffa && !PCC.S.E00 && !PCC.S.E01 && !PCC.S.E02 && !PCC.S.E03 && " - "!PCC.S.E04 && !PCC.S.E05 && !PCC.S.E06 && !PCC.S.E07 && !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && " - "!PCC.S.E0b && !PCC.S.E0c && !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 ")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !PCC.S.E00 && !PCC.S.E01 && !PCC.S.E02 && !PCC.S.E03 && !PCC.S.E04 && " + "!PCC.S.E05 && !PCC.S.E06 && !PCC.S.E07 && !PCC.S.E08 && !PCC.S.E09 && !PCC.S.E0a && !PCC.S.E0b && " + "!PCC.S.E0c && !PCC.S.E0d && !PCC.S.E0e && !PCC.S.E0f && !PCC.S.E10 ")) { NextTest(); return; } @@ -86516,7 +88337,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 30: ChipLogProgress(chipTool, " ***** Test Step 30 : Step 5b: TH reads from the DUT the EventList optional (SupplyVoltageLow)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E00 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E00")) { NextTest(); return; } @@ -86525,7 +88346,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 31: ChipLogProgress(chipTool, " ***** Test Step 31 : Step 5c: TH reads from the DUT the EventList optional (SupplyVoltageHigh)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E01 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E01")) { NextTest(); return; } @@ -86534,7 +88355,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 32: ChipLogProgress(chipTool, " ***** Test Step 32 : Step 5d: TH reads from the DUT the EventList optional (PowerMissingPhase)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E02 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E02")) { NextTest(); return; } @@ -86543,7 +88364,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 33: ChipLogProgress(chipTool, " ***** Test Step 33 : Step 5e: TH reads from the DUT the EventList optional (SystemPressureLow)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E03 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E03")) { NextTest(); return; } @@ -86552,7 +88373,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 34: ChipLogProgress(chipTool, " ***** Test Step 34 : Step 5f: TH reads from the DUT the EventList optional (SystemPressureHigh)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E04 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E04")) { NextTest(); return; } @@ -86561,7 +88382,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 35: ChipLogProgress( chipTool, " ***** Test Step 35 : Step 5g: TH reads from the DUT the EventList optional (DryRunning)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E05 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E05")) { NextTest(); return; } @@ -86570,7 +88391,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 36: ChipLogProgress(chipTool, " ***** Test Step 36 : Step 5h: TH reads from the DUT the EventList optional (MotorTemperatureHigh)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E06 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E06")) { NextTest(); return; } @@ -86579,7 +88400,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 37: ChipLogProgress(chipTool, " ***** Test Step 37 : Step 5i: TH reads from the DUT the EventList optional (PumpMotorFatalFailure)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E07 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E07")) { NextTest(); return; } @@ -86589,7 +88410,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 38 : Step 5j: TH reads from the DUT the EventList optional " "(ElectronicTemperatureHigh)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E08 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E08")) { NextTest(); return; } @@ -86598,7 +88419,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 39: ChipLogProgress( chipTool, " ***** Test Step 39 : Step 5k: TH reads from the DUT the EventList optional (PumpBlocked)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E09 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E09")) { NextTest(); return; } @@ -86607,7 +88428,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 40: ChipLogProgress(chipTool, " ***** Test Step 40 : Step 5l: TH reads from the DUT the EventList optional (SensorFailure)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0a && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0a")) { NextTest(); return; } @@ -86617,7 +88438,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 41 : Step 5m: TH reads from the DUT the EventList optional " "(ElectronicNonFatalFailure)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0b && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0b")) { NextTest(); return; } @@ -86626,7 +88447,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 42: ChipLogProgress(chipTool, " ***** Test Step 42 : Step 5n: TH reads from the DUT the EventList optional (ElectronicFatalFailure)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0c && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0c")) { NextTest(); return; } @@ -86635,7 +88456,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 43: ChipLogProgress( chipTool, " ***** Test Step 43 : Step 5o: TH reads from the DUT the EventList optional (GeneralFault)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0d && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0d")) { NextTest(); return; } @@ -86644,7 +88465,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 44: ChipLogProgress( chipTool, " ***** Test Step 44 : Step 5p: TH reads from the DUT the EventList optional (Leakage)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0e && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0e")) { NextTest(); return; } @@ -86653,7 +88474,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 45: ChipLogProgress( chipTool, " ***** Test Step 45 : Step 5q: TH reads from the DUT the EventList optional (AirDetection)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0f && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E0f")) { NextTest(); return; } @@ -86662,7 +88483,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { case 46: ChipLogProgress(chipTool, " ***** Test Step 46 : Step 5r: TH reads from the DUT the EventList optional (TurbineOperation)attribute.\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E10 && PCC.S.Afffa")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PCC.S.E10")) { NextTest(); return; } @@ -86670,17 +88491,17 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { return; case 47: ChipLogProgress(chipTool, - " ***** Test Step 47 : Step 5s: TH reads EventList attribute from DUT. 1.The list SHALL NOT contain any additional " - "values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2. The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PCC.S.Afffa")) { + " ***** Test Step 47 : Step 5s: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5sThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_47(); + err = TestStep5sThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_47(); break; case 48: ChipLogProgress(chipTool, @@ -86689,7 +88510,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PCC.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -86702,7 +88523,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && PCC.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -87547,7 +89368,7 @@ class Test_TC_PCC_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5sThReadsEventListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_47() + TestStep5sThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_47() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -90107,7 +91928,7 @@ class Test_TC_RH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but " "it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -93596,8 +95417,7 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { break; case 11: ChipLogProgress(chipTool, " ***** Test Step 11 : Step 5a: Read the global attribute: EventList \n"); - if (ShouldSkip( - "PICS_EVENT_LIST_ENABLED && !SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 ")) { + if (ShouldSkip("!SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 ")) { NextTest(); return; } @@ -93623,7 +95443,7 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5d: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & " "!SWTCH.S.F04(MSM)\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04")) { + if (ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && !SWTCH.S.F04 ")) { NextTest(); return; } @@ -93633,7 +95453,7 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5e: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & " "!SWTCH.S.F04(MSM)\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && !SWTCH.S.F04")) { + if (ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && !SWTCH.S.F04 ")) { NextTest(); return; } @@ -93643,7 +95463,7 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5f: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & !SWTCH.S.F03(MSL) & " "SWTCH.S.F04(MSM) \n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && SWTCH.S.F04")) { + if (ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && !SWTCH.S.F03 && SWTCH.S.F04 ")) { NextTest(); return; } @@ -93653,7 +95473,7 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 17 : Step 5g: Read EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) & SWTCH.S.F03(MSL) & " "SWTCH.S.F04(MSM) \n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && SWTCH.S.F04")) { + if (ShouldSkip(" PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03 && SWTCH.S.F04 ")) { NextTest(); return; } @@ -93997,6 +95817,11 @@ class Test_TC_SWTCH_1_1 : public TestCommandBridge { VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + { + id actualValue = value; + VerifyOrReturn(CheckValue("AcceptedCommandList", [actualValue count], static_cast(0))); + } + VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list")); NextTest(); }]; @@ -94156,12 +95981,20 @@ class Test_TC_RVCOPSTATE_1_1 : public TestCommandBridge { break; case 12: ChipLogProgress(chipTool, " ***** Test Step 12 : Step 7: Read the global attribute: GeneratedCommandList\n"); - if (ShouldSkip(" RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp || RVCOPSTATE.S.C03.Rsp ")) { + if (ShouldSkip(" !RVCOPSTATE.S.C00.Rsp && !RVCOPSTATE.S.C01.Rsp && !RVCOPSTATE.S.C02.Rsp && !RVCOPSTATE.S.C03.Rsp ")) { NextTest(); return; } err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_12(); break; + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7: Read the global attribute: GeneratedCommandList\n"); + if (ShouldSkip(" RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp || RVCOPSTATE.S.C03.Rsp ")) { + NextTest(); + return; + } + err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_13(); + break; } if (CHIP_NO_ERROR != err) { @@ -94212,6 +96045,9 @@ class Test_TC_RVCOPSTATE_1_1 : public TestCommandBridge { case 12: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 13: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -94225,7 +96061,7 @@ class Test_TC_RVCOPSTATE_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 13; + const uint16_t mTestCount = 14; chip::Optional mNodeId; chip::Optional mCluster; @@ -94486,6 +96322,32 @@ class Test_TC_RVCOPSTATE_1_1 : public TestCommandBridge { queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { + NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + + { + id actualValue = value; + VerifyOrReturn(CheckValue("GeneratedCommandList", [actualValue count], static_cast(0))); + } + + VerifyOrReturn(CheckConstraintType("generatedCommandList", "list", "list")); + NextTest(); + }]; + + return CHIP_NO_ERROR; + } + + CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_13() + { + + MTRBaseDevice * device = GetDevice("alpha"); + __auto_type * cluster = [[MTRBaseClusterRVCOperationalState alloc] initWithDevice:device + endpointID:@(1) + queue:mCallbackQueue]; + VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); @@ -94587,7 +96449,7 @@ class Test_TC_TMP_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but " "it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -95647,7 +97509,7 @@ class Test_TC_TSTAT_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 58 : Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty " "but it can contain manufacturer specific event IDs.\n"); - if (ShouldSkip("PICS_USER_PROMPT")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -97155,22 +99017,64 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { err = TestStep4ReadTheGlobalAttributeAttributeList_4(); break; case 5: - ChipLogProgress(chipTool, " ***** Test Step 5 : Step 5: Read the global attribute: AcceptedCommandList\n"); - err = TestStep5ReadTheGlobalAttributeAcceptedCommandList_5(); + ChipLogProgress(chipTool, + " ***** Test Step 5 : Step 4b: Read the global attribute: AttributeList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4bReadTheGlobalAttributeAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_5(); break; case 6: - ChipLogProgress(chipTool, " ***** Test Step 6 : Step 6: Read the global attribute: GeneratedCommandList\n"); - err = TestStep6ReadTheGlobalAttributeGeneratedCommandList_6(); + ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep5aReadTheGlobalAttributeAcceptedCommandList_6(); break; case 7: ChipLogProgress(chipTool, - " ***** Test Step 7 : Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty but " - "it can contain manufacturer specific event IDs.\n"); + " ***** Test Step 7 : Step 5b: Read the global attribute: AcceptedCommandList. 1. The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } - err = TestStep7ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_7(); + err = TestStep5bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7(); + break; + case 8: + ChipLogProgress(chipTool, " ***** Test Step 8 : Step 6a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeGeneratedCommandList_8(); + break; + case 9: + ChipLogProgress(chipTool, + " ***** Test Step 9 : Step 6b: Read the global attribute: GeneratedCommandList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9(); + break; + case 10: + ChipLogProgress(chipTool, + " ***** Test Step 10 : Step 7: Read EventList attribute from the DUT.For this cluster the list is usually empty " + "but it can contain manufacturer specific event IDs.\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep7ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_10(); break; } @@ -97207,6 +99111,15 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { case 7: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 8: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 9: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 10: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -97220,7 +99133,7 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 8; + const uint16_t mTestCount = 11; chip::Optional mNodeId; chip::Optional mCluster; @@ -97348,7 +99261,18 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep5ReadTheGlobalAttributeAcceptedCommandList_5() + CHIP_ERROR + TestStep4bReadTheGlobalAttributeAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_5() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep5aReadTheGlobalAttributeAcceptedCommandList_6() { MTRBaseDevice * device = GetDevice("alpha"); @@ -97358,7 +99282,7 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 5: Read the global attribute: AcceptedCommandList Error: %@", err); + NSLog(@"Step 5a: Read the global attribute: AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -97374,7 +99298,18 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ReadTheGlobalAttributeGeneratedCommandList_6() + CHIP_ERROR + TestStep5bReadTheGlobalAttributeAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_7() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeGeneratedCommandList_8() { MTRBaseDevice * device = GetDevice("alpha"); @@ -97384,7 +99319,7 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -97401,7 +99336,18 @@ class Test_TC_TSUIC_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep7ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_7() + TestStep6bReadTheGlobalAttributeGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_9() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep7ReadEventListAttributeFromTheDUTForThisClusterTheListIsUsuallyEmptyButItCanContainManufacturerSpecificEventIDs_10() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -99013,7 +100959,7 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { break; case 15: ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5a: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGTHREAD.S.E00 && !DGTHREAD.S.E01 ")) { + if (ShouldSkip(" !DGTHREAD.S.E00 && !DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -99022,7 +100968,7 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { case 16: ChipLogProgress( chipTool, " ***** Test Step 16 : Step 5b: TH reads DGTHREAD.S.E00(ConnectionStatus) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E00")) { + if (ShouldSkip("DGTHREAD.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -99031,31 +100977,71 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { case 17: ChipLogProgress( chipTool, " ***** Test Step 17 : Step 5c: TH reads DGTHREAD.S.E01(NetworkFaultChange) event in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGTHREAD.S.E01")) { + if (ShouldSkip("DGTHREAD.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; case 18: - ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6a: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip(" !DGTHREAD.S.F01 ")) { + ChipLogProgress(chipTool, + " ***** Test Step 18 : Step 5d: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep6aThReadsAcceptedCommandListFromDut_18(); + err = TestStep5dThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_18(); break; case 19: - ChipLogProgress(chipTool, " ***** Test Step 19 : Step 6b: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("DGTHREAD.S.F01")) { + ChipLogProgress(chipTool, " ***** Test Step 19 : Step 6a: TH reads AcceptedCommandList from DUT\n"); + if (ShouldSkip(" !DGTHREAD.S.F01 ")) { NextTest(); return; } - err = TestStep6bThReadsAcceptedCommandListFromDut_19(); + err = TestStep6aThReadsAcceptedCommandListFromDut_19(); break; case 20: - ChipLogProgress(chipTool, " ***** Test Step 20 : Step 7: TH reads GeneratedCommandList from DUT\n"); - err = TestStep7ThReadsGeneratedCommandListFromDut_20(); + ChipLogProgress(chipTool, " ***** Test Step 20 : Step 6b: TH reads AcceptedCommandList from DUT\n"); + if (ShouldSkip("DGTHREAD.S.F01")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListFromDut_20(); + break; + case 21: + ChipLogProgress(chipTool, + " ***** Test Step 21 : Step 6c: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6cThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_21(); + break; + case 22: + ChipLogProgress(chipTool, " ***** Test Step 22 : Step 7a: TH reads GeneratedCommandList from DUT\n"); + err = TestStep7aThReadsGeneratedCommandListFromDut_22(); + break; + case 23: + ChipLogProgress(chipTool, + " ***** Test Step 23 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_23(); break; } @@ -99131,6 +101117,15 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { case 20: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 21: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 22: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 23: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -99144,7 +101139,7 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 21; + const uint16_t mTestCount = 24; chip::Optional mNodeId; chip::Optional mCluster; @@ -99562,7 +101557,18 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6aThReadsAcceptedCommandListFromDut_18() + CHIP_ERROR + TestStep5dThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_18() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aThReadsAcceptedCommandListFromDut_19() { MTRBaseDevice * device = GetDevice("alpha"); @@ -99588,7 +101594,7 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bThReadsAcceptedCommandListFromDut_19() + CHIP_ERROR TestStep6bThReadsAcceptedCommandListFromDut_20() { MTRBaseDevice * device = GetDevice("alpha"); @@ -99611,7 +101617,18 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ThReadsGeneratedCommandListFromDut_20() + CHIP_ERROR + TestStep6cThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_21() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aThReadsGeneratedCommandListFromDut_22() { MTRBaseDevice * device = GetDevice("alpha"); @@ -99621,7 +101638,7 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: TH reads GeneratedCommandList from DUT Error: %@", err); + NSLog(@"Step 7a: TH reads GeneratedCommandList from DUT Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -99636,6 +101653,17 @@ class Test_TC_DGTHREAD_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_23() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { @@ -99853,116 +101881,172 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { err = TestTs4CheckForTscFeatureBasedAttributesNotInAttributeList_21(); break; case 22: - ChipLogProgress(chipTool, " ***** Test Step 22 : TS5: Check for mandatory events in EventList\n"); + ChipLogProgress(chipTool, + " ***** Test Step 22 : TS4: Check for mandatory attributes in AttributeList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestTs4CheckForMandatoryAttributesInAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_22(); + break; + case 23: + ChipLogProgress(chipTool, " ***** Test Step 23 : TS5: Check for mandatory events in EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 23: - ChipLogProgress(chipTool, " ***** Test Step 23 : TS5: Check for TZ feature-based events in EventList\n"); + case 24: + ChipLogProgress(chipTool, " ***** Test Step 24 : TS5: Check for TZ feature-based events in EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F00")) { NextTest(); return; } NextTest(); return; - case 24: - ChipLogProgress(chipTool, " ***** Test Step 24 : TS5: Check for TZ feature-based events not in EventList\n"); + case 25: + ChipLogProgress(chipTool, " ***** Test Step 25 : TS5: Check for TZ feature-based events not in EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !TIMESYNC.S.F00")) { NextTest(); return; } NextTest(); return; - case 25: - ChipLogProgress(chipTool, " ***** Test Step 25 : TS5: Check for TSC feature-based events in EventList\n"); + case 26: + ChipLogProgress(chipTool, " ***** Test Step 26 : TS5: Check for TSC feature-based events in EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED && TIMESYNC.S.F03")) { NextTest(); return; } NextTest(); return; - case 26: - ChipLogProgress(chipTool, " ***** Test Step 26 : TS5: Check for TSC feature-based events not in EventList\n"); + case 27: + ChipLogProgress(chipTool, " ***** Test Step 27 : TS5: Check for TSC feature-based events not in EventList\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !TIMESYNC.S.F03")) { NextTest(); return; } NextTest(); return; - case 27: - ChipLogProgress(chipTool, " ***** Test Step 27 : TS6: Check for mandatory commands in AcceptedCommandList\n"); - err = TestTs6CheckForMandatoryCommandsInAcceptedCommandList_27(); - break; case 28: - ChipLogProgress(chipTool, " ***** Test Step 28 : TS6: Check for TZ feature-based commands in AcceptedCommandList\n"); - if (ShouldSkip("TIMESYNC.S.F00")) { + ChipLogProgress(chipTool, + " ***** Test Step 28 : TS5: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_28(); + err = TestTs5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_28(); break; case 29: + ChipLogProgress(chipTool, " ***** Test Step 29 : TS6: Check for mandatory commands in AcceptedCommandList\n"); + err = TestTs6CheckForMandatoryCommandsInAcceptedCommandList_29(); + break; + case 30: + ChipLogProgress(chipTool, " ***** Test Step 30 : TS6: Check for TZ feature-based commands in AcceptedCommandList\n"); + if (ShouldSkip("TIMESYNC.S.F00")) { + NextTest(); + return; + } + err = TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_30(); + break; + case 31: ChipLogProgress( - chipTool, " ***** Test Step 29 : TS6: Check for TZ feature-based commands in not AcceptedCommandList\n"); + chipTool, " ***** Test Step 31 : TS6: Check for TZ feature-based commands in not AcceptedCommandList\n"); if (ShouldSkip("!TIMESYNC.S.F00")) { NextTest(); return; } - err = TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_29(); + err = TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_31(); break; - case 30: - ChipLogProgress(chipTool, " ***** Test Step 30 : TS6: Check for NTPC feature-based commands in AcceptedCommandList\n"); + case 32: + ChipLogProgress(chipTool, " ***** Test Step 32 : TS6: Check for NTPC feature-based commands in AcceptedCommandList\n"); if (ShouldSkip("TIMESYNC.S.F01")) { NextTest(); return; } - err = TestTs6CheckForNtpcFeatureBasedCommandsInAcceptedCommandList_30(); + err = TestTs6CheckForNtpcFeatureBasedCommandsInAcceptedCommandList_32(); break; - case 31: + case 33: ChipLogProgress( - chipTool, " ***** Test Step 31 : TS6: Check for NTPC feature-based commands in not AcceptedCommandList\n"); + chipTool, " ***** Test Step 33 : TS6: Check for NTPC feature-based commands in not AcceptedCommandList\n"); if (ShouldSkip("!TIMESYNC.S.F01")) { NextTest(); return; } - err = TestTs6CheckForNtpcFeatureBasedCommandsInNotAcceptedCommandList_31(); + err = TestTs6CheckForNtpcFeatureBasedCommandsInNotAcceptedCommandList_33(); break; - case 32: - ChipLogProgress(chipTool, " ***** Test Step 32 : TS6: Check for TSC feature-based commands in AcceptedCommandList\n"); + case 34: + ChipLogProgress(chipTool, " ***** Test Step 34 : TS6: Check for TSC feature-based commands in AcceptedCommandList\n"); if (ShouldSkip("TIMESYNC.S.F03")) { NextTest(); return; } - err = TestTs6CheckForTscFeatureBasedCommandsInAcceptedCommandList_32(); + err = TestTs6CheckForTscFeatureBasedCommandsInAcceptedCommandList_34(); break; - case 33: + case 35: ChipLogProgress( - chipTool, " ***** Test Step 33 : TS6: Check for TSC feature-based commands in not AcceptedCommandList\n"); + chipTool, " ***** Test Step 35 : TS6: Check for TSC feature-based commands in not AcceptedCommandList\n"); if (ShouldSkip("!TIMESYNC.S.F03")) { NextTest(); return; } - err = TestTs6CheckForTscFeatureBasedCommandsInNotAcceptedCommandList_33(); + err = TestTs6CheckForTscFeatureBasedCommandsInNotAcceptedCommandList_35(); break; - case 34: - ChipLogProgress(chipTool, " ***** Test Step 34 : TS6: Check for TZ feature-based commands in AcceptedCommandList\n"); + case 36: + ChipLogProgress(chipTool, + " ***** Test Step 36 : TS6: Check for mandatory commands in AcceptedCommandList. 1. The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF) 2. The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestTs6CheckForMandatoryCommandsInAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_36(); + break; + case 37: + ChipLogProgress(chipTool, " ***** Test Step 37 : TS7: Check for TZ feature-based commands in GeneratedCommandList\n"); if (ShouldSkip("TIMESYNC.S.F00")) { NextTest(); return; } - err = TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_34(); + err = TestTs7CheckForTzFeatureBasedCommandsInGeneratedCommandList_37(); break; - case 35: + case 38: ChipLogProgress( - chipTool, " ***** Test Step 35 : TS6: Check for TZ feature-based commands in not AcceptedCommandList\n"); + chipTool, " ***** Test Step 38 : TS7: Check for TZ feature-based commands in not GeneratedCommandList\n"); if (ShouldSkip("!TIMESYNC.S.F00")) { NextTest(); return; } - err = TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_35(); + err = TestTs7CheckForTzFeatureBasedCommandsInNotGeneratedCommandList_38(); + break; + case 39: + ChipLogProgress(chipTool, + " ***** Test Step 39 : TS7: Check for mandatory commands in GeneratedCommandList. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_00FF). 2.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestTs7CheckForMandatoryCommandsInGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_39(); break; } @@ -100083,6 +102167,18 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { case 35: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 36: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 37: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 38: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 39: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -100096,7 +102192,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 36; + const uint16_t mTestCount = 40; chip::Optional mNodeId; chip::Optional mCluster; @@ -100593,7 +102689,29 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForMandatoryCommandsInAcceptedCommandList_27() + CHIP_ERROR + TestTs4CheckForMandatoryAttributesInAttributeList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_22() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestTs5ThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_28() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestTs6CheckForMandatoryCommandsInAcceptedCommandList_29() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100615,7 +102733,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_28() + CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_30() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100638,7 +102756,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_29() + CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_31() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100661,7 +102779,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForNtpcFeatureBasedCommandsInAcceptedCommandList_30() + CHIP_ERROR TestTs6CheckForNtpcFeatureBasedCommandsInAcceptedCommandList_32() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100683,7 +102801,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForNtpcFeatureBasedCommandsInNotAcceptedCommandList_31() + CHIP_ERROR TestTs6CheckForNtpcFeatureBasedCommandsInNotAcceptedCommandList_33() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100705,7 +102823,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTscFeatureBasedCommandsInAcceptedCommandList_32() + CHIP_ERROR TestTs6CheckForTscFeatureBasedCommandsInAcceptedCommandList_34() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100727,7 +102845,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTscFeatureBasedCommandsInNotAcceptedCommandList_33() + CHIP_ERROR TestTs6CheckForTscFeatureBasedCommandsInNotAcceptedCommandList_35() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100749,7 +102867,18 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInAcceptedCommandList_34() + CHIP_ERROR + TestTs6CheckForMandatoryCommandsInAcceptedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_36() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestTs7CheckForTzFeatureBasedCommandsInGeneratedCommandList_37() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100759,7 +102888,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"TS6: Check for TZ feature-based commands in AcceptedCommandList Error: %@", err); + NSLog(@"TS7: Check for TZ feature-based commands in GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -100771,7 +102900,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestTs6CheckForTzFeatureBasedCommandsInNotAcceptedCommandList_35() + CHIP_ERROR TestTs7CheckForTzFeatureBasedCommandsInNotGeneratedCommandList_38() { MTRBaseDevice * device = GetDevice("alpha"); @@ -100781,7 +102910,7 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"TS6: Check for TZ feature-based commands in not AcceptedCommandList Error: %@", err); + NSLog(@"TS7: Check for TZ feature-based commands in not GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -100792,6 +102921,17 @@ class Test_TC_TIMESYNC_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestTs7CheckForMandatoryCommandsInGeneratedCommandList1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x000000ff2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_39() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_TIMESYNC_2_3 : public TestCommandBridge { @@ -101126,23 +103266,15 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n"); - if (ShouldSkip("ULABEL.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ReadTheGlobalAttributeClusterRevision_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n"); - if (ShouldSkip("ULABEL.S.Afffc")) { - NextTest(); - return; - } err = TestStep3ReadTheGlobalAttributeFeatureMap_2(); break; case 3: ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -101150,7 +103282,7 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && ULABEL.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -101164,7 +103296,7 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -101177,7 +103309,7 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afffa")) { + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -101190,7 +103322,7 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -101203,7 +103335,7 @@ class Test_TC_ULABEL_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && ULABEL.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -102271,7 +104403,7 @@ class Test_TC_DGWIFI_1_1 : public TestCommandBridge { break; case 13: ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7a: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGWIFI.S.E00 && !DGWIFI.S.E01 && !DGWIFI.S.E02 ")) { + if (ShouldSkip(" !DGWIFI.S.E00 && !DGWIFI.S.E01 && !DGWIFI.S.E02 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -102280,7 +104412,7 @@ class Test_TC_DGWIFI_1_1 : public TestCommandBridge { case 14: ChipLogProgress( chipTool, " ***** Test Step 14 : Step 7b: TH reads optional attribute (Disconnection) in EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E00")) { + if (ShouldSkip("DGWIFI.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -102289,7 +104421,7 @@ class Test_TC_DGWIFI_1_1 : public TestCommandBridge { case 15: ChipLogProgress(chipTool, " ***** Test Step 15 : Step 7c: TH reads optional attribute (AssociationFailure) in EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E01")) { + if (ShouldSkip("DGWIFI.S.E01 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -102298,7 +104430,7 @@ class Test_TC_DGWIFI_1_1 : public TestCommandBridge { case 16: ChipLogProgress( chipTool, " ***** Test Step 16 : Step 7d: TH reads optional attribute (ConnectionStatus) in EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGWIFI.S.E02")) { + if (ShouldSkip("DGWIFI.S.E02 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -103663,15 +105795,11 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 1: ChipLogProgress( chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the (0xFFFD) ClusterRevision attribute\n"); - if (ShouldSkip("WNCV.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsFromTheDutThe0xFFFDClusterRevisionAttribute_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads from the DUT the (0xFFFC) FeatureMap attribute\n"); - if (ShouldSkip(" WNCV.S.Afffc && !WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && !WNCV.S.F03 && !WNCV.S.F04 ")) { + if (ShouldSkip("!WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 && !WNCV.S.F03 && !WNCV.S.F04 ")) { NextTest(); return; } @@ -103724,7 +105852,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { break; case 8: ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -103732,7 +105860,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { break; case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4a: TH reads from the DUT the (0xFFFB) AttributeList attribute\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && WNCV.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -103741,7 +105869,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 10: ChipLogProgress( chipTool, " ***** Test Step 10 : Step 4b: TH reads optional attribute(SafetyStatus) in AttributeList\n"); - if (ShouldSkip("WNCV.S.Afffb && WNCV.S.A001a")) { + if (ShouldSkip("WNCV.S.A001a")) { NextTest(); return; } @@ -103751,7 +105879,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4c: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 & WNCV.S.F03) attribute in " "AttributeList\n"); - if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03 && WNCV.S.Afffb")) { + if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03")) { NextTest(); return; } @@ -103760,7 +105888,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 12: ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4d: Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 ) attribute in AttributeList\n"); - if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.Afffb")) { + if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02")) { NextTest(); return; } @@ -103770,7 +105898,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4e: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 & WNCV.S.F03) attribute in " "AttributeList\n"); - if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03 && WNCV.S.Afffb")) { + if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03")) { NextTest(); return; } @@ -103779,7 +105907,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 14: ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4f: Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 ) attribute in AttributeList\n"); - if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.Afffb")) { + if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04")) { NextTest(); return; } @@ -103796,17 +105924,13 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 16: ChipLogProgress( chipTool, " ***** Test Step 16 : Step 6a: TH reads from the DUT the (0xFFF9) AcceptedCommandList attribute\n"); - if (ShouldSkip("WNCV.S.Afff9")) { - NextTest(); - return; - } err = TestStep6aThReadsFromTheDutThe0xFFF9AcceptedCommandListAttribute_16(); break; case 17: ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6b: TH reads Feature dependent(WNCV.S.F00 & WNCV.S.F02) command in " "AcceptedCommandList\n"); - if (ShouldSkip("WNCV.S.Afff9 && WNCV.S.F00 && WNCV.S.F02")) { + if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02")) { NextTest(); return; } @@ -103816,7 +105940,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6c: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F03) command in " "AcceptedCommandList\n"); - if (ShouldSkip("WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F03")) { + if (ShouldSkip("WNCV.S.F01 && WNCV.S.F03")) { NextTest(); return; } @@ -103826,7 +105950,7 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { ChipLogProgress(chipTool, " ***** Test Step 19 : Step 6d: TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F04) command in " "AcceptedCommandList\n"); - if (ShouldSkip("WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F04")) { + if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04")) { NextTest(); return; } @@ -103835,10 +105959,6 @@ class Test_TC_WNCV_1_1 : public TestCommandBridge { case 20: ChipLogProgress( chipTool, " ***** Test Step 20 : Step 7: TH reads from the DUT the (0xFFF8) GeneratedCommandList attribute\n"); - if (ShouldSkip("WNCV.S.Afff8")) { - NextTest(); - return; - } err = TestStep7ThReadsFromTheDutThe0xFFF8GeneratedCommandListAttribute_20(); break; } @@ -117249,7 +119369,7 @@ class TestCASERecovery : public TestCommandBridge { { id actualValue = value; - VerifyOrReturn(CheckValue("DataModelRevision", actualValue, 1U)); + VerifyOrReturn(CheckValue("DataModelRevision", actualValue, 17U)); } NextTest(); @@ -117318,7 +119438,7 @@ class TestCASERecovery : public TestCommandBridge { { id actualValue = value; - VerifyOrReturn(CheckValue("DataModelRevision", actualValue, 1U)); + VerifyOrReturn(CheckValue("DataModelRevision", actualValue, 17U)); } NextTest(); @@ -138780,10 +140900,13 @@ class TestDescriptorCluster : public TestCommandBridge { { id actualValue = value; - VerifyOrReturn(CheckValue("DeviceTypeList", [actualValue count], static_cast(1))); + VerifyOrReturn(CheckValue("DeviceTypeList", [actualValue count], static_cast(2))); VerifyOrReturn( - CheckValue("DeviceType", ((MTRDescriptorClusterDeviceTypeStruct *) actualValue[0]).deviceType, 22UL)); + CheckValue("DeviceType", ((MTRDescriptorClusterDeviceTypeStruct *) actualValue[0]).deviceType, 17UL)); VerifyOrReturn(CheckValue("Revision", ((MTRDescriptorClusterDeviceTypeStruct *) actualValue[0]).revision, 1U)); + VerifyOrReturn( + CheckValue("DeviceType", ((MTRDescriptorClusterDeviceTypeStruct *) actualValue[1]).deviceType, 22UL)); + VerifyOrReturn(CheckValue("Revision", ((MTRDescriptorClusterDeviceTypeStruct *) actualValue[1]).revision, 1U)); } NextTest(); @@ -152152,15 +154275,11 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { break; case 1: ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads the ClusterRevision from DUT\n"); - if (ShouldSkip("DGSW.S.Afffd")) { - NextTest(); - return; - } err = TestStep2ThReadsTheClusterRevisionFromDut_1(); break; case 2: ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads the FeatureMap from DUT\n"); - if (ShouldSkip(" !DGSW.S.F00 && DGSW.S.Afffc")) { + if (ShouldSkip(" !DGSW.S.F00 ")) { NextTest(); return; } @@ -152169,7 +154288,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { case 3: ChipLogProgress( chipTool, " ***** Test Step 3 : Step 3b: Given DGSW.S.F00(Watermarks) ensure featuremap has the correct bit set\n"); - if (ShouldSkip("DGSW.S.F00 && DGSW.S.Afffc")) { + if (ShouldSkip("DGSW.S.F00")) { NextTest(); return; } @@ -152177,7 +154296,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { break; case 4: ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb")) { + if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -152185,7 +154304,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { break; case 5: ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4a: TH reads AttributeList from DUT\n"); - if (ShouldSkip("!PICS_EVENT_LIST_ENABLED && DGSW.S.Afffb")) { + if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -152194,7 +154313,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { case 6: ChipLogProgress( chipTool, " ***** Test Step 6 : Step 4b: TH reads optional attribute(ThreadMetrics) in AttributeList\n"); - if (ShouldSkip("DGSW.S.A0000 && DGSW.S.Afffb")) { + if (ShouldSkip("DGSW.S.A0000")) { NextTest(); return; } @@ -152203,7 +154322,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { case 7: ChipLogProgress( chipTool, " ***** Test Step 7 : Step 4c: TH reads optional attribute(CurrentHeapFree) in AttributeList\n"); - if (ShouldSkip("DGSW.S.A0001 && DGSW.S.Afffb")) { + if (ShouldSkip("DGSW.S.A0001")) { NextTest(); return; } @@ -152212,7 +154331,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { case 8: ChipLogProgress( chipTool, " ***** Test Step 8 : Step 4d: TH reads optional attribute(CurrentHeapUsed) in AttributeList\n"); - if (ShouldSkip("DGSW.S.A0002 && DGSW.S.Afffb")) { + if (ShouldSkip("DGSW.S.A0002")) { NextTest(); return; } @@ -152221,7 +154340,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { case 9: ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4e: TH reads Feature dependent attribute(CurrentHeapHighWatermark) in AttributeList\n"); - if (ShouldSkip("( DGSW.S.F00 || DGSW.S.A0003 ) && DGSW.S.Afffb")) { + if (ShouldSkip("( DGSW.S.F00 || DGSW.S.A0003 )")) { NextTest(); return; } @@ -152235,7 +154354,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afffb")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -152243,7 +154362,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { break; case 11: ChipLogProgress(chipTool, " ***** Test Step 11 : Step 5a: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DGSW.S.E00 && DGSW.S.Afffa")) { + if (ShouldSkip("DGSW.S.E00 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -152251,7 +154370,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { return; case 12: ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5b: TH reads EventList from DUT\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && !DGSW.S.E00 && DGSW.S.Afffa ")) { + if (ShouldSkip(" !DGSW.S.E00 && PICS_EVENT_LIST_ENABLED ")) { NextTest(); return; } @@ -152259,20 +154378,21 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { return; case 13: ChipLogProgress(chipTool, - " ***** Test Step 13 : Step 5c: TH reads EventList attribute from DUT. 1.The list MAY contain values in the " - "Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range " - "(0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test Vendor or " - "invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " - "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afffa")) { + " ***** Test Step 13 : Step 5c: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } - err = TestStep5cThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); + err = TestStep5cThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13(); break; case 14: ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6a: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip("DGSW.S.F00 && DGSW.S.Afff9")) { + if (ShouldSkip("DGSW.S.F00")) { NextTest(); return; } @@ -152280,7 +154400,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { break; case 15: ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6b: TH reads AcceptedCommandList from DUT\n"); - if (ShouldSkip(" !DGSW.S.F00 && DGSW.S.Afff9")) { + if (ShouldSkip(" !DGSW.S.F00 ")) { NextTest(); return; } @@ -152294,7 +154414,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored.3.The list SHALL NOT contain any values in the Test Vendor " "or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where " "XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afff9")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -152307,7 +154427,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); - if (ShouldSkip("PICS_USER_PROMPT && DGSW.S.Afff8")) { + if (ShouldSkip("PICS_USER_PROMPT")) { NextTest(); return; } @@ -152638,7 +154758,7 @@ class Test_TC_DGSW_1_1 : public TestCommandBridge { } CHIP_ERROR - TestStep5cThReadsEventListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() + TestStep5cThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_13() { chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; @@ -166734,7 +168854,7 @@ class Test_TC_DRLK_1_1 : public TestCommandBridge { case 36: ChipLogProgress( chipTool, " ***** Test Step 36 : Step 5b: TH reads optional event(Door position sensor) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DRLK.S.F05")) { + if (ShouldSkip("DRLK.S.F05 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -166743,7 +168863,7 @@ class Test_TC_DRLK_1_1 : public TestCommandBridge { case 37: ChipLogProgress( chipTool, " ***** Test Step 37 : Step 5c: TH reads optional event(User commands and database) in EventList\n"); - if (ShouldSkip("PICS_EVENT_LIST_ENABLED && DRLK.S.F08")) { + if (ShouldSkip("DRLK.S.F08 && PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } @@ -167999,11 +170119,11 @@ class Test_TC_DRLK_1_1 : public TestCommandBridge { } }; -class Test_TC_DRLK_2_2 : public TestCommandBridge { +class Test_TC_DRLK_2_4 : public TestCommandBridge { public: // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced - Test_TC_DRLK_2_2() - : TestCommandBridge("Test_TC_DRLK_2_2") + Test_TC_DRLK_2_4() + : TestCommandBridge("Test_TC_DRLK_2_4") , mTestIndex(0) { AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); @@ -168013,7 +170133,7 @@ class Test_TC_DRLK_2_2 : public TestCommandBridge { } // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull) - ~Test_TC_DRLK_2_2() {} + ~Test_TC_DRLK_2_4() {} /////////// TestCommand Interface ///////// void NextTest() override @@ -168021,11 +170141,11 @@ class Test_TC_DRLK_2_2 : public TestCommandBridge { CHIP_ERROR err = CHIP_NO_ERROR; if (0 == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_2\n"); + ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_4\n"); } if (mTestCount == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_2\n"); + ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_4\n"); SetCommandExitStatus(CHIP_NO_ERROR); return; } @@ -168042,2665 +170162,110 @@ class Test_TC_DRLK_2_2 : public TestCommandBridge { err = TestWaitForTheCommissionedDeviceToBeRetrieved_0(); break; case 1: - ChipLogProgress(chipTool, " ***** Test Step 1 : Precondition: Create new user\n"); - err = TestPreconditionCreateNewUser_1(); + ChipLogProgress(chipTool, " ***** Test Step 1 : Create new user\n"); + err = TestCreateNewUser_1(); break; case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Precondition: Read the user back and verify its fields\n"); - err = TestPreconditionReadTheUserBackAndVerifyItsFields_2(); + ChipLogProgress(chipTool, " ***** Test Step 2 : Read the user back and verify its fields\n"); + err = TestReadTheUserBackAndVerifyItsFields_2(); break; case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Precondition: Create new PIN credential and lock/unlock user\n"); - err = TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3(); + ChipLogProgress(chipTool, " ***** Test Step 3 : Create new PIN credential and lock/unlock user\n"); + err = TestCreateNewPinCredentialAndLockUnlockUser_3(); break; case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Precondition: Verify created PIN credential\n"); - err = TestPreconditionVerifyCreatedPinCredential_4(); + ChipLogProgress(chipTool, " ***** Test Step 4 : Verify created PIN credential\n"); + err = TestVerifyCreatedPinCredential_4(); break; case 5: - ChipLogProgress(chipTool, - " ***** Test Step 5 : Step 1a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.A0033")) { + ChipLogProgress( + chipTool, " ***** Test Step 5 : Step 1a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); + if (ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY")) { NextTest(); return; } - err = TestStep1aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5(); + err = TestStep1aThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_5(); break; case 6: - ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 1b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and " - "Verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("!DRLK.S.A0033")) { + ChipLogProgress( + chipTool, " ***** Test Step 6 : Step 1b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); + if (ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP")) { NextTest(); return; } - err = TestStep1bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_6(); + err = TestStep1bThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_6(); break; case 7: ChipLogProgress( - chipTool, " ***** Test Step 7 : Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { + chipTool, " ***** Test Step 7 : Step 1c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); + if (ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write")) { NextTest(); return; } - err = TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7(); + err = TestStep1cThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_7(); break; case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 3: TH sends Lock Door Command to the DUT without PINCode\n"); - if (ShouldSkip("DRLK.S.C00.Rsp")) { + ChipLogProgress( + chipTool, " ***** Test Step 8 : Step 1d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); + if (ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write")) { NextTest(); return; } - err = TestStep3ThSendsLockDoorCommandToTheDutWithoutPINCode_8(); + err = TestStep1dThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_8(); break; case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4: TH sends Lock Door Command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C00.Rsp")) { + ChipLogProgress( + chipTool, " ***** Test Step 9 : Step 2a: TH sends the Unlock with Timeout argument value as 10 seconds\n"); + if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY")) { NextTest(); return; } - err = TestStep4ThSendsLockDoorCommandToTheDutWithValidPINCode_9(); + err = TestStep2aThSendsTheUnlockWithTimeoutArgumentValueAs10Seconds_9(); break; case 10: - ChipLogProgress(chipTool, - " ***** Test Step 10 : Step 5a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.A0033")) { + ChipLogProgress( + chipTool, " ***** Test Step 10 : Step 2b: TH sends the Unlock with Timeout argument value as 60 seconds\n"); + if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP")) { NextTest(); return; } - err = TestStep5aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_10(); + err = TestStep2bThSendsTheUnlockWithTimeoutArgumentValueAs60Seconds_10(); break; case 11: - ChipLogProgress(chipTool, - " ***** Test Step 11 : Step 5b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and " - "Verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("!DRLK.S.A0033")) { + ChipLogProgress(chipTool, " ***** Test Step 11 : Wait for AutoRelockTime Expires\n"); + if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY")) { NextTest(); return; } - err = TestStep5bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_11(); + err = TestWaitForAutoRelockTimeExpires_11(); break; case 12: - ChipLogProgress( - chipTool, " ***** Test Step 12 : Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { + ChipLogProgress(chipTool, " ***** Test Step 12 : Wait for AutoRelockTime Expires\n"); + if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP")) { NextTest(); return; } - err = TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12(); + err = TestWaitForAutoRelockTimeExpires_12(); break; case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7: TH sends Lock Door Command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033")) { + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 2c: TH reads LockState attribute\n"); + if (ShouldSkip("DRLK.S.A0000 && DRLK.S.C03.Rsp")) { NextTest(); return; } - err = TestStep7ThSendsLockDoorCommandToTheDutWithValidPINCode_13(); + err = TestStep2cThReadsLockStateAttribute_13(); break; case 14: - ChipLogProgress( - chipTool, " ***** Test Step 14 : Step 8: TH sends Lock Door Command to the DUT without valid PINCode\n"); - if (ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep8ThSendsLockDoorCommandToTheDutWithoutValidPINCode_14(); + ChipLogProgress(chipTool, " ***** Test Step 14 : Cleanup the created user\n"); + err = TestCleanupTheCreatedUser_14(); break; case 15: - ChipLogProgress( - chipTool, " ***** Test Step 15 : Step 9: TH sends Lock Door Command to the DUT without any argument PINCode\n"); - if (ShouldSkip("DRLK.S.C00.Rsp && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep9ThSendsLockDoorCommandToTheDutWithoutAnyArgumentPINCode_15(); - break; - case 16: - ChipLogProgress(chipTool, " ***** Test Step 16 : Step 10a: H reads the WrongCodeEntryLimit attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10aHReadsTheWrongCodeEntryLimitAttributeFromTheDut_16(); - break; - case 17: - ChipLogProgress(chipTool, - " ***** Test Step 17 : Step 10b: TH sends an Unlock Door Command from the DUT with invalid PINCode. Repeat this " - "step PIXIT.DRLK.WrongCodeEntryLimit times and Verify that DUT sends failure response to the TH\n"); - if (ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10bThSendsAnUnlockDoorCommandFromTheDutWithInvalidPINCodeRepeatThisStepPIXITDRLKWrongCodeEntryLimitTimesAndVerifyThatDutSendsFailureResponseToTheTh_17(); - break; - case 18: - ChipLogProgress(chipTool, - " ***** Test Step 18 : Step 10c: TH sends an Unlock Door Command from User1 to the DUT with the valid PINCode and " - "verify the DUT response\n"); - if (ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10cThSendsAnUnlockDoorCommandFromUser1ToTheDutWithTheValidPINCodeAndVerifyTheDutResponse_18(); - break; - case 19: - ChipLogProgress(chipTool, - " ***** Test Step 19 : Step 10d: Wait for PIXIT.DRLK.UserCodeTemporaryDisableTime.TH then sends an Unlock Door " - "Command from User1 to the DUT with the valid PINCode.\n"); - if (ShouldSkip("PICS_USER_PROMPT && DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10dWaitForPIXITDRLKUserCodeTemporaryDisableTimeTHThenSendsAnUnlockDoorCommandFromUser1ToTheDutWithTheValidPINCode_19(); - break; - case 20: - ChipLogProgress(chipTool, - " ***** Test Step 20 : Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and " - "Verify that the DUT sends Success response\n"); - if (ShouldSkip("DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10eThWritesWrongCodeEntryLimitAttributeValueAsBetween1And255OnTheDutAndVerifyThatTheDutSendsSuccessResponse_20(); - break; - case 21: - ChipLogProgress(chipTool, - " ***** Test Step 21 : Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and 255 on the DUT and " - "verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("!DRLK.S.A0030")) { - NextTest(); - return; - } - err = TestStep10eThWritesWrongCodeEntryLimitAttributeValueAsBetween1And255OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_21(); - break; - case 22: - ChipLogProgress( - chipTool, " ***** Test Step 22 : Step 11a: TH reads the UserCodeTemporaryDisableTime attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestStep11aThReadsTheUserCodeTemporaryDisableTimeAttributeFromTheDut_22(); - break; - case 23: - ChipLogProgress(chipTool, - " ***** Test Step 23 : Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on " - "the DUT and Verify that the DUT sends Success response\n"); - if (ShouldSkip("DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestStep12aThWritesUserCodeTemporaryDisableTimeAttributeValueAsBetween1And255OnTheDutAndVerifyThatTheDutSendsSuccessResponse_23(); - break; - case 24: - ChipLogProgress(chipTool, - " ***** Test Step 24 : Step 12a: TH writes UserCodeTemporaryDisableTime attribute value as between 1 and 255 on " - "the DUT and verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("!DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestStep12aThWritesUserCodeTemporaryDisableTimeAttributeValueAsBetween1And255OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_24(); - break; - case 25: - ChipLogProgress(chipTool, " ***** Test Step 25 : Clean the created user\n"); - err = TestCleanTheCreatedUser_25(); - break; - case 26: - ChipLogProgress(chipTool, " ***** Test Step 26 : Cleanup the created credential\n"); + ChipLogProgress(chipTool, " ***** Test Step 15 : Clean the created credential\n"); if (ShouldSkip("DRLK.S.C26.Rsp")) { NextTest(); return; } - err = TestCleanupTheCreatedCredential_26(); - break; - } - - if (CHIP_NO_ERROR != err) { - ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err)); - SetCommandExitStatus(err); - } - } - - void OnStatusUpdate(const chip::app::StatusIB & status) override - { - switch (mTestIndex - 1) { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 18: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 19: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 22: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 25: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 26: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - } - - // Go on to the next test. - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 27; - - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee("alpha", value); - } - - CHIP_ERROR TestPreconditionCreateNewUser_1() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetUserParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userName = @"xxx"; - params.userUniqueID = [NSNumber numberWithUnsignedInt:6452UL]; - params.userStatus = [NSNumber numberWithUnsignedChar:1U]; - params.userType = [NSNumber numberWithUnsignedChar:0U]; - params.credentialRule = [NSNumber numberWithUnsignedChar:0U]; - [cluster setUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Precondition: Create new user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionReadTheUserBackAndVerifyItsFields_2() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster getUserWithParams:params - completion:^(MTRDoorLockClusterGetUserResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Read the user back and verify its fields Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.userName; - VerifyOrReturn(CheckValueNonNull("UserName", actualValue)); - VerifyOrReturn(CheckValueAsString("UserName", actualValue, @"xxx")); - } - - { - id actualValue = values.userUniqueID; - VerifyOrReturn(CheckValueNonNull("UserUniqueID", actualValue)); - VerifyOrReturn(CheckValue("UserUniqueID", actualValue, 6452UL)); - } - - { - id actualValue = values.userStatus; - VerifyOrReturn(CheckValueNonNull("UserStatus", actualValue)); - VerifyOrReturn(CheckValue("UserStatus", actualValue, 1U)); - } - - { - id actualValue = values.userType; - VerifyOrReturn(CheckValueNonNull("UserType", actualValue)); - VerifyOrReturn(CheckValue("UserType", actualValue, 0U)); - } - - { - id actualValue = values.credentialRule; - VerifyOrReturn(CheckValueNonNull("CredentialRule", actualValue)); - VerifyOrReturn(CheckValue("CredentialRule", actualValue, 0U)); - } - - { - id actualValue = values.credentials; - VerifyOrReturn(CheckValueNonNull("Credentials", actualValue)); - VerifyOrReturn(CheckValue("Credentials", [actualValue count], static_cast(0))); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextUserIndex; - VerifyOrReturn(CheckValueNull("NextUserIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetCredentialParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - params.credentialData = [[NSData alloc] initWithBytes:"123456" length:6]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userStatus = nil; - params.userType = nil; - [cluster - setCredentialWithParams:params - completion:^(MTRDoorLockClusterSetCredentialResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Create new PIN credential and lock/unlock user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.status; - VerifyOrReturn(CheckValue("Status", actualValue, 0U)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNonNull("NextCredentialIndex", actualValue)); - VerifyOrReturn(CheckValue("NextCredentialIndex", actualValue, 2U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionVerifyCreatedPinCredential_4() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Precondition: Verify created PIN credential Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep1aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1a: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep1bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_6() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1b: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT and Verify DUT responds " - @"with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, false)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep3ThSendsLockDoorCommandToTheDutWithoutPINCode_8() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterLockDoorParams alloc] init]; - [cluster lockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 3: TH sends Lock Door Command to the DUT without PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4ThSendsLockDoorCommandToTheDutWithValidPINCode_9() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterLockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster lockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 4: TH sends Lock Door Command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_10() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5a: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep5bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_11() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5b: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT and Verify DUT responds " - @"with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, true)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep7ThSendsLockDoorCommandToTheDutWithValidPINCode_13() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterLockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster lockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 7: TH sends Lock Door Command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep8ThSendsLockDoorCommandToTheDutWithoutValidPINCode_14() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterLockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"645321" length:6]; - [cluster - lockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 8: TH sends Lock Door Command to the DUT without valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep9ThSendsLockDoorCommandToTheDutWithoutAnyArgumentPINCode_15() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterLockDoorParams alloc] init]; - [cluster - lockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 9: TH sends Lock Door Command to the DUT without any argument PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep10aHReadsTheWrongCodeEntryLimitAttributeFromTheDut_16() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeWrongCodeEntryLimitWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 10a: H reads the WrongCodeEntryLimit attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - VerifyOrReturn(CheckConstraintMinValue("wrongCodeEntryLimit", [value unsignedCharValue], 1U)); - VerifyOrReturn(CheckConstraintMaxValue("wrongCodeEntryLimit", [value unsignedCharValue], 255U)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep10bThSendsAnUnlockDoorCommandFromTheDutWithInvalidPINCodeRepeatThisStepPIXITDRLKWrongCodeEntryLimitTimesAndVerifyThatDutSendsFailureResponseToTheTh_17() - { - - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt("alpha", value); - } - - CHIP_ERROR TestStep10cThSendsAnUnlockDoorCommandFromUser1ToTheDutWithTheValidPINCodeAndVerifyTheDutResponse_18() - { - - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt("alpha", value); - } - - CHIP_ERROR - TestStep10dWaitForPIXITDRLKUserCodeTemporaryDisableTimeTHThenSendsAnUnlockDoorCommandFromUser1ToTheDutWithTheValidPINCode_19() - { - - chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; - value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); - value.expectedValue.Emplace(); - value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); - return UserPrompt("alpha", value); - } - - CHIP_ERROR - TestStep10eThWritesWrongCodeEntryLimitAttributeValueAsBetween1And255OnTheDutAndVerifyThatTheDutSendsSuccessResponse_20() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster - writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and " - @"255 on the DUT and Verify that the DUT sends Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep10eThWritesWrongCodeEntryLimitAttributeValueAsBetween1And255OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_21() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster - writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10e: TH writes WrongCodeEntryLimit attribute value as between 1 and " - @"255 on the DUT and verify DUT responds with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep11aThReadsTheUserCodeTemporaryDisableTimeAttributeFromTheDut_22() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeUserCodeTemporaryDisableTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 11a: TH reads the UserCodeTemporaryDisableTime attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - VerifyOrReturn(CheckConstraintMinValue("userCodeTemporaryDisableTime", [value unsignedCharValue], 1U)); - VerifyOrReturn(CheckConstraintMaxValue("userCodeTemporaryDisableTime", [value unsignedCharValue], 255U)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep12aThWritesUserCodeTemporaryDisableTimeAttributeValueAsBetween1And255OnTheDutAndVerifyThatTheDutSendsSuccessResponse_23() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12a: TH writes UserCodeTemporaryDisableTime attribute " - @"value as between 1 and 255 on the DUT and Verify that the " - @"DUT sends Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep12aThWritesUserCodeTemporaryDisableTimeAttributeValueAsBetween1And255OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_24() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12a: TH writes UserCodeTemporaryDisableTime attribute " - @"value as between 1 and 255 on the DUT and verify DUT " - @"responds with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestCleanTheCreatedUser_25() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster clearUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Clean the created user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestCleanupTheCreatedCredential_26() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster clearCredentialWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Cleanup the created credential Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } -}; - -class Test_TC_DRLK_2_3 : public TestCommandBridge { -public: - // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced - Test_TC_DRLK_2_3() - : TestCommandBridge("Test_TC_DRLK_2_3") - , mTestIndex(0) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull) - - ~Test_TC_DRLK_2_3() {} - - /////////// TestCommand Interface ///////// - void NextTest() override - { - CHIP_ERROR err = CHIP_NO_ERROR; - - if (0 == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_3\n"); - } - - if (mTestCount == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_3\n"); - SetCommandExitStatus(CHIP_NO_ERROR); - return; - } - - Wait(); - - // Ensure we increment mTestIndex before we start running the relevant - // command. That way if we lose the timeslice after we send the message - // but before our function call returns, we won't end up with an - // incorrect mTestIndex value observed when we get the response. - switch (mTestIndex++) { - case 0: - ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n"); - err = TestWaitForTheCommissionedDeviceToBeRetrieved_0(); - break; - case 1: - ChipLogProgress(chipTool, " ***** Test Step 1 : Precondition: Create new user\n"); - err = TestPreconditionCreateNewUser_1(); - break; - case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Precondition: Read the user back and verify its fields\n"); - err = TestPreconditionReadTheUserBackAndVerifyItsFields_2(); - break; - case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Precondition: Create new PIN credential and lock/unlock user\n"); - err = TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3(); - break; - case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Precondition: Verify created PIN credential\n"); - err = TestPreconditionVerifyCreatedPinCredential_4(); - break; - case 5: - ChipLogProgress(chipTool, - " ***** Test Step 5 : Step 1a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep1aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5(); - break; - case 6: - ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 1b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and " - "Verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep1bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_6(); - break; - case 7: - ChipLogProgress( - chipTool, " ***** Test Step 7 : Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7(); - break; - case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 3: TH sends the unlock Door command to the DUT without PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep3ThSendsTheUnlockDoorCommandToTheDutWithoutPINCode_8(); - break; - case 9: - ChipLogProgress( - chipTool, " ***** Test Step 9 : Step 4: TH sends the unlock Door command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep4ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_9(); - break; - case 10: - ChipLogProgress(chipTool, - " ***** Test Step 10 : Step 5a: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep5aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_10(); - break; - case 11: - ChipLogProgress(chipTool, - " ***** Test Step 11 : Step 5b: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT and " - "Verify DUT responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep5bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_11(); - break; - case 12: - ChipLogProgress( - chipTool, " ***** Test Step 12 : Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12(); - break; - case 13: - ChipLogProgress( - chipTool, " ***** Test Step 13 : Step 7: TH sends the unlock Door command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep7ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_13(); - break; - case 14: - ChipLogProgress( - chipTool, " ***** Test Step 14 : Step 8: TH sends the unlock Door command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep8ThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_14(); - break; - case 15: - ChipLogProgress( - chipTool, " ***** Test Step 15 : Step 9: TH sends the unlock Door command to the DUT without PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep9ThSendsTheUnlockDoorCommandToTheDutWithoutPINCode_15(); - break; - case 16: - ChipLogProgress(chipTool, - " ***** Test Step 16 : Step 10a: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT and Verify that the " - "DUT sends Success response\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0030.Write")) { - NextTest(); - return; - } - err = TestStep10aThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDutAndVerifyThatTheDutSendsSuccessResponse_16(); - break; - case 17: - ChipLogProgress(chipTool, - " ***** Test Step 17 : Step 10b: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT and verify DUT " - "responds with UNSUPPORTED_WRITE\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0030.Write")) { - NextTest(); - return; - } - err = TestStep10bThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_17(); - break; - case 18: - ChipLogProgress(chipTool, - " ***** Test Step 18 : Step 11a: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT " - "and Verify that the DUT sends Success response\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031.Write")) { - NextTest(); - return; - } - err = TestStep11aThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_18(); - break; - case 19: - ChipLogProgress(chipTool, - " ***** Test Step 19 : Step 11b: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT " - "and Verify that the DUT sends Success response\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && !DRLK.S.A0031.Write")) { - NextTest(); - return; - } - err = TestStep11bThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_19(); - break; - case 20: - ChipLogProgress( - chipTool, " ***** Test Step 20 : Step 12a: TH sends the unlock Door command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep12aThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_20(); - break; - case 21: - ChipLogProgress( - chipTool, " ***** Test Step 21 : Step 12b: TH sends the unlock Door command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep12bThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_21(); - break; - case 22: - ChipLogProgress( - chipTool, " ***** Test Step 22 : Step 12c: TH sends the unlock Door command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep12cThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_22(); - break; - case 23: - ChipLogProgress( - chipTool, " ***** Test Step 23 : Step 12d: TH sends the unlock Door command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep12dThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_23(); - break; - case 24: - ChipLogProgress(chipTool, - " ***** Test Step 24 : Step 13: TH reads the UserCodeTemporaryDisableTime attribute from the DUT and check " - "attribute is triggered\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestStep13ThReadsTheUserCodeTemporaryDisableTimeAttributeFromTheDutAndCheckAttributeIsTriggered_24(); - break; - case 25: - ChipLogProgress( - chipTool, " ***** Test Step 25 : Step 14: TH sends the unlock Door command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep14ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_25(); - break; - case 26: - ChipLogProgress(chipTool, " ***** Test Step 26 : Wait for UserCodeTemporaryDisableTime expires\n"); - if (ShouldSkip("DRLK.S.F00 && DRLK.S.F01 && DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestWaitForUserCodeTemporaryDisableTimeExpires_26(); - break; - case 27: - ChipLogProgress( - chipTool, " ***** Test Step 27 : Step 15a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep15aThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_27(); - break; - case 28: - ChipLogProgress( - chipTool, " ***** Test Step 28 : Step 15b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep15bThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_28(); - break; - case 29: - ChipLogProgress( - chipTool, " ***** Test Step 29 : Step 15c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); - if (ShouldSkip(" !DRLK.S.A0023.Write && PICS_SDK_CI_ONLY ")) { - NextTest(); - return; - } - err = TestStep15cThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_29(); - break; - case 30: - ChipLogProgress( - chipTool, " ***** Test Step 30 : Step 15d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip(" !DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP ")) { - NextTest(); - return; - } - err = TestStep15dThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_30(); - break; - case 31: - ChipLogProgress(chipTool, " ***** Test Step 31 : Step 16a: TH reads the AutoRelockTime attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep16aThReadsTheAutoRelockTimeAttributeFromTheDut_31(); - break; - case 32: - ChipLogProgress(chipTool, " ***** Test Step 32 : Step 16b: TH reads the AutoRelockTime attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep16bThReadsTheAutoRelockTimeAttributeFromTheDut_32(); - break; - case 33: - ChipLogProgress(chipTool, - " ***** Test Step 33 : Step 17: TH sends the unlock Door command to the DUT with valid PINCode and Verify that DUT " - "sends SUCCESS response to the TH\n"); - if (ShouldSkip("DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep17ThSendsTheUnlockDoorCommandToTheDutWithValidPINCodeAndVerifyThatDutSendsSuccessResponseToTheTh_33(); - break; - case 34: - ChipLogProgress(chipTool, " ***** Test Step 34 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_34(); - break; - case 35: - ChipLogProgress(chipTool, " ***** Test Step 35 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_35(); - break; - case 36: - ChipLogProgress(chipTool, " ***** Test Step 36 : Step 18: TH reads LockState attribute\n"); - if (ShouldSkip("DRLK.S.A0000 && DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep18ThReadsLockStateAttribute_36(); - break; - case 37: - ChipLogProgress(chipTool, " ***** Test Step 37 : Cleanup the created user\n"); - err = TestCleanupTheCreatedUser_37(); - break; - case 38: - ChipLogProgress(chipTool, " ***** Test Step 38 : Clean the created credential\n"); - if (ShouldSkip("DRLK.S.C26.Rsp")) { - NextTest(); - return; - } - err = TestCleanTheCreatedCredential_38(); - break; - } - - if (CHIP_NO_ERROR != err) { - ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err)); - SetCommandExitStatus(err); - } - } - - void OnStatusUpdate(const chip::app::StatusIB & status) override - { - switch (mTestIndex - 1) { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 18: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 19: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 22: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 25: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 26: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 27: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 28: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 29: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 30: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 31: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 32: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 33: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 34: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 35: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 36: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 37: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 38: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - } - - // Go on to the next test. - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - - chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(200)); } - -private: - std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 39; - - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee("alpha", value); - } - - CHIP_ERROR TestPreconditionCreateNewUser_1() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetUserParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userName = @"xxx"; - params.userUniqueID = [NSNumber numberWithUnsignedInt:6452UL]; - params.userStatus = [NSNumber numberWithUnsignedChar:1U]; - params.userType = [NSNumber numberWithUnsignedChar:0U]; - params.credentialRule = [NSNumber numberWithUnsignedChar:0U]; - [cluster setUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Precondition: Create new user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionReadTheUserBackAndVerifyItsFields_2() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster getUserWithParams:params - completion:^(MTRDoorLockClusterGetUserResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Read the user back and verify its fields Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.userName; - VerifyOrReturn(CheckValueNonNull("UserName", actualValue)); - VerifyOrReturn(CheckValueAsString("UserName", actualValue, @"xxx")); - } - - { - id actualValue = values.userUniqueID; - VerifyOrReturn(CheckValueNonNull("UserUniqueID", actualValue)); - VerifyOrReturn(CheckValue("UserUniqueID", actualValue, 6452UL)); - } - - { - id actualValue = values.userStatus; - VerifyOrReturn(CheckValueNonNull("UserStatus", actualValue)); - VerifyOrReturn(CheckValue("UserStatus", actualValue, 1U)); - } - - { - id actualValue = values.userType; - VerifyOrReturn(CheckValueNonNull("UserType", actualValue)); - VerifyOrReturn(CheckValue("UserType", actualValue, 0U)); - } - - { - id actualValue = values.credentialRule; - VerifyOrReturn(CheckValueNonNull("CredentialRule", actualValue)); - VerifyOrReturn(CheckValue("CredentialRule", actualValue, 0U)); - } - - { - id actualValue = values.credentials; - VerifyOrReturn(CheckValueNonNull("Credentials", actualValue)); - VerifyOrReturn(CheckValue("Credentials", [actualValue count], static_cast(0))); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextUserIndex; - VerifyOrReturn(CheckValueNull("NextUserIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetCredentialParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - params.credentialData = [[NSData alloc] initWithBytes:"123456" length:6]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userStatus = nil; - params.userType = nil; - [cluster - setCredentialWithParams:params - completion:^(MTRDoorLockClusterSetCredentialResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Create new PIN credential and lock/unlock user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.status; - VerifyOrReturn(CheckValue("Status", actualValue, 0U)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNonNull("NextCredentialIndex", actualValue)); - VerifyOrReturn(CheckValue("NextCredentialIndex", actualValue, 2U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionVerifyCreatedPinCredential_4() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Precondition: Verify created PIN credential Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep1aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1a: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep1bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_6() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1b: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT and Verify DUT responds " - @"with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, false)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep3ThSendsTheUnlockDoorCommandToTheDutWithoutPINCode_8() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - [cluster unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 3: TH sends the unlock Door command to the DUT without PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_9() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 4: TH sends the unlock Door command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5aThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_10() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5a: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep5bThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDutAndVerifyDutRespondsWithUnsupportedWrite_11() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5b: TH writes the RequirePINforRemoteOperation " - @"attribute value as False on the DUT and Verify DUT responds " - @"with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, true)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep7ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_13() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 7: TH sends the unlock Door command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep8ThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_14() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"1234568" length:7]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 8: TH sends the unlock Door command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep9ThSendsTheUnlockDoorCommandToTheDutWithoutPINCode_15() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 9: TH sends the unlock Door command to the DUT without PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep10aThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDutAndVerifyThatTheDutSendsSuccessResponse_16() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10a: TH writes WrongCodeEntryLimit attribute value as 3 on the " - @"DUT and Verify that the DUT sends Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep10bThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDutAndVerifyDutRespondsWithUnsupportedWrite_17() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10b: TH writes WrongCodeEntryLimit attribute value as 3 on the " - @"DUT and verify DUT responds with UNSUPPORTED_WRITE Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep11aThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_18() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 11a: TH writes UserCodeTemporaryDisableTime attribute " - @"value as 15 Seconds on the DUT and Verify that the DUT sends " - @"Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep11bThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_19() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 11b: TH writes UserCodeTemporaryDisableTime attribute " - @"value as 15 Seconds on the DUT and Verify that the DUT sends " - @"Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12aThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_20() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"1234568" length:7]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12a: TH sends the unlock Door command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12bThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_21() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"1234568" length:7]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12b: TH sends the unlock Door command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12cThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_22() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"1234568" length:7]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12c: TH sends the unlock Door command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12dThSendsTheUnlockDoorCommandToTheDutWithInvalidPINCode_23() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"1234568" length:7]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12d: TH sends the unlock Door command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep13ThReadsTheUserCodeTemporaryDisableTimeAttributeFromTheDutAndCheckAttributeIsTriggered_24() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeUserCodeTemporaryDisableTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 13: TH reads the UserCodeTemporaryDisableTime attribute from the DUT and check attribute is triggered " - @"Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("UserCodeTemporaryDisableTime", actualValue, 15U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep14ThSendsTheUnlockDoorCommandToTheDutWithValidPINCode_25() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster - unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 14: TH sends the unlock Door command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestWaitForUserCodeTemporaryDisableTimeExpires_26() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 15000UL; - return WaitForMs("alpha", value); - } - - CHIP_ERROR TestStep15aThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_27() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:10UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15a: TH writes AutoRelockTime attribute value as 10 seconds on the " - @"DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15bThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_28() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:60UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15b: TH writes AutoRelockTime attribute value as 60 seconds on the " - @"DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15cThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_29() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:10UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15c: TH writes AutoRelockTime attribute value as 10 seconds on the " - @"DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15dThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_30() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:60UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15d: TH writes AutoRelockTime attribute value as 60 seconds on the " - @"DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep16aThReadsTheAutoRelockTimeAttributeFromTheDut_31() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeAutoRelockTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 16a: TH reads the AutoRelockTime attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("AutoRelockTime", actualValue, 10UL)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep16bThReadsTheAutoRelockTimeAttributeFromTheDut_32() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeAutoRelockTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 16b: TH reads the AutoRelockTime attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("AutoRelockTime", actualValue, 60UL)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep17ThSendsTheUnlockDoorCommandToTheDutWithValidPINCodeAndVerifyThatDutSendsSuccessResponseToTheTh_33() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnlockDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unlockDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 17: TH sends the unlock Door command to the DUT with valid PINCode and Verify that DUT " - @"sends SUCCESS response to the TH Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestWaitForAutoRelockTimeExpires_34() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 10000UL; - return WaitForMs("alpha", value); - } - - CHIP_ERROR TestWaitForAutoRelockTimeExpires_35() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 60000UL; - return WaitForMs("alpha", value); - } - - CHIP_ERROR TestStep18ThReadsLockStateAttribute_36() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeLockStateWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 18: TH reads LockState attribute Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValueNonNull("LockState", actualValue)); - VerifyOrReturn(CheckValue("LockState", actualValue, 1U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestCleanupTheCreatedUser_37() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster clearUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Cleanup the created user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestCleanTheCreatedCredential_38() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster clearCredentialWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Clean the created credential Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } -}; - -class Test_TC_DRLK_2_4 : public TestCommandBridge { -public: - // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced - Test_TC_DRLK_2_4() - : TestCommandBridge("Test_TC_DRLK_2_4") - , mTestIndex(0) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull) - - ~Test_TC_DRLK_2_4() {} - - /////////// TestCommand Interface ///////// - void NextTest() override - { - CHIP_ERROR err = CHIP_NO_ERROR; - - if (0 == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_4\n"); - } - - if (mTestCount == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_4\n"); - SetCommandExitStatus(CHIP_NO_ERROR); - return; - } - - Wait(); - - // Ensure we increment mTestIndex before we start running the relevant - // command. That way if we lose the timeslice after we send the message - // but before our function call returns, we won't end up with an - // incorrect mTestIndex value observed when we get the response. - switch (mTestIndex++) { - case 0: - ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n"); - err = TestWaitForTheCommissionedDeviceToBeRetrieved_0(); - break; - case 1: - ChipLogProgress(chipTool, " ***** Test Step 1 : Create new user\n"); - err = TestCreateNewUser_1(); - break; - case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Read the user back and verify its fields\n"); - err = TestReadTheUserBackAndVerifyItsFields_2(); - break; - case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Create new PIN credential and lock/unlock user\n"); - err = TestCreateNewPinCredentialAndLockUnlockUser_3(); - break; - case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Verify created PIN credential\n"); - err = TestVerifyCreatedPinCredential_4(); - break; - case 5: - ChipLogProgress( - chipTool, " ***** Test Step 5 : Step 1a: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep1aThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_5(); - break; - case 6: - ChipLogProgress( - chipTool, " ***** Test Step 6 : Step 1b: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep1bThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_6(); - break; - case 7: - ChipLogProgress( - chipTool, " ***** Test Step 7 : Step 1c: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); - if (ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write")) { - NextTest(); - return; - } - err = TestStep1cThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_7(); - break; - case 8: - ChipLogProgress( - chipTool, " ***** Test Step 8 : Step 1d: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write")) { - NextTest(); - return; - } - err = TestStep1dThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_8(); - break; - case 9: - ChipLogProgress( - chipTool, " ***** Test Step 9 : Step 2a: TH sends the Unlock with Timeout argument value as 10 seconds\n"); - if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep2aThSendsTheUnlockWithTimeoutArgumentValueAs10Seconds_9(); - break; - case 10: - ChipLogProgress( - chipTool, " ***** Test Step 10 : Step 2b: TH sends the Unlock with Timeout argument value as 60 seconds\n"); - if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep2bThSendsTheUnlockWithTimeoutArgumentValueAs60Seconds_10(); - break; - case 11: - ChipLogProgress(chipTool, " ***** Test Step 11 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_11(); - break; - case 12: - ChipLogProgress(chipTool, " ***** Test Step 12 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.C03.Rsp && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_12(); - break; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 2c: TH reads LockState attribute\n"); - if (ShouldSkip("DRLK.S.A0000 && DRLK.S.C03.Rsp")) { - NextTest(); - return; - } - err = TestStep2cThReadsLockStateAttribute_13(); - break; - case 14: - ChipLogProgress(chipTool, " ***** Test Step 14 : Cleanup the created user\n"); - err = TestCleanupTheCreatedUser_14(); - break; - case 15: - ChipLogProgress(chipTool, " ***** Test Step 15 : Clean the created credential\n"); - if (ShouldSkip("DRLK.S.C26.Rsp")) { - NextTest(); - return; - } - err = TestCleanTheCreatedCredential_15(); + err = TestCleanTheCreatedCredential_15(); break; } @@ -174977,1790 +174542,314 @@ class Test_TC_DRLK_2_11 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep4cThSendsGetCredentialStatusCommandWithTypeFingerVein_16() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster - getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Step 4c: TH sends Get Credential Status Command with type FingerVein Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); - } - - VerifyOrReturn(CheckConstraintType("credentialExists", "boolean", "boolean")); - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4dThSendsClearCredentialCommandToDutWithTypeRfid_17() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:2U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster clearCredentialWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 4d: TH sends Clear Credential Command to DUT with type RFID Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4eThSendsGetCredentialStatusCommandWithTypeFingerVein_18() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster - getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Step 4e: TH sends Get Credential Status Command with type FingerVein Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); - } - - VerifyOrReturn(CheckConstraintType("credentialExists", "boolean", "boolean")); - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4fThSendsClearCredentialCommandToDutWithTypeFingerVein_19() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster clearCredentialWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 4f: TH sends Clear Credential Command to DUT with type FingerVein Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5aThSendsGetCredentialStatusCommandToDutWithTypePin_20() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster - getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Step 5a: TH sends Get Credential Status Command to DUT with type PIN Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5bThSendsGetCredentialStatusCommandToDutWithTypeRfid_21() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:2U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster - getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Step 5b: TH sends Get Credential Status Command to DUT with type RFID Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5cThSendsGetCredentialStatusCommandToDutWithTypeFingerVein_22() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster - getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Step 5c: TH sends Get Credential Status Command to DUT with type FingerVein Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } -}; - -class Test_TC_DRLK_2_12 : public TestCommandBridge { -public: - // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced - Test_TC_DRLK_2_12() - : TestCommandBridge("Test_TC_DRLK_2_12") - , mTestIndex(0) - { - AddArgument("nodeId", 0, UINT64_MAX, &mNodeId); - AddArgument("cluster", &mCluster); - AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint); - AddArgument("timeout", 0, UINT16_MAX, &mTimeout); - } - // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull) - - ~Test_TC_DRLK_2_12() {} - - /////////// TestCommand Interface ///////// - void NextTest() override - { - CHIP_ERROR err = CHIP_NO_ERROR; - - if (0 == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_12\n"); - } - - if (mTestCount == mTestIndex) { - ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_12\n"); - SetCommandExitStatus(CHIP_NO_ERROR); - return; - } - - Wait(); - - // Ensure we increment mTestIndex before we start running the relevant - // command. That way if we lose the timeslice after we send the message - // but before our function call returns, we won't end up with an - // incorrect mTestIndex value observed when we get the response. - switch (mTestIndex++) { - case 0: - ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n"); - err = TestWaitForTheCommissionedDeviceToBeRetrieved_0(); - break; - case 1: - ChipLogProgress(chipTool, " ***** Test Step 1 : Precondition: Create new user\n"); - err = TestPreconditionCreateNewUser_1(); - break; - case 2: - ChipLogProgress(chipTool, " ***** Test Step 2 : Precondition: Read the user back and verify its fields\n"); - err = TestPreconditionReadTheUserBackAndVerifyItsFields_2(); - break; - case 3: - ChipLogProgress(chipTool, " ***** Test Step 3 : Precondition: Create new PIN credential and lock/unlock user\n"); - err = TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3(); - break; - case 4: - ChipLogProgress(chipTool, " ***** Test Step 4 : Precondition: Verify created PIN credential\n"); - err = TestPreconditionVerifyCreatedPinCredential_4(); - break; - case 5: - ChipLogProgress(chipTool, - " ***** Test Step 5 : Step 1: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write")) { - NextTest(); - return; - } - err = TestStep1ThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5(); - break; - case 6: - ChipLogProgress(chipTool, - " ***** Test Step 6 : Step 1: TH writes the RequirePINforRemoteOperation attribute value as False on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write")) { - NextTest(); - return; - } - err = TestStep1ThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_6(); - break; - case 7: - ChipLogProgress( - chipTool, " ***** Test Step 7 : Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7(); - break; - case 8: - ChipLogProgress(chipTool, " ***** Test Step 8 : Step 3: TH sends Ubolt Door Command to the DUT without PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep3ThSendsUboltDoorCommandToTheDutWithoutPINCode_8(); - break; - case 9: - ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4: TH sends Ubolt Door Command to the DUT with PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep4ThSendsUboltDoorCommandToTheDutWithPINCode_9(); - break; - case 10: - ChipLogProgress(chipTool, - " ***** Test Step 10 : Step 5: TH writes the RequirePINforRemoteOperation attribute value as true on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033.Write")) { - NextTest(); - return; - } - err = TestStep5ThWritesTheRequirePINforRemoteOperationAttributeValueAsTrueOnTheDut_10(); - break; - case 11: - ChipLogProgress(chipTool, - " ***** Test Step 11 : Step 5: TH writes the RequirePINforRemoteOperation attribute value as true on the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && !DRLK.S.A0033.Write")) { - NextTest(); - return; - } - err = TestStep5ThWritesTheRequirePINforRemoteOperationAttributeValueAsTrueOnTheDut_11(); - break; - case 12: - ChipLogProgress( - chipTool, " ***** Test Step 12 : Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033")) { - NextTest(); - return; - } - err = TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12(); - break; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 7: TH sends Ubolt Door Command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep7ThSendsUboltDoorCommandToTheDutWithValidPINCode_13(); - break; - case 14: - ChipLogProgress( - chipTool, " ***** Test Step 14 : Step 8: TH sends Unbolt Door Command to the DUT with Invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep8ThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_14(); - break; - case 15: - ChipLogProgress(chipTool, " ***** Test Step 15 : Step 9: TH sends Unbolt Door Command to the DUT without PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep9ThSendsUnboltDoorCommandToTheDutWithoutPINCode_15(); - break; - case 16: - ChipLogProgress( - chipTool, " ***** Test Step 16 : Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030.Write")) { - NextTest(); - return; - } - err = TestStep10ThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDut_16(); - break; - case 17: - ChipLogProgress( - chipTool, " ***** Test Step 17 : Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the DUT\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0030.Write")) { - NextTest(); - return; - } - err = TestStep10ThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDut_17(); - break; - case 18: - ChipLogProgress(chipTool, - " ***** Test Step 18 : Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT " - "and Verify that the DUT sends Success response\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031.Write")) { - NextTest(); - return; - } - err = TestStep11ThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_18(); - break; - case 19: - ChipLogProgress(chipTool, - " ***** Test Step 19 : Step 11: TH writes UserCodeTemporaryDisableTime attribute value as 15 Seconds on the DUT " - "and Verify that the DUT sends Success response\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && !DRLK.S.A0031.Write")) { - NextTest(); - return; - } - err = TestStep11ThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_19(); - break; - case 20: - ChipLogProgress( - chipTool, " ***** Test Step 20 : Step 12a: TH sends Unbolt Door Command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep12aThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_20(); - break; - case 21: - ChipLogProgress( - chipTool, " ***** Test Step 21 : Step 12b: TH sends Unbolt Door Command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep12bThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_21(); - break; - case 22: - ChipLogProgress( - chipTool, " ***** Test Step 22 : Step 12c: TH sends Unbolt Door Command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep12cThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_22(); - break; - case 23: - ChipLogProgress( - chipTool, " ***** Test Step 23 : Step 12d: TH sends Unbolt Door Command to the DUT with invalid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep12dThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_23(); - break; - case 24: - ChipLogProgress(chipTool, " ***** Test Step 24 : Step 13: TH reads UserCodedTemporaryDisableTime attribute from DUT\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestStep13ThReadsUserCodedTemporaryDisableTimeAttributeFromDut_24(); - break; - case 25: - ChipLogProgress(chipTool, - " ***** Test Step 25 : Step 14: TH sends Unbolt Door Command to the DUT with valid PINCode before " - "UserCodeTemporaryDisableTime expires\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep14ThSendsUnboltDoorCommandToTheDutWithValidPINCodeBeforeUserCodeTemporaryDisableTimeExpires_25(); - break; - case 26: - ChipLogProgress(chipTool, " ***** Test Step 26 : Wait for UserCodeTemporaryDisableTime expires\n"); - if (ShouldSkip("( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031")) { - NextTest(); - return; - } - err = TestWaitForUserCodeTemporaryDisableTimeExpires_26(); - break; - case 27: - ChipLogProgress( - chipTool, " ***** Test Step 27 : Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_27(); - break; - case 28: - ChipLogProgress( - chipTool, " ***** Test Step 28 : Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("DRLK.S.A0023.Write && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_28(); - break; - case 29: - ChipLogProgress( - chipTool, " ***** Test Step 29 : Step 15: TH writes AutoRelockTime attribute value as 10 seconds on the DUT\n"); - if (ShouldSkip("PICS_SDK_CI_ONLY && !DRLK.S.A0023.Write")) { - NextTest(); - return; - } - err = TestStep15ThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_29(); - break; - case 30: - ChipLogProgress( - chipTool, " ***** Test Step 30 : Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT\n"); - if (ShouldSkip("PICS_SKIP_SAMPLE_APP && !DRLK.S.A0023.Write")) { - NextTest(); - return; - } - err = TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_30(); - break; - case 31: - ChipLogProgress(chipTool, " ***** Test Step 31 : Step 16: TH reads the AutoRelockTime attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestStep16ThReadsTheAutoRelockTimeAttributeFromTheDut_31(); - break; - case 32: - ChipLogProgress(chipTool, " ***** Test Step 32 : Step 16: TH reads the AutoRelockTime attribute from the DUT\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestStep16ThReadsTheAutoRelockTimeAttributeFromTheDut_32(); - break; - case 33: - ChipLogProgress( - chipTool, " ***** Test Step 33 : Step 17: TH sends the Unbolt Door command to the DUT with valid PINCode\n"); - if (ShouldSkip("DRLK.S.C27.Rsp")) { - NextTest(); - return; - } - err = TestStep17ThSendsTheUnboltDoorCommandToTheDutWithValidPINCode_33(); - break; - case 34: - ChipLogProgress(chipTool, " ***** Test Step 34 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SDK_CI_ONLY")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_34(); - break; - case 35: - ChipLogProgress(chipTool, " ***** Test Step 35 : Wait for AutoRelockTime Expires\n"); - if (ShouldSkip("DRLK.S.A0023 && PICS_SKIP_SAMPLE_APP")) { - NextTest(); - return; - } - err = TestWaitForAutoRelockTimeExpires_35(); - break; - case 36: - ChipLogProgress(chipTool, " ***** Test Step 36 : Step 18: TH reads LockState attribute\n"); - if (ShouldSkip("DRLK.S.A0000 && DRLK.S.C01.Rsp")) { - NextTest(); - return; - } - err = TestStep18ThReadsLockStateAttribute_36(); - break; - case 37: - ChipLogProgress(chipTool, " ***** Test Step 37 : Cleanup the created user\n"); - err = TestCleanupTheCreatedUser_37(); - break; - case 38: - ChipLogProgress(chipTool, " ***** Test Step 38 : Clean the created credential\n"); - if (ShouldSkip("DRLK.S.C26.Rsp")) { - NextTest(); - return; - } - err = TestCleanTheCreatedCredential_38(); - break; - } - - if (CHIP_NO_ERROR != err) { - ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err)); - SetCommandExitStatus(err); - } - } - - void OnStatusUpdate(const chip::app::StatusIB & status) override - { - switch (mTestIndex - 1) { - case 0: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 1: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 2: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 3: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 4: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 5: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 6: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 7: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 8: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 9: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 10: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 11: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 12: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 13: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 14: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 15: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 16: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 17: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 18: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 19: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 20: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 21: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 22: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 23: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 24: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 25: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_FAILURE)); - break; - case 26: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 27: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 28: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 29: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 30: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - break; - case 31: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 32: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 33: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 34: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 35: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 36: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 37: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - case 38: - VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); - break; - } - - // Go on to the next test. - ContinueOnChipMainThread(CHIP_NO_ERROR); - } - - chip::System::Clock::Timeout GetWaitDuration() const override - { - return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds)); - } - -private: - std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 39; - - chip::Optional mNodeId; - chip::Optional mCluster; - chip::Optional mEndpoint; - chip::Optional mTimeout; - - CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value; - value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL; - return WaitForCommissionee("alpha", value); - } - - CHIP_ERROR TestPreconditionCreateNewUser_1() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetUserParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userName = @"xxx"; - params.userUniqueID = [NSNumber numberWithUnsignedInt:6452UL]; - params.userStatus = [NSNumber numberWithUnsignedChar:1U]; - params.userType = [NSNumber numberWithUnsignedChar:0U]; - params.credentialRule = [NSNumber numberWithUnsignedChar:0U]; - [cluster setUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Precondition: Create new user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionReadTheUserBackAndVerifyItsFields_2() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster getUserWithParams:params - completion:^(MTRDoorLockClusterGetUserResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Read the user back and verify its fields Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.userName; - VerifyOrReturn(CheckValueNonNull("UserName", actualValue)); - VerifyOrReturn(CheckValueAsString("UserName", actualValue, @"xxx")); - } - - { - id actualValue = values.userUniqueID; - VerifyOrReturn(CheckValueNonNull("UserUniqueID", actualValue)); - VerifyOrReturn(CheckValue("UserUniqueID", actualValue, 6452UL)); - } - - { - id actualValue = values.userStatus; - VerifyOrReturn(CheckValueNonNull("UserStatus", actualValue)); - VerifyOrReturn(CheckValue("UserStatus", actualValue, 1U)); - } - - { - id actualValue = values.userType; - VerifyOrReturn(CheckValueNonNull("UserType", actualValue)); - VerifyOrReturn(CheckValue("UserType", actualValue, 0U)); - } - - { - id actualValue = values.credentialRule; - VerifyOrReturn(CheckValueNonNull("CredentialRule", actualValue)); - VerifyOrReturn(CheckValue("CredentialRule", actualValue, 0U)); - } - - { - id actualValue = values.credentials; - VerifyOrReturn(CheckValueNonNull("Credentials", actualValue)); - VerifyOrReturn(CheckValue("Credentials", [actualValue count], static_cast(0))); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextUserIndex; - VerifyOrReturn(CheckValueNull("NextUserIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionCreateNewPinCredentialAndLockUnlockUser_3() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterSetCredentialParams alloc] init]; - params.operationType = [NSNumber numberWithUnsignedChar:0U]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - params.credentialData = [[NSData alloc] initWithBytes:"123456" length:6]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - params.userStatus = nil; - params.userType = nil; - [cluster - setCredentialWithParams:params - completion:^(MTRDoorLockClusterSetCredentialResponseParams * _Nullable values, NSError * _Nullable err) { - NSLog(@"Precondition: Create new PIN credential and lock/unlock user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.status; - VerifyOrReturn(CheckValue("Status", actualValue, 0U)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNonNull("NextCredentialIndex", actualValue)); - VerifyOrReturn(CheckValue("NextCredentialIndex", actualValue, 2U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestPreconditionVerifyCreatedPinCredential_4() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - - [cluster getCredentialStatusWithParams:params - completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, - NSError * _Nullable err) { - NSLog(@"Precondition: Verify created PIN credential Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = values.credentialExists; - VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); - } - - { - id actualValue = values.userIndex; - VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); - VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); - } - - { - id actualValue = values.creatorFabricIndex; - VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.lastModifiedFabricIndex; - VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); - VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); - } - - { - id actualValue = values.nextCredentialIndex; - VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep1ThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_5() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1: TH writes the RequirePINforRemoteOperation attribute " - @"value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep1ThWritesTheRequirePINforRemoteOperationAttributeValueAsFalseOnTheDut_6() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:false]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 1: TH writes the RequirePINforRemoteOperation attribute " - @"value as False on the DUT Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep2ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_7() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 2: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, false)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep3ThSendsUboltDoorCommandToTheDutWithoutPINCode_8() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - [cluster unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 3: TH sends Ubolt Door Command to the DUT without PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep4ThSendsUboltDoorCommandToTheDutWithPINCode_9() + CHIP_ERROR TestStep4cThSendsGetCredentialStatusCommandWithTypeFingerVein_16() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 4: TH sends Ubolt Door Command to the DUT with PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep5ThWritesTheRequirePINforRemoteOperationAttributeValueAsTrueOnTheDut_10() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5: TH writes the RequirePINforRemoteOperation attribute " - @"value as true on the DUT Error: %@", - err); + [cluster + getCredentialStatusWithParams:params + completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, + NSError * _Nullable err) { + NSLog(@"Step 4c: TH sends Get Credential Status Command with type FingerVein Error: %@", err); - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - NextTest(); - }]; + { + id actualValue = values.credentialExists; + VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); + } - return CHIP_NO_ERROR; - } + VerifyOrReturn(CheckConstraintType("credentialExists", "boolean", "boolean")); + { + id actualValue = values.userIndex; + VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); + VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); + } - CHIP_ERROR TestStep5ThWritesTheRequirePINforRemoteOperationAttributeValueAsTrueOnTheDut_11() - { + { + id actualValue = values.creatorFabricIndex; + VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); + VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); + } - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + { + id actualValue = values.lastModifiedFabricIndex; + VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); + VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); + } - id requirePINforRemoteOperationArgument; - requirePINforRemoteOperationArgument = [NSNumber numberWithBool:true]; - [cluster writeAttributeRequirePINforRemoteOperationWithValue:requirePINforRemoteOperationArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 5: TH writes the RequirePINforRemoteOperation attribute " - @"value as true on the DUT Error: %@", - err); + { + id actualValue = values.nextCredentialIndex; + VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); + } - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6ThReadsTheRequirePINforRemoteOperationAttributeFromTheDut_12() + CHIP_ERROR TestStep4dThSendsClearCredentialCommandToDutWithTypeRfid_17() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - [cluster readAttributeRequirePINforRemoteOperationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6: TH reads the RequirePINforRemoteOperation attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("RequirePINforRemoteOperation", actualValue, true)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep7ThSendsUboltDoorCommandToTheDutWithValidPINCode_13() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:2U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 7: TH sends Ubolt Door Command to the DUT with valid PINCode Error: %@", err); + [cluster clearCredentialWithParams:params + completion:^(NSError * _Nullable err) { + NSLog(@"Step 4d: TH sends Clear Credential Command to DUT with type RFID Error: %@", err); - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR TestStep8ThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_14() + CHIP_ERROR TestStep4eThSendsGetCredentialStatusCommandWithTypeFingerVein_18() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123458" length:6]; - [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 8: TH sends Unbolt Door Command to the DUT with Invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep9ThSendsUnboltDoorCommandToTheDutWithoutPINCode_15() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 9: TH sends Unbolt Door Command to the DUT without PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep10ThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDut_16() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the " - @"DUT Error: %@", - err); + getCredentialStatusWithParams:params + completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, + NSError * _Nullable err) { + NSLog(@"Step 4e: TH sends Get Credential Status Command with type FingerVein Error: %@", err); - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - NextTest(); - }]; + { + id actualValue = values.credentialExists; + VerifyOrReturn(CheckValue("CredentialExists", actualValue, true)); + } - return CHIP_NO_ERROR; - } + VerifyOrReturn(CheckConstraintType("credentialExists", "boolean", "boolean")); + { + id actualValue = values.userIndex; + VerifyOrReturn(CheckValueNonNull("UserIndex", actualValue)); + VerifyOrReturn(CheckValue("UserIndex", actualValue, 1U)); + } - CHIP_ERROR TestStep10ThWritesWrongCodeEntryLimitAttributeValueAs3OnTheDut_17() - { + { + id actualValue = values.creatorFabricIndex; + VerifyOrReturn(CheckValueNonNull("CreatorFabricIndex", actualValue)); + VerifyOrReturn(CheckValue("CreatorFabricIndex", actualValue, 1U)); + } - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + { + id actualValue = values.lastModifiedFabricIndex; + VerifyOrReturn(CheckValueNonNull("LastModifiedFabricIndex", actualValue)); + VerifyOrReturn(CheckValue("LastModifiedFabricIndex", actualValue, 1U)); + } - id wrongCodeEntryLimitArgument; - wrongCodeEntryLimitArgument = [NSNumber numberWithUnsignedChar:3U]; - [cluster writeAttributeWrongCodeEntryLimitWithValue:wrongCodeEntryLimitArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 10: TH writes WrongCodeEntryLimit attribute value as 3 on the " - @"DUT Error: %@", - err); + { + id actualValue = values.nextCredentialIndex; + VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); + } - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR - TestStep11ThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_18() + CHIP_ERROR TestStep4fThSendsClearCredentialCommandToDutWithTypeFingerVein_19() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 11: TH writes UserCodeTemporaryDisableTime attribute " - @"value as 15 Seconds on the DUT and Verify that the DUT sends " - @"Success response Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR - TestStep11ThWritesUserCodeTemporaryDisableTimeAttributeValueAs15SecondsOnTheDutAndVerifyThatTheDutSendsSuccessResponse_19() - { + __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + [cluster clearCredentialWithParams:params + completion:^(NSError * _Nullable err) { + NSLog(@"Step 4f: TH sends Clear Credential Command to DUT with type FingerVein Error: %@", err); - id userCodeTemporaryDisableTimeArgument; - userCodeTemporaryDisableTimeArgument = [NSNumber numberWithUnsignedChar:15U]; - [cluster writeAttributeUserCodeTemporaryDisableTimeWithValue:userCodeTemporaryDisableTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 11: TH writes UserCodeTemporaryDisableTime attribute " - @"value as 15 Seconds on the DUT and Verify that the DUT sends " - @"Success response Error: %@", - err); + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR TestStep12aThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_20() + CHIP_ERROR TestStep5aThSendsGetCredentialStatusCommandToDutWithTypePin_20() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123457" length:6]; - [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12a: TH sends Unbolt Door Command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12bThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_21() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123458" length:6]; [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12b: TH sends Unbolt Door Command to the DUT with invalid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep12cThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_22() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + getCredentialStatusWithParams:params + completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, + NSError * _Nullable err) { + NSLog(@"Step 5a: TH sends Get Credential Status Command to DUT with type PIN Error: %@", err); - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123459" length:6]; - [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12c: TH sends Unbolt Door Command to the DUT with invalid PINCode Error: %@", err); + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; + { + id actualValue = values.credentialExists; + VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); + } - return CHIP_NO_ERROR; - } + { + id actualValue = values.userIndex; + VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); + } - CHIP_ERROR TestStep12dThSendsUnboltDoorCommandToTheDutWithInvalidPINCode_23() - { + { + id actualValue = values.creatorFabricIndex; + VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); + } - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + { + id actualValue = values.lastModifiedFabricIndex; + VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); + } - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123460" length:6]; - [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 12d: TH sends Unbolt Door Command to the DUT with invalid PINCode Error: %@", err); + { + id actualValue = values.nextCredentialIndex; + VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); + } - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR TestStep13ThReadsUserCodedTemporaryDisableTimeAttributeFromDut_24() + CHIP_ERROR TestStep5bThSendsGetCredentialStatusCommandToDutWithTypeRfid_21() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - [cluster readAttributeUserCodeTemporaryDisableTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 13: TH reads UserCodedTemporaryDisableTime attribute from DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("UserCodeTemporaryDisableTime", actualValue, 15U)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep14ThSendsUnboltDoorCommandToTheDutWithValidPINCodeBeforeUserCodeTemporaryDisableTimeExpires_25() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:2U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; [cluster - unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 14: TH sends Unbolt Door Command to the DUT with valid PINCode before " - @"UserCodeTemporaryDisableTime expires Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_FAILURE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestWaitForUserCodeTemporaryDisableTimeExpires_26() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 15000UL; - return WaitForMs("alpha", value); - } - - CHIP_ERROR TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_27() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:10UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT " - @"Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_28() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:60UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT " - @"Error: %@", - err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15ThWritesAutoRelockTimeAttributeValueAs10SecondsOnTheDut_29() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:10UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15: TH writes AutoRelockTime attribute value as 10 seconds on the DUT " - @"Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep15ThWritesAutoRelockTimeAttributeValueAs60SecondsOnTheDut_30() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - id autoRelockTimeArgument; - autoRelockTimeArgument = [NSNumber numberWithUnsignedInt:60UL]; - [cluster writeAttributeAutoRelockTimeWithValue:autoRelockTimeArgument - completion:^(NSError * _Nullable err) { - NSLog(@"Step 15: TH writes AutoRelockTime attribute value as 60 seconds on the DUT " - @"Error: %@", - err); - - VerifyOrReturn(CheckValue("status", - err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] - ? err.code - : EMBER_ZCL_STATUS_FAILURE) - : 0, - EMBER_ZCL_STATUS_UNSUPPORTED_WRITE)); - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep16ThReadsTheAutoRelockTimeAttributeFromTheDut_31() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeAutoRelockTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 16: TH reads the AutoRelockTime attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("AutoRelockTime", actualValue, 10UL)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep16ThReadsTheAutoRelockTimeAttributeFromTheDut_32() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - [cluster readAttributeAutoRelockTimeWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 16: TH reads the AutoRelockTime attribute from the DUT Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - { - id actualValue = value; - VerifyOrReturn(CheckValue("AutoRelockTime", actualValue, 60UL)); - } - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestStep17ThSendsTheUnboltDoorCommandToTheDutWithValidPINCode_33() - { - - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - - __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init]; - params.pinCode = [[NSData alloc] initWithBytes:"123456" length:6]; - [cluster unboltDoorWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Step 17: TH sends the Unbolt Door command to the DUT with valid PINCode Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - - NextTest(); - }]; - - return CHIP_NO_ERROR; - } - - CHIP_ERROR TestWaitForAutoRelockTimeExpires_34() - { - - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 10000UL; - return WaitForMs("alpha", value); - } - - CHIP_ERROR TestWaitForAutoRelockTimeExpires_35() - { + getCredentialStatusWithParams:params + completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, + NSError * _Nullable err) { + NSLog(@"Step 5b: TH sends Get Credential Status Command to DUT with type RFID Error: %@", err); - chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value; - value.ms = 60000UL; - return WaitForMs("alpha", value); - } + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - CHIP_ERROR TestStep18ThReadsLockStateAttribute_36() - { + { + id actualValue = values.credentialExists; + VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); + } - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + { + id actualValue = values.userIndex; + VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); + } - [cluster readAttributeLockStateWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 18: TH reads LockState attribute Error: %@", err); + { + id actualValue = values.creatorFabricIndex; + VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); + } - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + { + id actualValue = values.lastModifiedFabricIndex; + VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); + } - { - id actualValue = value; - VerifyOrReturn(CheckValueNonNull("LockState", actualValue)); - VerifyOrReturn(CheckValue("LockState", actualValue, 1U)); - } + { + id actualValue = values.nextCredentialIndex; + VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); + } - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } - CHIP_ERROR TestCleanupTheCreatedUser_37() + CHIP_ERROR TestStep5cThSendsGetCredentialStatusCommandToDutWithTypeFingerVein_22() { MTRBaseDevice * device = GetDevice("alpha"); __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); - __auto_type * params = [[MTRDoorLockClusterClearUserParams alloc] init]; - params.userIndex = [NSNumber numberWithUnsignedShort:1U]; - [cluster clearUserWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Cleanup the created user Error: %@", err); - - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + __auto_type * params = [[MTRDoorLockClusterGetCredentialStatusParams alloc] init]; + params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:4U]; + ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; - NextTest(); - }]; + [cluster + getCredentialStatusWithParams:params + completion:^(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable values, + NSError * _Nullable err) { + NSLog(@"Step 5c: TH sends Get Credential Status Command to DUT with type FingerVein Error: %@", + err); - return CHIP_NO_ERROR; - } + VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); - CHIP_ERROR TestCleanTheCreatedCredential_38() - { + { + id actualValue = values.credentialExists; + VerifyOrReturn(CheckValue("CredentialExists", actualValue, false)); + } - MTRBaseDevice * device = GetDevice("alpha"); - __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue]; - VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); + { + id actualValue = values.userIndex; + VerifyOrReturn(CheckValueNull("UserIndex", actualValue)); + } - __auto_type * params = [[MTRDoorLockClusterClearCredentialParams alloc] init]; - params.credential = [[MTRDoorLockClusterCredentialStruct alloc] init]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialType = [NSNumber numberWithUnsignedChar:1U]; - ((MTRDoorLockClusterCredentialStruct *) params.credential).credentialIndex = [NSNumber numberWithUnsignedShort:1U]; + { + id actualValue = values.creatorFabricIndex; + VerifyOrReturn(CheckValueNull("CreatorFabricIndex", actualValue)); + } - [cluster clearCredentialWithParams:params - completion:^(NSError * _Nullable err) { - NSLog(@"Clean the created credential Error: %@", err); + { + id actualValue = values.lastModifiedFabricIndex; + VerifyOrReturn(CheckValueNull("LastModifiedFabricIndex", actualValue)); + } - VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + { + id actualValue = values.nextCredentialIndex; + VerifyOrReturn(CheckValueNull("NextCredentialIndex", actualValue)); + } - NextTest(); - }]; + NextTest(); + }]; return CHIP_NO_ERROR; } @@ -178655,29 +176744,91 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { err = TestStep4eReadTheOptionalAttributeReplacementProductListAcfremonsf02InAttributeList_11(); break; case 12: - ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5: TH reads EventList attribute from DUT\n"); + ChipLogProgress(chipTool, + " ***** Test Step 12 : Step 4f: TH reads AttributeList attribute from DUT. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4fThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + break; + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5a: TH reads EventList attribute from DUT\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6a: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_13(); - break; case 14: + ChipLogProgress(chipTool, + " ***** Test Step 14 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14(); + break; + case 15: + ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + if (ShouldSkip("!ACFREMON.S.C00.Rsp")) { + NextTest(); + return; + } + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_15(); + break; + case 16: ChipLogProgress( - chipTool, " ***** Test Step 14 : Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList\n"); + chipTool, " ***** Test Step 16 : Step 6a: Read the optional command (ResetCondition) in AcceptedCommandList\n"); if (ShouldSkip("ACFREMON.S.C00.Rsp")) { NextTest(); return; } - err = TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_14(); + err = TestStep6aReadTheOptionalCommandResetConditionInAcceptedCommandList_16(); break; - case 15: - ChipLogProgress(chipTool, " ***** Test Step 15 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_15(); + case 17: + ChipLogProgress(chipTool, + " ***** Test Step 17 : Step 6b: TH reads from the DUT the AcceptedCommandList attribute. 1.The list SHALL NOT " + "contain any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - " + "0x0000_FFFE). 2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - " + "0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list " + "SHALL NOT contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), " + "(0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsFromTheDutTheAcceptedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17(); + break; + case 18: + ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_18(); + break; + case 19: + ChipLogProgress(chipTool, + " ***** Test Step 19 : Step 7b: TH reads from the DUT the GeneratedCommandList attribute. 1.The list SHALL NOT " + "contain any additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - " + "0x0000_FFFE). 2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - " + "0xXXXX_4FFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list " + "SHALL NOT contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), " + "(0xXXXX_5000 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - " + "0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19(); break; } @@ -178738,6 +176889,18 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { case 15: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 16: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -178751,7 +176914,7 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 16; + const uint16_t mTestCount = 20; chip::Optional mNodeId; chip::Optional mCluster; @@ -179033,7 +177196,29 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_13() + CHIP_ERROR + TestStep4fThReadsAttributeListAttributeFromDut1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_15() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179047,6 +177232,11 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); + { + id actualValue = value; + VerifyOrReturn(CheckValue("AcceptedCommandList", [actualValue count], static_cast(0))); + } + VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list")); NextTest(); }]; @@ -179054,7 +177244,7 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_14() + CHIP_ERROR TestStep6aReadTheOptionalCommandResetConditionInAcceptedCommandList_16() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179064,7 +177254,7 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList Error: %@", err); + NSLog(@"Step 6a: Read the optional command (ResetCondition) in AcceptedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -179077,7 +177267,18 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_15() + CHIP_ERROR + TestStep6bThReadsFromTheDutTheAcceptedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_17() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_18() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179087,7 +177288,7 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -179102,6 +177303,17 @@ class Test_TC_ACFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsFromTheDutTheGeneratedCommandListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_ACFREMON_2_1 : public TestCommandBridge { @@ -179532,29 +177744,83 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { err = TestStep4eReadTheOptionalAttributeReplacementProductListHepafremonsf02InAttributeList_11(); break; case 12: - ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5: TH reads EventList attribute from DUT\n"); + ChipLogProgress(chipTool, + " ***** Test Step 12 : Step 4f: TH reads from the DUT the AttributeList attribute. The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). " + "2.The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.TThe list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep4fThReadsFromTheDutTheAttributeListAttributeTheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TTheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12(); + break; + case 13: + ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5a: TH reads EventList attribute from DUT\n"); if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) { NextTest(); return; } NextTest(); return; - case 13: - ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6a: Read the global attribute: AcceptedCommandList\n"); - err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_13(); - break; case 14: + ChipLogProgress(chipTool, + " ***** Test Step 14 : Step 5b: TH reads from the DUT the EventList attribute. 1.The list SHALL NOT contain any " + "additional values in the standard or scoped range: (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE) 2. " + "The list MAY contain values in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), " + "where XXXX is the allowed MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3. The list SHALL NOT " + "contain any values in the Test Vendor or invalid range: (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 " + "- 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) { + NextTest(); + return; + } + err = TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14(); + break; + case 15: + ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6a: Read the global attribute: AcceptedCommandList\n"); + err = TestStep6aReadTheGlobalAttributeAcceptedCommandList_15(); + break; + case 16: + ChipLogProgress(chipTool, + " ***** Test Step 16 : Step 6b: TH reads AcceptedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16(); + break; + case 17: ChipLogProgress( - chipTool, " ***** Test Step 14 : Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList\n"); + chipTool, " ***** Test Step 17 : Step 6b: Read the optional command (ResetCondition) in AcceptedCommandList\n"); if (ShouldSkip("HEPAFREMON.S.C00.Rsp")) { NextTest(); return; } - err = TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_14(); + err = TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_17(); break; - case 15: - ChipLogProgress(chipTool, " ***** Test Step 15 : Step 7: Read the global attribute: GeneratedCommandList\n"); - err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_15(); + case 18: + ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7a: Read the global attribute: GeneratedCommandList\n"); + err = TestStep7aReadTheGlobalAttributeGeneratedCommandList_18(); + break; + case 19: + ChipLogProgress(chipTool, + " ***** Test Step 19 : Step 7b: TH reads GeneratedCommandList attribute from DUT. 1.The list MAY contain values in " + "the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI " + "range (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT contain any values in the Test " + "Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - " + "0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)\n"); + if (ShouldSkip("PICS_USER_PROMPT")) { + NextTest(); + return; + } + err = TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19(); break; } @@ -179615,6 +177881,18 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { case 15: VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); break; + case 16: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 17: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 18: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; + case 19: + VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0)); + break; } // Go on to the next test. @@ -179628,7 +177906,7 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { private: std::atomic_uint16_t mTestIndex; - const uint16_t mTestCount = 16; + const uint16_t mTestCount = 20; chip::Optional mNodeId; chip::Optional mCluster; @@ -179911,7 +178189,29 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_13() + CHIP_ERROR + TestStep4fThReadsFromTheDutTheAttributeListAttributeTheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TTheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_12() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR + TestStep5bThReadsFromTheDutTheEventListAttribute1TheListShallNotContainAnyAdditionalValuesInTheStandardOrScopedRange0x000000000x00004fffAnd0x0000F0000x0000Fffe2TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX4fffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored3TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000050000x0000EfffAnd0x0000Ffff0xXXXX50000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_14() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6aReadTheGlobalAttributeAcceptedCommandList_15() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179932,7 +178232,18 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_14() + CHIP_ERROR + TestStep6bThReadsAcceptedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_16() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } + + CHIP_ERROR TestStep6bReadTheOptionalCommandResetConditionInAcceptedCommandList_17() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179955,7 +178266,7 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } - CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_15() + CHIP_ERROR TestStep7aReadTheGlobalAttributeGeneratedCommandList_18() { MTRBaseDevice * device = GetDevice("alpha"); @@ -179965,7 +178276,7 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE); [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) { - NSLog(@"Step 7: Read the global attribute: GeneratedCommandList Error: %@", err); + NSLog(@"Step 7a: Read the global attribute: GeneratedCommandList Error: %@", err); VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0)); @@ -179980,6 +178291,17 @@ class Test_TC_HEPAFREMON_1_1 : public TestCommandBridge { return CHIP_NO_ERROR; } + + CHIP_ERROR + TestStep7bThReadsGeneratedCommandListAttributeFromDut1TheListMayContainValuesInTheManufacturerExtensibleIdentifierMeiRange0xXXXX00000xXXXX00ffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1TheseValuesShallBeIgnored2TheListShallNotContainAnyValuesInTheTestVendorOrInvalidRange0x000001000x0000Ffff0xXXXX01000xXXXXFfffAnd0xFFF100000xFFFFFfffWhereXxxxIsTheAllowedMeiRange0x00010xFFF1_19() + { + + chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value; + value.message = chip::Span("Please enter 'y' for successgarbage: not in length on purpose", 28); + value.expectedValue.Emplace(); + value.expectedValue.Value() = chip::Span("ygarbage: not in length on purpose", 1); + return UserPrompt("alpha", value); + } }; class Test_TC_HEPAFREMON_2_1 : public TestCommandBridge { @@ -180525,15 +178847,12 @@ void registerCommandsTests(Commands & commands) make_unique(), make_unique(), make_unique(), - make_unique(), - make_unique(), make_unique(), make_unique(), make_unique(), make_unique(), make_unique(), make_unique(), - make_unique(), make_unique(), make_unique(), make_unique(),