Add tests for Smoke CO Alarm (#27123)
* Fix decoding of TLV payload data
Ignore empty field events.
* Restyled by autopep8
* Smoke/CO: Add test scripts
* [SMCO] Update test scripts
* SMOKECO: Revised document
* Revised yaml per the documentation
* Regen zap
* Disable all smco tests in Darwin
* Regen zap
* Fix PICS
* Update test scripts per review comments
* Remove Unit Testing Cluster
* Restyled by prettier-yaml
* Update test scripts per review comments
* Regen zap
* Update test scripts per review comments
---------
Co-authored-by: Hare <renilr0@outlook.com>
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/examples/darwin-framework-tool/templates/tests/ciTests.json b/examples/darwin-framework-tool/templates/tests/ciTests.json
index 6e076c8..83adb93 100644
--- a/examples/darwin-framework-tool/templates/tests/ciTests.json
+++ b/examples/darwin-framework-tool/templates/tests/ciTests.json
@@ -38,6 +38,14 @@
"Disabled because the power source configuration cluster is now deprecated and not present in all-clusters",
"Test_TC_PSCFG_1_1",
"Test_TC_PSCFG_2_1",
- "Test_TC_PSCFG_2_2"
+ "Test_TC_PSCFG_2_2",
+ "Disabled due to SmokeCOAlarm not being enabled in Matter.framework for now:",
+ "Test_TC_SMCO_1_1",
+ "Test_TC_SMCO_2_1",
+ "Test_TC_SMCO_2_2",
+ "Test_TC_SMCO_2_3",
+ "Test_TC_SMCO_2_4",
+ "Test_TC_SMCO_2_5",
+ "Test_TC_SMCO_2_6"
]
}
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 f3a361a..fd4e3ef 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
@@ -1725,223 +1725,6 @@
command SelfTestRequest(): DefaultSuccess = 0;
}
-/** The Test Cluster is meant to validate the generated code */
-server cluster UnitTesting = 4294048773 {
- enum SimpleEnum : ENUM8 {
- kUnspecified = 0;
- kValueA = 1;
- kValueB = 2;
- kValueC = 3;
- }
-
- bitmap Bitmap16MaskMap : BITMAP16 {
- kMaskVal1 = 0x1;
- kMaskVal2 = 0x2;
- kMaskVal3 = 0x4;
- kMaskVal4 = 0x4000;
- }
-
- bitmap Bitmap32MaskMap : BITMAP32 {
- kMaskVal1 = 0x1;
- kMaskVal2 = 0x2;
- kMaskVal3 = 0x4;
- kMaskVal4 = 0x40000000;
- }
-
- bitmap Bitmap64MaskMap : BITMAP64 {
- kMaskVal1 = 0x1;
- kMaskVal2 = 0x2;
- kMaskVal3 = 0x4;
- kMaskVal4 = 0x4000000000000000;
- }
-
- bitmap Bitmap8MaskMap : BITMAP8 {
- kMaskVal1 = 0x1;
- kMaskVal2 = 0x2;
- kMaskVal3 = 0x4;
- kMaskVal4 = 0x40;
- }
-
- bitmap SimpleBitmap : BITMAP8 {
- kValueA = 0x1;
- kValueB = 0x2;
- kValueC = 0x4;
- }
-
- struct SimpleStruct {
- int8u a = 0;
- boolean b = 1;
- SimpleEnum c = 2;
- octet_string d = 3;
- char_string e = 4;
- SimpleBitmap f = 5;
- single g = 6;
- double h = 7;
- }
-
- fabric_scoped struct TestFabricScoped {
- fabric_sensitive int8u fabricSensitiveInt8u = 1;
- optional fabric_sensitive int8u optionalFabricSensitiveInt8u = 2;
- nullable fabric_sensitive int8u nullableFabricSensitiveInt8u = 3;
- optional nullable fabric_sensitive int8u nullableOptionalFabricSensitiveInt8u = 4;
- fabric_sensitive char_string fabricSensitiveCharString = 5;
- fabric_sensitive SimpleStruct fabricSensitiveStruct = 6;
- fabric_sensitive int8u fabricSensitiveInt8uList[] = 7;
- fabric_idx fabricIndex = 254;
- }
-
- struct NullablesAndOptionalsStruct {
- nullable int16u nullableInt = 0;
- optional int16u optionalInt = 1;
- optional nullable int16u nullableOptionalInt = 2;
- nullable char_string nullableString = 3;
- optional char_string optionalString = 4;
- optional nullable char_string nullableOptionalString = 5;
- nullable SimpleStruct nullableStruct = 6;
- optional SimpleStruct optionalStruct = 7;
- optional nullable SimpleStruct nullableOptionalStruct = 8;
- nullable SimpleEnum nullableList[] = 9;
- optional SimpleEnum optionalList[] = 10;
- optional nullable SimpleEnum nullableOptionalList[] = 11;
- }
-
- struct NestedStruct {
- int8u a = 0;
- boolean b = 1;
- SimpleStruct c = 2;
- }
-
- struct NestedStructList {
- int8u a = 0;
- boolean b = 1;
- SimpleStruct c = 2;
- SimpleStruct d[] = 3;
- int32u e[] = 4;
- octet_string f[] = 5;
- int8u g[] = 6;
- }
-
- struct DoubleNestedStructList {
- NestedStructList a[] = 0;
- }
-
- struct TestListStructOctet {
- int64u member1 = 0;
- octet_string<32> member2 = 1;
- }
-
- info event TestEvent = 1 {
- INT8U arg1 = 1;
- SimpleEnum arg2 = 2;
- BOOLEAN arg3 = 3;
- SimpleStruct arg4 = 4;
- SimpleStruct arg5[] = 5;
- SimpleEnum arg6[] = 6;
- }
-
- fabric_sensitive info event TestFabricScopedEvent = 2 {
- fabric_idx fabricIndex = 254;
- }
-
- attribute boolean boolean = 0;
- attribute Bitmap8MaskMap bitmap8 = 1;
- attribute Bitmap16MaskMap bitmap16 = 2;
- attribute Bitmap32MaskMap bitmap32 = 3;
- attribute Bitmap64MaskMap bitmap64 = 4;
- attribute int8u int8u = 5;
- attribute int16u int16u = 6;
- attribute int24u int24u = 7;
- attribute int32u int32u = 8;
- attribute int40u int40u = 9;
- attribute int48u int48u = 10;
- attribute int56u int56u = 11;
- attribute int64u int64u = 12;
- attribute int8s int8s = 13;
- attribute int16s int16s = 14;
- attribute int24s int24s = 15;
- attribute int32s int32s = 16;
- attribute int40s int40s = 17;
- attribute int48s int48s = 18;
- attribute int56s int56s = 19;
- attribute int64s int64s = 20;
- attribute enum8 enum8 = 21;
- attribute enum16 enum16 = 22;
- attribute single floatSingle = 23;
- attribute double floatDouble = 24;
- attribute octet_string<10> octetString = 25;
- attribute INT8U listInt8u[] = 26;
- attribute OCTET_STRING listOctetString[] = 27;
- attribute TestListStructOctet listStructOctetString[] = 28;
- attribute long_octet_string<1000> longOctetString = 29;
- attribute char_string<10> charString = 30;
- attribute long_char_string<1000> longCharString = 31;
- attribute epoch_us epochUs = 32;
- attribute epoch_s epochS = 33;
- attribute vendor_id vendorId = 34;
- attribute NullablesAndOptionalsStruct listNullablesAndOptionalsStruct[] = 35;
- attribute SimpleEnum enumAttr = 36;
- attribute SimpleStruct structAttr = 37;
- attribute int8u rangeRestrictedInt8u = 38;
- attribute int8s rangeRestrictedInt8s = 39;
- attribute int16u rangeRestrictedInt16u = 40;
- attribute int16s rangeRestrictedInt16s = 41;
- attribute LONG_OCTET_STRING listLongOctetString[] = 42;
- attribute TestFabricScoped listFabricScoped[] = 43;
- timedwrite attribute boolean timedWriteBoolean = 48;
- attribute boolean generalErrorBoolean = 49;
- attribute boolean clusterErrorBoolean = 50;
- attribute nullable boolean nullableBoolean = 16384;
- attribute nullable Bitmap8MaskMap nullableBitmap8 = 16385;
- attribute nullable Bitmap16MaskMap nullableBitmap16 = 16386;
- attribute nullable Bitmap32MaskMap nullableBitmap32 = 16387;
- attribute nullable Bitmap64MaskMap nullableBitmap64 = 16388;
- attribute nullable int8u nullableInt8u = 16389;
- attribute nullable int16u nullableInt16u = 16390;
- attribute nullable int24u nullableInt24u = 16391;
- attribute nullable int32u nullableInt32u = 16392;
- attribute nullable int40u nullableInt40u = 16393;
- attribute nullable int48u nullableInt48u = 16394;
- attribute nullable int56u nullableInt56u = 16395;
- attribute nullable int64u nullableInt64u = 16396;
- attribute nullable int8s nullableInt8s = 16397;
- attribute nullable int16s nullableInt16s = 16398;
- attribute nullable int24s nullableInt24s = 16399;
- attribute nullable int32s nullableInt32s = 16400;
- attribute nullable int40s nullableInt40s = 16401;
- attribute nullable int48s nullableInt48s = 16402;
- attribute nullable int56s nullableInt56s = 16403;
- attribute nullable int64s nullableInt64s = 16404;
- attribute nullable enum8 nullableEnum8 = 16405;
- attribute nullable enum16 nullableEnum16 = 16406;
- attribute nullable single nullableFloatSingle = 16407;
- attribute nullable double nullableFloatDouble = 16408;
- attribute nullable octet_string<10> nullableOctetString = 16409;
- attribute nullable char_string<10> nullableCharString = 16414;
- attribute nullable SimpleEnum nullableEnumAttr = 16420;
- attribute nullable SimpleStruct nullableStruct = 16421;
- attribute nullable int8u nullableRangeRestrictedInt8u = 16422;
- attribute nullable int8s nullableRangeRestrictedInt8s = 16423;
- attribute nullable int16u nullableRangeRestrictedInt16u = 16424;
- attribute nullable int16s nullableRangeRestrictedInt16s = 16425;
- 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 TestEmitTestEventRequestRequest {
- INT8U arg1 = 0;
- SimpleEnum arg2 = 1;
- BOOLEAN arg3 = 2;
- }
-
- command Test(): DefaultSuccess = 0;
- command TestNotHandled(): DefaultSuccess = 1;
- command TestSpecific(): TestSpecificResponse = 2;
- command TestEmitTestEventRequest(TestEmitTestEventRequestRequest): TestEmitTestEventResponse = 20;
-}
-
endpoint 0 {
device type rootdevice = 22, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2245,92 +2028,6 @@
ram attribute featureMap default = 3;
ram attribute clusterRevision default = 1;
}
-
- server cluster UnitTesting {
- emits event TestEvent;
- ram attribute boolean default = false;
- ram attribute bitmap8 default = 0;
- ram attribute bitmap16 default = 0;
- ram attribute bitmap32 default = 0;
- ram attribute bitmap64 default = 0;
- ram attribute int8u default = 0;
- ram attribute int16u default = 0;
- ram attribute int24u default = 0;
- ram attribute int32u default = 0;
- ram attribute int40u default = 0;
- ram attribute int48u default = 0;
- ram attribute int56u default = 0;
- ram attribute int64u default = 0;
- ram attribute int8s default = 0;
- ram attribute int16s default = 0;
- ram attribute int24s default = 0;
- ram attribute int32s default = 0;
- ram attribute int40s default = 0;
- ram attribute int48s default = 0;
- ram attribute int56s default = 0;
- ram attribute int64s default = 0;
- ram attribute enum8 default = 0;
- ram attribute enum16 default = 0;
- ram attribute floatSingle default = 0;
- ram attribute floatDouble default = 0;
- ram attribute octetString;
- callback attribute listInt8u;
- callback attribute listOctetString;
- callback attribute listStructOctetString;
- ram attribute longOctetString;
- ram attribute charString;
- ram attribute longCharString;
- ram attribute epochUs;
- ram attribute epochS;
- ram attribute vendorId default = 0;
- callback attribute listNullablesAndOptionalsStruct;
- ram attribute enumAttr;
- callback attribute structAttr;
- ram attribute rangeRestrictedInt8u default = 70;
- ram attribute rangeRestrictedInt8s default = -5;
- ram attribute rangeRestrictedInt16u default = 200;
- ram attribute rangeRestrictedInt16s default = -5;
- callback attribute listLongOctetString;
- callback attribute listFabricScoped;
- ram attribute timedWriteBoolean;
- callback attribute generalErrorBoolean;
- callback attribute clusterErrorBoolean;
- ram attribute nullableBoolean default = false;
- ram attribute nullableBitmap8 default = 0;
- ram attribute nullableBitmap16 default = 0;
- ram attribute nullableBitmap32 default = 0;
- ram attribute nullableBitmap64 default = 0;
- ram attribute nullableInt8u default = 0;
- ram attribute nullableInt16u default = 0;
- ram attribute nullableInt24u default = 0;
- ram attribute nullableInt32u default = 0;
- ram attribute nullableInt40u default = 0;
- ram attribute nullableInt48u default = 0;
- ram attribute nullableInt56u default = 0;
- ram attribute nullableInt64u default = 0;
- ram attribute nullableInt8s default = 0;
- ram attribute nullableInt16s default = 0;
- ram attribute nullableInt24s default = 0;
- ram attribute nullableInt32s default = 0;
- ram attribute nullableInt40s default = 0;
- ram attribute nullableInt48s default = 0;
- ram attribute nullableInt56s default = 0;
- ram attribute nullableInt64s default = 0;
- ram attribute nullableEnum8 default = 0;
- ram attribute nullableEnum16 default = 0;
- ram attribute nullableFloatSingle default = 0;
- ram attribute nullableFloatDouble default = 0;
- ram attribute nullableOctetString;
- ram attribute nullableCharString;
- ram attribute nullableEnumAttr;
- callback attribute nullableStruct;
- ram attribute nullableRangeRestrictedInt8u default = 70;
- ram attribute nullableRangeRestrictedInt8s default = -5;
- ram attribute nullableRangeRestrictedInt16u default = 200;
- ram attribute nullableRangeRestrictedInt16s default = -5;
- ram attribute featureMap default = 0;
- 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 938cb27..8a4bba6 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
@@ -7109,1509 +7109,6 @@
"included": 1
}
]
- },
- {
- "name": "Unit Testing",
- "code": 4294048773,
- "mfgCode": null,
- "define": "UNIT_TESTING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "Test",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "TestNotHandled",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "TestSpecific",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "TestEmitTestEventRequest",
- "code": 20,
- "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": "Unit Testing",
- "code": 4294048773,
- "mfgCode": null,
- "define": "UNIT_TESTING_CLUSTER",
- "side": "server",
- "enabled": 1,
- "attributes": [
- {
- "name": "boolean",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "false",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "bitmap8",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap8MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "bitmap16",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap16MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "bitmap32",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap32MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "bitmap64",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap64MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int8u",
- "code": 5,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int16u",
- "code": 6,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int24u",
- "code": 7,
- "mfgCode": null,
- "side": "server",
- "type": "int24u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int32u",
- "code": 8,
- "mfgCode": null,
- "side": "server",
- "type": "int32u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int40u",
- "code": 9,
- "mfgCode": null,
- "side": "server",
- "type": "int40u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int48u",
- "code": 10,
- "mfgCode": null,
- "side": "server",
- "type": "int48u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int56u",
- "code": 11,
- "mfgCode": null,
- "side": "server",
- "type": "int56u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int64u",
- "code": 12,
- "mfgCode": null,
- "side": "server",
- "type": "int64u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int8s",
- "code": 13,
- "mfgCode": null,
- "side": "server",
- "type": "int8s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int16s",
- "code": 14,
- "mfgCode": null,
- "side": "server",
- "type": "int16s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int24s",
- "code": 15,
- "mfgCode": null,
- "side": "server",
- "type": "int24s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int32s",
- "code": 16,
- "mfgCode": null,
- "side": "server",
- "type": "int32s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int40s",
- "code": 17,
- "mfgCode": null,
- "side": "server",
- "type": "int40s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int48s",
- "code": 18,
- "mfgCode": null,
- "side": "server",
- "type": "int48s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int56s",
- "code": 19,
- "mfgCode": null,
- "side": "server",
- "type": "int56s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "int64s",
- "code": 20,
- "mfgCode": null,
- "side": "server",
- "type": "int64s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "enum8",
- "code": 21,
- "mfgCode": null,
- "side": "server",
- "type": "enum8",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "enum16",
- "code": 22,
- "mfgCode": null,
- "side": "server",
- "type": "enum16",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "float_single",
- "code": 23,
- "mfgCode": null,
- "side": "server",
- "type": "single",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "float_double",
- "code": 24,
- "mfgCode": null,
- "side": "server",
- "type": "double",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "octet_string",
- "code": 25,
- "mfgCode": null,
- "side": "server",
- "type": "octet_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_int8u",
- "code": 26,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_octet_string",
- "code": 27,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_struct_octet_string",
- "code": 28,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "long_octet_string",
- "code": 29,
- "mfgCode": null,
- "side": "server",
- "type": "long_octet_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "char_string",
- "code": 30,
- "mfgCode": null,
- "side": "server",
- "type": "char_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "long_char_string",
- "code": 31,
- "mfgCode": null,
- "side": "server",
- "type": "long_char_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "epoch_us",
- "code": 32,
- "mfgCode": null,
- "side": "server",
- "type": "epoch_us",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "epoch_s",
- "code": 33,
- "mfgCode": null,
- "side": "server",
- "type": "epoch_s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "vendor_id",
- "code": 34,
- "mfgCode": null,
- "side": "server",
- "type": "vendor_id",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_nullables_and_optionals_struct",
- "code": 35,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "enum_attr",
- "code": 36,
- "mfgCode": null,
- "side": "server",
- "type": "SimpleEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "struct_attr",
- "code": 37,
- "mfgCode": null,
- "side": "server",
- "type": "SimpleStruct",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "range_restricted_int8u",
- "code": 38,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "70",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "range_restricted_int8s",
- "code": 39,
- "mfgCode": null,
- "side": "server",
- "type": "int8s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "-5",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "range_restricted_int16u",
- "code": 40,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "200",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "range_restricted_int16s",
- "code": 41,
- "mfgCode": null,
- "side": "server",
- "type": "int16s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "-5",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_long_octet_string",
- "code": 42,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "list_fabric_scoped",
- "code": 43,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "timed_write_boolean",
- "code": 48,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "general_error_boolean",
- "code": 49,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "cluster_error_boolean",
- "code": 50,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "unsupported",
- "code": 255,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_boolean",
- "code": 16384,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "false",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_bitmap8",
- "code": 16385,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap8MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_bitmap16",
- "code": 16386,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap16MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_bitmap32",
- "code": 16387,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap32MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_bitmap64",
- "code": 16388,
- "mfgCode": null,
- "side": "server",
- "type": "Bitmap64MaskMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int8u",
- "code": 16389,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int16u",
- "code": 16390,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int24u",
- "code": 16391,
- "mfgCode": null,
- "side": "server",
- "type": "int24u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int32u",
- "code": 16392,
- "mfgCode": null,
- "side": "server",
- "type": "int32u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int40u",
- "code": 16393,
- "mfgCode": null,
- "side": "server",
- "type": "int40u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int48u",
- "code": 16394,
- "mfgCode": null,
- "side": "server",
- "type": "int48u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int56u",
- "code": 16395,
- "mfgCode": null,
- "side": "server",
- "type": "int56u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int64u",
- "code": 16396,
- "mfgCode": null,
- "side": "server",
- "type": "int64u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int8s",
- "code": 16397,
- "mfgCode": null,
- "side": "server",
- "type": "int8s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int16s",
- "code": 16398,
- "mfgCode": null,
- "side": "server",
- "type": "int16s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int24s",
- "code": 16399,
- "mfgCode": null,
- "side": "server",
- "type": "int24s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int32s",
- "code": 16400,
- "mfgCode": null,
- "side": "server",
- "type": "int32s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int40s",
- "code": 16401,
- "mfgCode": null,
- "side": "server",
- "type": "int40s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int48s",
- "code": 16402,
- "mfgCode": null,
- "side": "server",
- "type": "int48s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int56s",
- "code": 16403,
- "mfgCode": null,
- "side": "server",
- "type": "int56s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_int64s",
- "code": 16404,
- "mfgCode": null,
- "side": "server",
- "type": "int64s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_enum8",
- "code": 16405,
- "mfgCode": null,
- "side": "server",
- "type": "enum8",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_enum16",
- "code": 16406,
- "mfgCode": null,
- "side": "server",
- "type": "enum16",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_float_single",
- "code": 16407,
- "mfgCode": null,
- "side": "server",
- "type": "single",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_float_double",
- "code": 16408,
- "mfgCode": null,
- "side": "server",
- "type": "double",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_octet_string",
- "code": 16409,
- "mfgCode": null,
- "side": "server",
- "type": "octet_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_char_string",
- "code": 16414,
- "mfgCode": null,
- "side": "server",
- "type": "char_string",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_enum_attr",
- "code": 16420,
- "mfgCode": null,
- "side": "server",
- "type": "SimpleEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_struct",
- "code": 16421,
- "mfgCode": null,
- "side": "server",
- "type": "SimpleStruct",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_range_restricted_int8u",
- "code": 16422,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "70",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_range_restricted_int8s",
- "code": 16423,
- "mfgCode": null,
- "side": "server",
- "type": "int8s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "-5",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_range_restricted_int16u",
- "code": 16424,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "200",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "nullable_range_restricted_int16s",
- "code": 16425,
- "mfgCode": null,
- "side": "server",
- "type": "int16s",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "-5",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "write_only_int8u",
- "code": 16426,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "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": "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
- }
- ],
- "events": [
- {
- "name": "TestEvent",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "included": 1
- }
- ]
}
]
}
diff --git a/scripts/tests/chiptest/__init__.py b/scripts/tests/chiptest/__init__.py
index e88d246..87c308c 100644
--- a/scripts/tests/chiptest/__init__.py
+++ b/scripts/tests/chiptest/__init__.py
@@ -143,6 +143,11 @@
"Test_TC_PSCFG_1_1.yaml", # Power source configuration cluster is deprecated and removed from all-clusters
"Test_TC_PSCFG_2_1.yaml", # Power source configuration cluster is deprecated and removed from all-clusters
"Test_TC_PSCFG_2_2.yaml", # Power source configuration cluster is deprecated and removed from all-clusters
+ "Test_TC_SMCO_2_2.yaml", # chip-repl does not support timeout (07/20/2023)
+ "Test_TC_SMCO_2_3.yaml", # chip-repl does not support timeout (07/20/2023)
+ "Test_TC_SMCO_2_4.yaml", # chip-repl does not support timeout (07/20/2023)
+ "Test_TC_SMCO_2_5.yaml", # chip-repl does not support timeout (07/20/2023)
+ "Test_TC_SMCO_2_6.yaml", # chip-repl does not support timeout (07/20/2023)
}
diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml
index 7bc663f..25ebac3 100644
--- a/src/app/tests/suites/certification/PICS.yaml
+++ b/src/app/tests/suites/certification/PICS.yaml
@@ -5903,6 +5903,119 @@
- label: "Read all supported mandatory attribute"
id: S.C.AM-READ
+ # Smoke CO Alarm Cluster Test Plan
+ - label: "Does the device implement the SMOKECO cluster as a server?"
+ id: SMOKECO.S
+
+ - label: "Does the device implement the SMOKECO cluster as a client?"
+ id: SMOKECO.C
+
+ #
+ # server / features
+ #
+ - label: "Does the device support this specific cluster feature?"
+ id: SMOKECO.S.F00
+
+ - label: "Does the device support this specific cluster feature?"
+ id: SMOKECO.S.F01
+
+ #
+ # server / attributes
+ #
+ - label: "Does the device implement the ExpressedState attribute?"
+ id: SMOKECO.S.A0000
+
+ - label: "Does the device implement the SmokeState attribute?"
+ id: SMOKECO.S.A0001
+
+ - label: "Does the device implement the COState attribute?"
+ id: SMOKECO.S.A0002
+
+ - label: "Does the device implement the BatteryAlert attribute?"
+ id: SMOKECO.S.A0003
+
+ - label: "Does the device implement the DeviceMuted attribute?"
+ id: SMOKECO.S.A0004
+
+ - label: "Does the device implement the TestInProgress attribute?"
+ id: SMOKECO.S.A0005
+
+ - label: "Does the device implement the HardwareFaultAlert attribute?"
+ id: SMOKECO.S.A0006
+
+ - label: "Does the device implement the EndOfServiceAlert attribute?"
+ id: SMOKECO.S.A0007
+
+ - label: "Does the device implement the InterconnectSmokeAlarm attribute?"
+ id: SMOKECO.S.A0008
+
+ - label: "Does the device implement the InterconnectCOAlarm attribute?"
+ id: SMOKECO.S.A0009
+
+ - label: "Does the device implement the ContaminationState attribute?"
+ id: SMOKECO.S.A000a
+
+ - label: "Does the device implement the SensitivityLevel attribute?"
+ id: SMOKECO.S.A000b
+
+ - label: "Does the device implement the ExpiryDate attribute?"
+ id: SMOKECO.S.A000c
+
+ #
+ # server / Events
+ #
+ - label: "Does the device implement the SmokeAlarm event?"
+ id: SMOKECO.S.E00
+
+ - label: "Does the device implement the COAlarm event?"
+ id: SMOKECO.S.E01
+
+ - label: "Does the device implement the LowBattery event?"
+ id: SMOKECO.S.E02
+
+ - label: "Does the device implement the HardwareFault event?"
+ id: SMOKECO.S.E03
+
+ - label: "Does the device implement the EndOfService event?"
+ id: SMOKECO.S.E04
+
+ - label: "Does the device implement the SelfTestComplete event?"
+ id: SMOKECO.S.E05
+
+ - label: "Does the device implement the AlarmMuted event?"
+ id: SMOKECO.S.E06
+
+ - label: "Does the device implement the MuteEnded event?"
+ id: SMOKECO.S.E07
+
+ - label: "Does the device implement the InterconnectSmokeAlarm event?"
+ id: SMOKECO.S.E08
+
+ - label: "Does the device implement the InterconnectCOAlarm event?"
+ id: SMOKECO.S.E09
+
+ - label: "Does the device implement the AllClear event?"
+ id: SMOKECO.S.E0a
+
+ #
+ # server / manually
+ #
+ - label:
+ "Can the TestInProgress attribute be changed by physical control at
+ the device?"
+ id: SMOKECO.M.ManuallyControlledTest
+
+ - label:
+ "Can the DeviceMuted attribute be changed by physical control at the
+ device?"
+ id: SMOKECO.M.ManuallyControlledMute
+
+ #
+ # server / commandsReceived
+ #
+ - label: "Does the device implement receiving the SelfTestRequest command?"
+ id: SMOKECO.S.C00.Rsp
+
# Software Diagnostics Cluster Test Plan
- label:
"Does the device implement the Software Diagnostics cluster as a
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_1_1.yaml
new file mode 100644
index 0000000..07730f5
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_1_1.yaml
@@ -0,0 +1,255 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: 4.1.1. [TC-SMCO-1.1] Global Attributes with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH reads the ClusterRevision attribute from the DUT"
+ command: "readAttribute"
+ attribute: "ClusterRevision"
+ response:
+ value: 1
+ constraints:
+ type: int16u
+
+ - label: "TH reads from the DUT the FeatureMap attribute"
+ PICS: "!SMOKECO.S.F00 && !SMOKECO.S.F01"
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 0
+ constraints:
+ type: bitmap32
+
+ - label: "TH reads from the DUT the FeatureMap attribute(Smoke Alarm)"
+ PICS: SMOKECO.S.F00 && !SMOKECO.S.F01
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 1
+ constraints:
+ type: bitmap32
+
+ - label: "TH reads from the DUT the FeatureMap attribute(CO Alarm)"
+ PICS: SMOKECO.S.F01 && !SMOKECO.S.F00
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 2
+ constraints:
+ type: bitmap32
+
+ - label:
+ "TH reads from the DUT the FeatureMap attribute(Smoke Alarm & CO
+ Alarm)"
+ PICS: SMOKECO.S.F00 && SMOKECO.S.F01
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 3
+ constraints:
+ type: bitmap32
+
+ - label: "TH reads from the DUT the AttributeList attribute"
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [0, 3, 5, 6, 7]
+
+ - label: "TH reads from the DUT the AttributeList attribute(SmokeState)"
+ PICS: SMOKECO.S.A0001
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [1]
+
+ - label: "TH reads from the DUT the AttributeList attribute(COState)"
+ PICS: SMOKECO.S.A0002
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [2]
+
+ - label: "TH reads from the DUT the AttributeList attribute(DeviceMuted)"
+ PICS: SMOKECO.S.A0004
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [4]
+
+ - label:
+ "TH reads from the DUT the AttributeList
+ attribute(InterconnectSmokeAlarm)"
+ PICS: SMOKECO.S.A0008
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [8]
+
+ - label:
+ "TH reads from the DUT the AttributeList
+ attribute(InterconnectCOAlarm)"
+ PICS: SMOKECO.S.A0009
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [9]
+
+ - label:
+ "TH reads from the DUT the AttributeList attribute(ContaminationState)"
+ PICS: SMOKECO.S.A000a
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [10]
+
+ - label:
+ "TH reads from the DUT the AttributeList
+ attribute(SmokeSensitivityLevel)"
+ PICS: SMOKECO.S.A000b
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [11]
+
+ - label: "TH reads from the DUT the AttributeList attribute(ExpiryDate)"
+ PICS: SMOKECO.S.A000c
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [12]
+
+ - label: "TH reads from the DUT the EventList attribute"
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [2, 3, 4, 5, 10]
+
+ - label: "TH reads from the DUT the EventList attribute(SmokeAlarm)"
+ PICS: SMOKECO.S.E00
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [0]
+
+ - label: "TH reads from the DUT the EventList attribute(COAlarm)"
+ PICS: SMOKECO.S.E01
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [1]
+
+ - label: "TH reads from the DUT the EventList attribute(AlarmMuted)"
+ PICS: SMOKECO.S.E06
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [6]
+
+ - label: "TH reads from the DUT the EventList attribute(MuteEnded)"
+ PICS: SMOKECO.S.E07
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [7]
+
+ - label:
+ "TH reads from the DUT the EventList attribute(InterconnectSmokeAlarm)"
+ PICS: SMOKECO.S.E08
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [8]
+
+ - label:
+ "TH reads from the DUT the EventList attribute(InterconnectCOAlarm)"
+ PICS: SMOKECO.S.E09
+ command: "readAttribute"
+ attribute: "EventList"
+ response:
+ constraints:
+ type: list
+ contains: [9]
+
+ - label: "TH reads from the DUT the AcceptedCommandList attribute"
+ PICS: "!SMOKECO.S.C00.Rsp"
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ value: []
+ constraints:
+ type: list
+
+ - label: "TH reads from the DUT the AcceptedCommandList attribute"
+ PICS: SMOKECO.S.C00.Rsp
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ constraints:
+ type: list
+ contains: [0]
+
+ - label: "TH reads from the DUT the GeneratedCommandList attribute"
+ command: "readAttribute"
+ attribute: "GeneratedCommandList"
+ response:
+ value: []
+ constraints:
+ type: list
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_1.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_1.yaml
new file mode 100644
index 0000000..5eeb708
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_1.yaml
@@ -0,0 +1,156 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: 4.2.1. [TC-SMCO-2.1] Attributes with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH reads from the DUT the ExpressedState attribute"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 8
+
+ - label: "TH reads from the DUT the SmokeState attribute"
+ PICS: SMOKECO.S.A0001
+ command: "readAttribute"
+ attribute: "SmokeState"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the COState attribute"
+ PICS: SMOKECO.S.A0002
+ command: "readAttribute"
+ attribute: "COState"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the BatteryAlert attribute"
+ PICS: SMOKECO.S.A0003
+ command: "readAttribute"
+ attribute: "BatteryAlert"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the DeviceMuted attribute"
+ PICS: SMOKECO.S.A0004
+ command: "readAttribute"
+ attribute: "DeviceMuted"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 1
+
+ - label: "TH reads from the DUT the TestInProgress attribute"
+ PICS: SMOKECO.S.A0005
+ command: "readAttribute"
+ attribute: "TestInProgress"
+ response:
+ constraints:
+ type: boolean
+
+ - label: "TH reads from the DUT the HardwareFaultAlert attribute"
+ PICS: SMOKECO.S.A0006
+ command: "readAttribute"
+ attribute: "HardwareFaultAlert"
+ response:
+ constraints:
+ type: boolean
+
+ - label: "TH reads from the DUT the EndOfServiceAlert attribute"
+ PICS: SMOKECO.S.A0007
+ command: "readAttribute"
+ attribute: "EndOfServiceAlert"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 1
+
+ - label: "TH reads from the DUT the InterconnectSmokeAlarm attribute"
+ PICS: SMOKECO.S.A0008
+ command: "readAttribute"
+ attribute: "InterconnectSmokeAlarm"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the InterconnectCOAlarm attribute"
+ PICS: SMOKECO.S.A0009
+ command: "readAttribute"
+ attribute: "InterconnectCOAlarm"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the ContaminationState attribute"
+ PICS: SMOKECO.S.A000a
+ command: "readAttribute"
+ attribute: "ContaminationState"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 3
+
+ - label: "TH reads from the DUT the SmokeSensitivityLevel attribute"
+ PICS: SMOKECO.S.A000b
+ command: "readAttribute"
+ attribute: "SmokeSensitivityLevel"
+ response:
+ constraints:
+ type: enum8
+ minValue: 0
+ maxValue: 2
+
+ - label: "TH reads from the DUT the ExpiryDate attribute"
+ PICS: SMOKECO.S.A000c
+ command: "readAttribute"
+ attribute: "ExpiryDate"
+ response:
+ constraints:
+ type: epoch_s
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_2.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_2.yaml
new file mode 100644
index 0000000..a36cb1a
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_2.yaml
@@ -0,0 +1,250 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name:
+ 4.2.2. [TC-SMCO-2.2] Primary Functionality - Smoke Alarm with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+ timeout: 990
+ TEST_EVENT_TRIGGER_KEY:
+ type: octet_string
+ defaultValue: "hex:00112233445566778899aabbccddeeff"
+ TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000090"
+ TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff0000009c"
+ TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a0"
+ EVENT_NUMBER:
+ type: int64u
+ defaultValue: 0
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH subscribes to SmokeState attribute from DUT"
+ PICS: SMOKECO.S.A0001
+ command: "subscribeAttribute"
+ attribute: "SmokeState"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH reads TestEventTriggersEnabled attribute from General Diagnostics
+ Cluster"
+ PICS: DGGEN.S.A0008
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "readAttribute"
+ attribute: "TestEventTriggersEnabled"
+ response:
+ value: 1
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning Smoke Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads SmokeAlarm event from DUT"
+ PICS: SMOKECO.S.E00
+ command: "readEvent"
+ event: "SmokeAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 1
+ response:
+ value: { AlarmSeverityLevel: 1 }
+
+ - label: "Start manually DUT self-test"
+ cluster: "LogCommands"
+ PICS: PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest
+ command: "UserPrompt"
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
+
+ - label: "TH reads TestInProgress attribute from DUT"
+ PICS: SMOKECO.S.A0005
+ command: "readAttribute"
+ attribute: "TestInProgress"
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH sends SelfTestRequest command to DUT"
+ PICS: SMOKECO.S.C00.Rsp
+ command: "SelfTestRequest"
+ response:
+ error: BUSY
+
+ - label: "TH reads TestInProgress attribute from DUT"
+ PICS: SMOKECO.S.A0005
+ command: "readAttribute"
+ attribute: "TestInProgress"
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Critical Smoke Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads SmokeAlarm event from DUT"
+ PICS: SMOKECO.S.E00
+ command: "readEvent"
+ event: "SmokeAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 2
+ response:
+ value: { AlarmSeverityLevel: 2 }
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Alarm Test Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 3
+ response:
+ value: {}
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_3.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_3.yaml
new file mode 100644
index 0000000..96d3f41
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_3.yaml
@@ -0,0 +1,249 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: 4.2.3. [TC-SMCO-2.3] Primary Functionality - CO Alarm with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+ timeout: 990
+ TEST_EVENT_TRIGGER_KEY:
+ type: octet_string
+ defaultValue: "hex:00112233445566778899aabbccddeeff"
+ TEST_EVENT_TRIGGER_WARNING_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000091"
+ TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff0000009d"
+ TEST_EVENT_TRIGGER_CO_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a1"
+ EVENT_NUMBER:
+ type: int64u
+ defaultValue: 0
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH subscribes to COState attribute from DUT"
+ PICS: SMOKECO.S.A0002
+ command: "subscribeAttribute"
+ attribute: "COState"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ Value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH reads TestEventTriggersEnabled attribute from General Diagnostics
+ Cluster"
+ PICS: DGGEN.S.A0008
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "readAttribute"
+ attribute: "TestEventTriggersEnabled"
+ response:
+ value: 1
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning CO Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_CO_ALARM
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label: "TH reads COAlarm event from DUT"
+ PICS: SMOKECO.S.E01
+ command: "readEvent"
+ event: "COAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 1
+ response:
+ value: { AlarmSeverityLevel: 1 }
+
+ - label: "Start manually DUT self-test"
+ cluster: "LogCommands"
+ PICS: PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest
+ command: "UserPrompt"
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
+
+ - label: "TH reads TestInProgress attribute from DUT"
+ PICS: SMOKECO.S.A0005
+ command: "readAttribute"
+ attribute: "TestInProgress"
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH sends SelfTestRequest command to DUT"
+ PICS: SMOKECO.S.C00.Rsp
+ command: "SelfTestRequest"
+ response:
+ error: BUSY
+
+ - label: "TH reads TestInProgress attribute from DUT"
+ PICS: SMOKECO.S.A0005
+ command: "readAttribute"
+ attribute: "TestInProgress"
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Critical CO Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label: "TH reads COAlarm event from DUT"
+ PICS: SMOKECO.S.E01
+ command: "readEvent"
+ event: "COAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 2
+ response:
+ value: { AlarmSeverityLevel: 2 }
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO Alarm Test Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CO_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 3
+ response:
+ value: {}
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_4.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_4.yaml
new file mode 100644
index 0000000..3538261
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_4.yaml
@@ -0,0 +1,582 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name:
+ 4.2.4. [TC-SMCO-2.4] Secondary Functionality - Mandatory with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+ timeout: 2910
+ TEST_EVENT_TRIGGER_KEY:
+ type: octet_string
+ defaultValue: "hex:00112233445566778899aabbccddeeff"
+ TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT:
+ type: int64u
+ defaultValue: "0xffffffff00000095"
+ TEST_EVENT_TRIGGER_CRITICAL_BATTERY_ALERT:
+ type: int64u
+ defaultValue: "0xffffffff0000009e"
+ TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a5"
+ TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT:
+ type: int64u
+ defaultValue: "0xffffffff00000093"
+ TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a3"
+ TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT:
+ type: int64u
+ defaultValue: "0xffffffff0000009a"
+ TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000aa"
+ EVENT_NUMBER:
+ type: int64u
+ defaultValue: 0
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH subscribes to BatteryAlert attribute from DUT"
+ PICS: SMOKECO.S.A0003
+ command: "subscribeAttribute"
+ attribute: "BatteryAlert"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH reads TestEventTriggersEnabled attribute from General Diagnostics
+ Cluster"
+ PICS: DGGEN.S.A0008
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "readAttribute"
+ attribute: "TestEventTriggersEnabled"
+ response:
+ value: 1
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning Battery Alert Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT
+
+ - label:
+ "TH waits for a report of BatteryAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0003
+ command: "waitForReport"
+ attribute: "BatteryAlert"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 3
+ constraints:
+ type: enum8
+
+ - label: "TH reads LowBattery event from DUT"
+ PICS: SMOKECO.S.E02
+ command: "readEvent"
+ event: "LowBattery"
+ EVENT_NUMBER: EVENT_NUMBER + 1
+ response:
+ value: { AlarmSeverityLevel: 1 }
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Critical Battery Alert Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CRITICAL_BATTERY_ALERT
+
+ - label:
+ "TH waits for a report of BatteryAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0003
+ command: "waitForReport"
+ attribute: "BatteryAlert"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 3
+ constraints:
+ type: enum8
+
+ - label: "TH reads LowBattery event from DUT"
+ PICS: SMOKECO.S.E02
+ command: "readEvent"
+ event: "LowBattery"
+ EVENT_NUMBER: EVENT_NUMBER + 2
+ response:
+ value: { AlarmSeverityLevel: 2 }
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Battery Alert Test Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR
+
+ - label:
+ "TH waits for a report of BatteryAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0003
+ command: "waitForReport"
+ attribute: "BatteryAlert"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 3
+ response:
+ value: {}
+
+ - label: "TH subscribes to HardwareFaultAlert attribute from DUT"
+ PICS: SMOKECO.S.A0006
+ command: "subscribeAttribute"
+ attribute: "HardwareFaultAlert"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Hardware Fault Alert Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT
+
+ - label:
+ "TH waits for a report of HardwareFaultAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0006
+ command: "waitForReport"
+ attribute: "HardwareFaultAlert"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: boolean
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 5
+ constraints:
+ type: enum8
+
+ - label: "TH reads HardwareFault event from DUT"
+ PICS: SMOKECO.S.E03
+ command: "readEvent"
+ event: "HardwareFault"
+ EVENT_NUMBER: EVENT_NUMBER + 4
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Hardware Fault Alert Test Event
+ Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT_CLEAR
+
+ - label:
+ "TH waits for a report of HardwareFaultAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0006
+ command: "waitForReport"
+ attribute: "HardwareFaultAlert"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 5
+ response:
+ value: {}
+
+ - label: "TH subscribes to EndOfServiceAlert attribute from DUT"
+ PICS: SMOKECO.S.A0007
+ command: "subscribeAttribute"
+ attribute: "EndOfServiceAlert"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for End of Service Alert Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT
+
+ - label:
+ "TH waits for a report of EndOfServiceAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0007
+ command: "waitForReport"
+ attribute: "EndOfServiceAlert"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 6
+ constraints:
+ type: enum8
+
+ - label: "TH reads EndOfService event from DUT"
+ PICS: SMOKECO.S.E04
+ command: "readEvent"
+ event: "EndOfService"
+ EVENT_NUMBER: EVENT_NUMBER + 6
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for End of Service Alert Test Event
+ Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT_CLEAR
+
+ - label:
+ "TH waits for a report of EndOfServiceAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0007
+ command: "waitForReport"
+ attribute: "EndOfServiceAlert"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 7
+ response:
+ value: {}
+
+ - label: "TH subscribes to TestInProgress attribute from DUT"
+ PICS: SMOKECO.S.A0005
+ command: "subscribeAttribute"
+ attribute: "TestInProgress"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "Start manually DUT self-test"
+ cluster: "LogCommands"
+ PICS: PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest
+ command: "UserPrompt"
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
+
+ - label:
+ "TH waits for a report of TestInProgress attribute from DUT with a
+ timeout of 180 seconds"
+ PICS: SMOKECO.S.A0005
+ command: "waitForReport"
+ attribute: "TestInProgress"
+ timeout: 180
+ response:
+ value: 1
+ constraints:
+ type: boolean
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 4
+ constraints:
+ type: enum8
+
+ - label:
+ "TH waits for a report of TestInProgress attribute from DUT with a
+ timeout of 180 seconds"
+ PICS: SMOKECO.S.A0005
+ command: "waitForReport"
+ attribute: "TestInProgress"
+ timeout: 180
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH reads SelfTestComplete event from DUT"
+ PICS: SMOKECO.S.E05
+ command: "readEvent"
+ event: "SelfTestComplete"
+ EVENT_NUMBER: EVENT_NUMBER + 8
+ response:
+ value: {}
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 9
+ response:
+ value: {}
+
+ - label: "TH sends SelfTestRequest command to DUT"
+ PICS: SMOKECO.S.C00.Rsp
+ command: "SelfTestRequest"
+
+ - label:
+ "TH waits for a report of TestInProgress attribute from DUT with a
+ timeout of 180 seconds"
+ PICS: SMOKECO.S.A0005
+ command: "waitForReport"
+ attribute: "TestInProgress"
+ timeout: 180
+ response:
+ value: 1
+ constraints:
+ type: boolean
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 4
+ constraints:
+ type: enum8
+
+ - label:
+ "TH waits for a report of TestInProgress attribute from DUT with a
+ timeout of 180 seconds"
+ PICS: SMOKECO.S.A0005
+ command: "waitForReport"
+ attribute: "TestInProgress"
+ timeout: 180
+ response:
+ value: 0
+ constraints:
+ type: boolean
+
+ - label: "TH reads SelfTestComplete event from DUT"
+ PICS: SMOKECO.S.E05
+ command: "readEvent"
+ event: "SelfTestComplete"
+ EVENT_NUMBER: EVENT_NUMBER + 10
+ response:
+ value: {}
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 11
+ response:
+ value: {}
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_5.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_5.yaml
new file mode 100644
index 0000000..edb7e6d
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_5.yaml
@@ -0,0 +1,1021 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: 4.2.5. [TC-SMCO-2.5] Secondary Functionality - Optional with DUT as Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+ timeout: 6090
+ TEST_EVENT_TRIGGER_KEY:
+ type: octet_string
+ defaultValue: "hex:00112233445566778899aabbccddeeff"
+ TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000090"
+ TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff0000009c"
+ TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a0"
+ TEST_EVENT_TRIGGER_WARNING_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000091"
+ TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff0000009d"
+ TEST_EVENT_TRIGGER_CO_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a1"
+ TEST_EVENT_TRIGGER_DEVICE_MUTED:
+ type: int64u
+ defaultValue: "0xffffffff0000009b"
+ TEST_EVENT_TRIGGER_DEVICE_MUTED_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000ab"
+ TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000092"
+ TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a2"
+ TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000094"
+ TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a4"
+ TEST_EVENT_TRIGGER_CONTAMINATION_STATE_HIGH:
+ type: int64u
+ defaultValue: "0xffffffff00000096"
+ TEST_EVENT_TRIGGER_CONTAMINATION_STATE_LOW:
+ type: int64u
+ defaultValue: "0xffffffff00000097"
+ TTEST_EVENT_TRIGGER_CONTAMINATION_STATE_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a6"
+ TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_HIGH:
+ type: int64u
+ defaultValue: "0xffffffff00000098"
+ TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_LOW:
+ type: int64u
+ defaultValue: "0xffffffff00000099"
+ TTEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a8"
+ EVENT_NUMBER:
+ type: int64u
+ defaultValue: 0
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH subscribes to InterconnectSmokeAlarm attribute from DUT"
+ PICS: SMOKECO.S.A0008
+ command: "subscribeAttribute"
+ attribute: "InterconnectSmokeAlarm"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0008 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH reads TestEventTriggersEnabled attribute from General Diagnostics
+ Cluster"
+ PICS: SMOKECO.S.A0008 && DGGEN.S.A0008
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "readAttribute"
+ attribute: "TestEventTriggersEnabled"
+ response:
+ value: 1
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect Smoke Alarm Test
+ Event"
+ PICS: SMOKECO.S.A0008 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of InterconnectSmokeAlarm attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0008
+ command: "waitForReport"
+ attribute: "InterconnectSmokeAlarm"
+ timeout: 300
+ response:
+ saveAs: interconnectSmokeAlarmSeverityLevel
+ constraints:
+ type: enum8
+ minValue: 1
+ maxValue: 2
+
+ - label: "TH reads InterconnectSmokeAlarm event from DUT"
+ PICS: SMOKECO.S.A0008 && SMOKECO.S.E08
+ command: "readEvent"
+ event: "InterconnectSmokeAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 1
+ response:
+ value: { AlarmSeverityLevel: interconnectSmokeAlarmSeverityLevel }
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0008 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 7
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect Smoke Alarm Test
+ Event Clear"
+ PICS: SMOKECO.S.A0008 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of InterconnectSmokeAlarm attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0008
+ command: "waitForReport"
+ attribute: "InterconnectSmokeAlarm"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0008 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.A0008 && SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 2
+ response:
+ value: {}
+
+ - label: "TH subscribes to InterconnectCOAlarm attribute from DUT"
+ PICS: SMOKECO.S.A0009
+ command: "subscribeAttribute"
+ attribute: "InterconnectCOAlarm"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0009 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect CO Alarm Test Event"
+ PICS: SMOKECO.S.A0009 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM
+
+ - label:
+ "TH waits for a report of InterconnectCOAlarm attribute from DUT with
+ a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0009
+ command: "waitForReport"
+ attribute: "InterconnectCOAlarm"
+ timeout: 300
+ response:
+ saveAs: interconnectCOAlarmSeverityLevel
+ constraints:
+ type: enum8
+ minValue: 1
+ maxValue: 2
+
+ - label: "TH reads InterconnectCOAlarm event from DUT"
+ PICS: SMOKECO.S.A0009 && SMOKECO.S.E09
+ command: "readEvent"
+ event: "InterconnectCOAlarm"
+ EVENT_NUMBER: EVENT_NUMBER + 3
+ response:
+ value: { AlarmSeverityLevel: interconnectCOAlarmSeverityLevel }
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0009 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 8
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect CO Alarm Test Event
+ Clear"
+ PICS: SMOKECO.S.A0009 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of InterconnectCOAlarm attribute from DUT with
+ a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0009
+ command: "waitForReport"
+ attribute: "InterconnectCOAlarm"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0009 && SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads AllClear event from DUT"
+ PICS: SMOKECO.S.E0a
+ command: "readEvent"
+ event: "AllClear"
+ EVENT_NUMBER: EVENT_NUMBER + 4
+ response:
+ value: {}
+
+ - label: "TH subscribes to ContaminationState attribute from DUT"
+ PICS: SMOKECO.S.A000a
+ command: "subscribeAttribute"
+ attribute: "ContaminationState"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Contamination State (High) Test
+ Event"
+ PICS: SMOKECO.S.A000a && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CONTAMINATION_STATE_HIGH
+
+ - label:
+ "TH waits for a report of ContaminationState attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A000a
+ command: "waitForReport"
+ attribute: "ContaminationState"
+ timeout: 300
+ response:
+ constraints:
+ type: enum8
+ minValue: 2
+ maxValue: 3
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Contamination State Test Event
+ Clear"
+ PICS: SMOKECO.S.A000a && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TTEST_EVENT_TRIGGER_CONTAMINATION_STATE_CLEAR
+
+ - label:
+ "TH waits for a report of ContaminationState attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A000a
+ command: "waitForReport"
+ attribute: "ContaminationState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Contamination State (Low) Test
+ Event"
+ PICS: SMOKECO.S.A000a && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CONTAMINATION_STATE_LOW
+
+ - label:
+ "TH waits for a report of ContaminationState attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A000a
+ command: "waitForReport"
+ attribute: "ContaminationState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Contamination State Test Event
+ Clear"
+ PICS: SMOKECO.S.A000a && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TTEST_EVENT_TRIGGER_CONTAMINATION_STATE_CLEAR
+
+ - label:
+ "TH waits for a report of ContaminationState attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A000a
+ command: "waitForReport"
+ attribute: "ContaminationState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to SmokeSensitivityLevel attribute from DUT"
+ PICS: SMOKECO.S.A000b
+ command: "subscribeAttribute"
+ attribute: "SmokeSensitivityLevel"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Sensitivity Level (High)
+ Test Event"
+ PICS: SMOKECO.S.A000b && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_HIGH
+
+ - label:
+ "TH waits for a report of SmokeSensitivityLevel attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A000b
+ command: "waitForReport"
+ attribute: "SmokeSensitivityLevel"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Sensitivity Level Test
+ Event Clear"
+ PICS: SMOKECO.S.A000b && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TTEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_CLEAR
+
+ - label:
+ "TH waits for a report of SmokeSensitivityLevel attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A000b
+ command: "waitForReport"
+ attribute: "SmokeSensitivityLevel"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Sensitivity Level (Low)
+ Test Event"
+ PICS: SMOKECO.S.A000b && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_LOW
+
+ - label:
+ "TH waits for a report of SmokeSensitivityLevel attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A000b
+ command: "waitForReport"
+ attribute: "SmokeSensitivityLevel"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Sensitivity Level Test
+ Event Clear"
+ PICS: SMOKECO.S.A000b && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TTEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_CLEAR
+
+ - label:
+ "TH waits for a report of SmokeSensitivityLevel attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A000b
+ command: "waitForReport"
+ attribute: "SmokeSensitivityLevel"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to DeviceMuted attribute from DUT"
+ PICS: SMOKECO.S.A0004
+ command: "subscribeAttribute"
+ attribute: "DeviceMuted"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads FeatureMap attribute(Smoke Alarm) from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ constraints:
+ type: bitmap32
+ hasMasksSet: [0x1]
+
+ - label: "TH subscribes to SmokeState attribute from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001
+ command: "subscribeAttribute"
+ attribute: "SmokeState"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning Smoke Alarm Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED
+
+ - label:
+ "TH waits for a report of DeviceMuted attribute from DUT with a
+ timeout of 120 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00
+ command: "waitForReport"
+ attribute: "DeviceMuted"
+ timeout: 120
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads AlarmMuted event from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E06
+ command: "readEvent"
+ event: "AlarmMuted"
+ EVENT_NUMBER: EVENT_NUMBER + 5
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event
+ Clear"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED_CLEAR
+
+ - label:
+ "TH waits for a report of DeviceMuted attribute from DUT with a
+ timeout of 120 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00
+ command: "waitForReport"
+ attribute: "DeviceMuted"
+ timeout: 120
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads MuteEnded event from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E07
+ command: "readEvent"
+ event: "MuteEnded"
+ EVENT_NUMBER: EVENT_NUMBER + 6
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Critical Smoke Alarm Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED
+
+ - label: "TH waits 60 Seconds"
+ PICS: "!PICS_SDK_CI_ONLY"
+ cluster: "DelayCommands"
+ command: "WaitForMs"
+ arguments:
+ values:
+ - name: "ms"
+ value: 60000
+
+ - label: "TH reads DeviceMuted attribute from DUT"
+ PICS: SMOKECO.S.A0004
+ command: "readAttribute"
+ attribute: "DeviceMuted"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Alarm Test Event Clear"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.A0001 && SMOKECO.S.F00
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads FeatureMap attribute(CO Alarm) from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ constraints:
+ type: bitmap32
+ hasMasksSet: [0x2]
+
+ - label: "TH subscribes to COState attribute from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002
+ command: "subscribeAttribute"
+ attribute: "COState"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning CO Alarm Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_CO_ALARM
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED
+
+ - label:
+ "TH waits for a report of DeviceMuted attribute from DUT with a
+ timeout of 120 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01
+ command: "waitForReport"
+ attribute: "DeviceMuted"
+ timeout: 120
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads AlarmMuted event from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E06
+ command: "readEvent"
+ event: "AlarmMuted"
+ EVENT_NUMBER: EVENT_NUMBER + 7
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event
+ Clear"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED_CLEAR
+
+ - label:
+ "TH waits for a report of DeviceMuted attribute from DUT with a
+ timeout of 120 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01
+ command: "waitForReport"
+ attribute: "DeviceMuted"
+ timeout: 120
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads MuteEnded event from DUT"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E07
+ command: "readEvent"
+ event: "MuteEnded"
+ EVENT_NUMBER: EVENT_NUMBER + 8
+ response:
+ value: {}
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Critical CO Alarm Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 2
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Manual Device Mute Test Event"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_DEVICE_MUTED
+
+ - label: "TH waits 60 Seconds"
+ PICS: "!PICS_SDK_CI_ONLY"
+ cluster: "DelayCommands"
+ command: "WaitForMs"
+ arguments:
+ values:
+ - name: "ms"
+ value: 60000
+
+ - label: "TH reads DeviceMuted attribute from DUT"
+ PICS: SMOKECO.S.A0004
+ command: "readAttribute"
+ attribute: "DeviceMuted"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO Alarm Test Event Clear"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CO_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
diff --git a/src/app/tests/suites/certification/Test_TC_SMCO_2_6.yaml b/src/app/tests/suites/certification/Test_TC_SMCO_2_6.yaml
new file mode 100644
index 0000000..5d68637
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_SMCO_2_6.yaml
@@ -0,0 +1,489 @@
+# Copyright (c) 2023 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name:
+ 4.2.6. [TC-SMCO-2.6] ExpressedState Attribute - Multiple Alarms with DUT as
+ Server
+
+PICS:
+ - SMOKECO.S
+
+config:
+ nodeId: 0x12344321
+ cluster: "Smoke CO Alarm"
+ endpoint: 1
+ timeout: 3090
+ TEST_EVENT_TRIGGER_KEY:
+ type: octet_string
+ defaultValue: "hex:00112233445566778899aabbccddeeff"
+ TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000090"
+ TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a0"
+ TEST_EVENT_TRIGGER_WARNING_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000091"
+ TEST_EVENT_TRIGGER_CO_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a1"
+ TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT:
+ type: int64u
+ defaultValue: "0xffffffff00000095"
+ TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a5"
+ TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000092"
+ TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a2"
+ TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM:
+ type: int64u
+ defaultValue: "0xffffffff00000094"
+ TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR:
+ type: int64u
+ defaultValue: "0xffffffff000000a4"
+ HIEST_PRI_ALARM:
+ type: int8u
+ defaultValue: 1
+
+tests:
+ - label: "Commission DUT to TH"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to BatteryAlert attribute from DUT"
+ PICS: SMOKECO.S.A0003
+ command: "subscribeAttribute"
+ attribute: "BatteryAlert"
+ minInterval: 3
+ maxInterval: 30
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to InterconnectSmokeAlarm attribute from DUT"
+ PICS: SMOKECO.S.A0008
+ command: "subscribeAttribute"
+ attribute: "InterconnectSmokeAlarm"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to InterconnectCOAlarm attribute from DUT"
+ PICS: SMOKECO.S.A0009
+ command: "subscribeAttribute"
+ attribute: "InterconnectCOAlarm"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to COState attribute from DUT"
+ PICS: SMOKECO.S.A0002
+ command: "subscribeAttribute"
+ attribute: "COState"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH subscribes to SmokeState attribute from DUT"
+ PICS: SMOKECO.S.A0001
+ command: "subscribeAttribute"
+ attribute: "SmokeState"
+ minInterval: 3
+ maxInterval: 30
+ keepSubscriptions: true
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label:
+ "TH reads TestEventTriggersEnabled attribute from General Diagnostics
+ Cluster"
+ PICS: DGGEN.S.A0008
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "readAttribute"
+ attribute: "TestEventTriggersEnabled"
+ response:
+ value: 1
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning Battery Alert Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT
+
+ - label:
+ "TH waits for a report of BatteryAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0003
+ command: "waitForReport"
+ attribute: "BatteryAlert"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect Smoke Alarm Test
+ Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of InterconnectSmokeAlarm attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0008
+ command: "waitForReport"
+ attribute: "InterconnectSmokeAlarm"
+ timeout: 300
+ response:
+ constraints:
+ type: enum8
+ minValue: 1
+ maxValue: 2
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect CO Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM
+
+ - label:
+ "TH waits for a report of InterconnectCOAlarm attribute from DUT with
+ a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0009
+ command: "waitForReport"
+ attribute: "InterconnectCOAlarm"
+ timeout: 300
+ response:
+ constraints:
+ type: enum8
+ minValue: 1
+ maxValue: 2
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning CO Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_CO_ALARM
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Warning Smoke Alarm Test Event"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 1
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: HIEST_PRI_ALARM
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke Alarm Test Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of SmokeState attribute from DUT with a timeout
+ of 300 seconds"
+ PICS: SMOKECO.S.A0001
+ command: "waitForReport"
+ attribute: "SmokeState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: HIEST_PRI_ALARM
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO Alarm Test Event clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_CO_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of COState attribute from DUT with a timeout of
+ 300 seconds"
+ PICS: SMOKECO.S.A0002
+ command: "waitForReport"
+ attribute: "COState"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: HIEST_PRI_ALARM
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect CO Alarm Test Event
+ Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of InterconnectCOAlarm attribute from DUT with
+ a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0009
+ command: "waitForReport"
+ attribute: "InterconnectCOAlarm"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: HIEST_PRI_ALARM
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Interconnect Smoke Alarm Test
+ Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR
+
+ - label:
+ "TH waits for a report of InterconnectSmokeAlarm attribute from DUT
+ with a timeout of 300 seconds"
+ PICS: SMOKECO.S.A0008
+ command: "waitForReport"
+ attribute: "InterconnectSmokeAlarm"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: HIEST_PRI_ALARM
+ constraints:
+ type: enum8
+
+ - label:
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on
+ Endpoint 0 with EnableKey field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to
+ PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Battery Alert Test Event Clear"
+ PICS: DGGEN.S.C00.Rsp
+ cluster: "General Diagnostics"
+ endpoint: 0
+ command: "TestEventTrigger"
+ arguments:
+ values:
+ - name: "EnableKey"
+ value: TEST_EVENT_TRIGGER_KEY
+ - name: "EventTrigger"
+ value: TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR
+
+ - label:
+ "TH waits for a report of BatteryAlert attribute from DUT with a
+ timeout of 300 seconds"
+ PICS: SMOKECO.S.A0003
+ command: "waitForReport"
+ attribute: "BatteryAlert"
+ timeout: 300
+ response:
+ value: 0
+ constraints:
+ type: enum8
+
+ - label: "TH reads ExpressedState attribute from DUT"
+ PICS: SMOKECO.S.A0000
+ command: "readAttribute"
+ attribute: "ExpressedState"
+ response:
+ value: 0
+ constraints:
+ type: enum8
diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values
index b528200..32aa633 100644
--- a/src/app/tests/suites/certification/ci-pics-values
+++ b/src/app/tests/suites/certification/ci-pics-values
@@ -654,6 +654,40 @@
S.C.AO-READ=0
S.C.AO-WRITE=0
+# Smoke CO Alarm Cluster
+SMOKECO.S=1
+SMOKECO.S.F00=1
+SMOKECO.S.F01=1
+SMOKECO.S.A0000=1
+SMOKECO.S.A0001=1
+SMOKECO.S.A0002=1
+SMOKECO.S.A0003=1
+SMOKECO.S.A0004=1
+SMOKECO.S.A0005=1
+SMOKECO.S.A0006=1
+SMOKECO.S.A0007=1
+SMOKECO.S.A0008=1
+SMOKECO.S.A0009=1
+SMOKECO.S.A000a=1
+SMOKECO.S.A000b=1
+SMOKECO.S.A000c=1
+SMOKECO.S.E00=1
+SMOKECO.S.E01=1
+SMOKECO.S.E02=1
+SMOKECO.S.E03=1
+SMOKECO.S.E04=1
+SMOKECO.S.E05=1
+SMOKECO.S.E06=1
+SMOKECO.S.E07=1
+SMOKECO.S.E08=1
+SMOKECO.S.E09=1
+SMOKECO.S.E0a=1
+SMOKECO.M.ManuallyControlledTest=1
+SMOKECO.M.ManuallyControlledMute=1
+SMOKECO.S.C00.Rsp=1
+
+SMOKECO.C=1
+
# Switch Cluster
SWTCH.S=1
SWTCH.S.F00=1
diff --git a/src/app/tests/suites/ciTests.json b/src/app/tests/suites/ciTests.json
index 8c7b97b..40f9c89 100644
--- a/src/app/tests/suites/ciTests.json
+++ b/src/app/tests/suites/ciTests.json
@@ -176,6 +176,15 @@
"PowerSourceConfiguration": ["Test_TC_PSCFG_1_1", "Test_TC_PSCFG_2_1"],
"RelativeHumidityMeasurement": ["Test_TC_RH_1_1", "Test_TC_RH_2_1"],
"SecureChannel": [],
+ "SmokeCOAlarm": [
+ "Test_TC_SMCO_1_1",
+ "Test_TC_SMCO_2_1",
+ "Test_TC_SMCO_2_2",
+ "Test_TC_SMCO_2_3",
+ "Test_TC_SMCO_2_4",
+ "Test_TC_SMCO_2_5",
+ "Test_TC_SMCO_2_6"
+ ],
"Switch": ["Test_TC_SWTCH_1_1", "Test_TC_SWTCH_2_1"],
"TemperatureMeasurement": ["Test_TC_TMP_1_1", "Test_TC_TMP_2_1"],
"Thermostat": ["Test_TC_TSTAT_1_1", "Test_TC_TSTAT_2_1"],
@@ -359,6 +368,7 @@
"PowerSourceConfiguration",
"RelativeHumidityMeasurement",
"SecureChannel",
+ "SmokeCOAlarm",
"Switch",
"TemperatureMeasurement",
"Thermostat",
diff --git a/src/app/tests/suites/manualTests.json b/src/app/tests/suites/manualTests.json
index bd53c9a..4ab6e63 100644
--- a/src/app/tests/suites/manualTests.json
+++ b/src/app/tests/suites/manualTests.json
@@ -250,6 +250,7 @@
"LevelControl": ["Test_TC_LVL_8_1"],
"OnOff": ["Test_TC_OO_2_3"],
"RelativeHumidityMeasurement": ["Test_TC_RH_2_2"],
+ "SmokeCOAlarm": [],
"Switch": ["Test_TC_SWTCH_2_2", "Test_TC_SWTCH_3_2"],
"TemperatureMeasurement": ["Test_TC_TMP_2_2"],
"Thermostat": ["Test_TC_TSTAT_3_1", "Test_TC_TSTAT_3_2"],
@@ -310,6 +311,7 @@
"LevelControl",
"OnOff",
"RelativeHumidityMeasurement",
+ "SmokeCOAlarm",
"Switch",
"TemperatureMeasurement",
"Thermostat",
diff --git a/zzz_generated/chip-tool/zap-generated/test/Commands.h b/zzz_generated/chip-tool/zap-generated/test/Commands.h
index 2f4f24d..ba960be 100644
--- a/zzz_generated/chip-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/test/Commands.h
@@ -208,6 +208,13 @@
printf("Test_TC_PSCFG_2_1\n");
printf("Test_TC_RH_1_1\n");
printf("Test_TC_RH_2_1\n");
+ printf("Test_TC_SMCO_1_1\n");
+ printf("Test_TC_SMCO_2_1\n");
+ printf("Test_TC_SMCO_2_2\n");
+ printf("Test_TC_SMCO_2_3\n");
+ printf("Test_TC_SMCO_2_4\n");
+ printf("Test_TC_SMCO_2_5\n");
+ printf("Test_TC_SMCO_2_6\n");
printf("Test_TC_SWTCH_1_1\n");
printf("Test_TC_SWTCH_2_1\n");
printf("Test_TC_TMP_1_1\n");
@@ -58889,6 +58896,4630 @@
}
};
+class Test_TC_SMCO_1_1Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_1_1", 25, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_SMCO_1_1Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> 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(CheckValue("featureMap", value, 1UL));
+ VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32"));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 2UL));
+ VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32"));
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 3UL));
+ VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32"));
+ }
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 0UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 3UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 6UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 7UL));
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 1UL));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 2UL));
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 4UL));
+ }
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 8UL));
+ }
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 9UL));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 10UL));
+ }
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 11UL));
+ }
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 12UL));
+ }
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 2UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 3UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 4UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 10UL));
+ }
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> 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));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 1UL));
+ }
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 6UL));
+ }
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 7UL));
+ }
+ break;
+ case 20:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 8UL));
+ }
+ break;
+ case 21:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::EventId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 9UL));
+ }
+ break;
+ case 22:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("acceptedCommandList", iter_0, 0));
+ }
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ }
+ break;
+ case 23:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 0UL));
+ }
+ break;
+ case 24:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("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, "Commission DUT to TH");
+ 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");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ClusterRevision::Id,
+ true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads from the DUT the FeatureMap attribute");
+ VerifyOrDo(!ShouldSkip("!SMOKECO.S.F00 && !SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads from the DUT the FeatureMap attribute(Smoke Alarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.F00 && !SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH reads from the DUT the FeatureMap attribute(CO Alarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.F01 && !SMOKECO.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "TH reads from the DUT the FeatureMap attribute(Smoke Alarm & CO Alarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.F00 && SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "TH reads from the DUT the AttributeList attribute");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads from the DUT the AttributeList attribute(SmokeState)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "TH reads from the DUT the AttributeList attribute(COState)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9, "TH reads from the DUT the AttributeList attribute(DeviceMuted)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH reads from the DUT the AttributeList attribute(InterconnectSmokeAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads from the DUT the AttributeList attribute(InterconnectCOAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "TH reads from the DUT the AttributeList attribute(ContaminationState)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13, "TH reads from the DUT the AttributeList attribute(SmokeSensitivityLevel)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 14: {
+ LogStep(14, "TH reads from the DUT the AttributeList attribute(ExpiryDate)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::AttributeList::Id,
+ true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH reads from the DUT the EventList attribute");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16, "TH reads from the DUT the EventList attribute(SmokeAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17, "TH reads from the DUT the EventList attribute(COAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 18: {
+ LogStep(18, "TH reads from the DUT the EventList attribute(AlarmMuted)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E06"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH reads from the DUT the EventList attribute(MuteEnded)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E07"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 20: {
+ LogStep(20, "TH reads from the DUT the EventList attribute(InterconnectSmokeAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E08"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 21: {
+ LogStep(21, "TH reads from the DUT the EventList attribute(InterconnectCOAlarm)");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E09"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EventList::Id, true,
+ chip::NullOptional);
+ }
+ case 22: {
+ LogStep(22, "TH reads from the DUT the AcceptedCommandList attribute");
+ VerifyOrDo(!ShouldSkip("!SMOKECO.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 23: {
+ LogStep(23, "TH reads from the DUT the AcceptedCommandList attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 24: {
+ LogStep(24, "TH reads from the DUT the GeneratedCommandList attribute");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::GeneratedCommandList::Id, true, chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_1Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_1", 14, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_SMCO_2_1Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> 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::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 0U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 8U));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum 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 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum 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));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum 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 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum 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 6:
+ 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 7:
+ 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 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::EndOfServiceEnum 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 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum 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 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum 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 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 0U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 3U));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum 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 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "epoch_s", "epoch_s"));
+ }
+ 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, "Commission DUT to TH");
+ 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 from the DUT the ExpressedState attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads from the DUT the SmokeState attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::SmokeState::Id, true,
+ chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads from the DUT the COState attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::COState::Id, true,
+ chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH reads from the DUT the BatteryAlert attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::BatteryAlert::Id, true,
+ chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "TH reads from the DUT the DeviceMuted attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::DeviceMuted::Id, true,
+ chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "TH reads from the DUT the TestInProgress attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::TestInProgress::Id,
+ true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads from the DUT the HardwareFaultAlert attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::HardwareFaultAlert::Id,
+ true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "TH reads from the DUT the EndOfServiceAlert attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::EndOfServiceAlert::Id,
+ true, chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9, "TH reads from the DUT the InterconnectSmokeAlarm attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectSmokeAlarm::Id, true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH reads from the DUT the InterconnectCOAlarm attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectCOAlarm::Id, true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads from the DUT the ContaminationState attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ContaminationState::Id,
+ true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "TH reads from the DUT the SmokeSensitivityLevel attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::SmokeSensitivityLevel::Id, true, chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13, "TH reads from the DUT the ExpiryDate attribute");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpiryDate::Id, true,
+ chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_2Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_2Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_2", 20, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ AddArgument("TEST_EVENT_TRIGGER_KEY", &mTestEventTriggerKey);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerCriticalSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerSmokeAlarmClear);
+ AddArgument("EVENT_NUMBER", 0, UINT64_MAX, &mEventNumber);
+ }
+
+ ~Test_TC_SMCO_2_2Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(990)); }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+ chip::Optional<chip::ByteSpan> mTestEventTriggerKey;
+ chip::Optional<uint64_t> mTestEventTriggerWarningSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCriticalSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerSmokeAlarmClear;
+ chip::Optional<uint64_t> mEventNumber;
+
+ 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::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testEventTriggersEnabled", value, 1));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 7:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::SmokeAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeAlarm.alarmSeverityLevel", value.alarmSeverityLevel, 1U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ 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));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_BUSY));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 15:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::SmokeAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeAlarm.alarmSeverityLevel", value.alarmSeverityLevel, 2U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 19:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ 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, "Commission DUT to TH");
+ 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 subscribes to SmokeState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::SmokeState::Id, 3,
+ 30, true, chip::NullOptional, chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Attributes::TestEventTriggersEnabled::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningSmokeAlarm.HasValue() ? mTestEventTriggerWarningSmokeAlarm.Value() : 0xffffffff00000090ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 5: {
+ LogStep(5, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 6: {
+ LogStep(6, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads SmokeAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::SmokeAlarm::Id, false,
+ chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "Start manually DUT self-test");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 9: {
+ LogStep(9, "TH reads TestInProgress attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::TestInProgress::Id,
+ true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH sends SelfTestRequest command to DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::SmokeCoAlarm::Commands::SelfTestRequest::Type value;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Commands::SelfTestRequest::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 11: {
+ LogStep(11, "TH reads TestInProgress attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::TestInProgress::Id,
+ true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Critical Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerCriticalSmokeAlarm.HasValue() ? mTestEventTriggerCriticalSmokeAlarm.Value()
+ : 0xffffffff0000009cULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 13: {
+ LogStep(13, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 14: {
+ LogStep(14, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH reads SmokeAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::SmokeAlarm::Id, false,
+ chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerSmokeAlarmClear.HasValue() ? mTestEventTriggerSmokeAlarmClear.Value() : 0xffffffff000000a0ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 17: {
+ LogStep(17, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 18: {
+ LogStep(18, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_3Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_3", 20, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ AddArgument("TEST_EVENT_TRIGGER_KEY", &mTestEventTriggerKey);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerCriticalCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CO_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerCoAlarmClear);
+ AddArgument("EVENT_NUMBER", 0, UINT64_MAX, &mEventNumber);
+ }
+
+ ~Test_TC_SMCO_2_3Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(990)); }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+ chip::Optional<chip::ByteSpan> mTestEventTriggerKey;
+ chip::Optional<uint64_t> mTestEventTriggerWarningCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCriticalCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCoAlarmClear;
+ chip::Optional<uint64_t> mEventNumber;
+
+ 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::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testEventTriggersEnabled", value, 1));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 7:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::COAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COAlarm.alarmSeverityLevel", value.alarmSeverityLevel, 1U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ 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));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_BUSY));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 15:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::COAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COAlarm.alarmSeverityLevel", value.alarmSeverityLevel, 2U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 19:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ 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, "Commission DUT to TH");
+ 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 subscribes to COState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::COState::Id, 3,
+ 30, true, chip::NullOptional, chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Attributes::TestEventTriggersEnabled::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningCoAlarm.HasValue() ? mTestEventTriggerWarningCoAlarm.Value() : 0xffffffff00000091ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 5: {
+ LogStep(5, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 6: {
+ LogStep(6, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads COAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::COAlarm::Id, false,
+ chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "Start manually DUT self-test");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 9: {
+ LogStep(9, "TH reads TestInProgress attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::TestInProgress::Id,
+ true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH sends SelfTestRequest command to DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::SmokeCoAlarm::Commands::SelfTestRequest::Type value;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Commands::SelfTestRequest::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 11: {
+ LogStep(11, "TH reads TestInProgress attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::TestInProgress::Id,
+ true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Critical CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerCriticalCoAlarm.HasValue() ? mTestEventTriggerCriticalCoAlarm.Value() : 0xffffffff0000009dULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 13: {
+ LogStep(13, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 14: {
+ LogStep(14, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH reads COAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::COAlarm::Id, false,
+ chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO "
+ "Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerCoAlarmClear.HasValue() ? mTestEventTriggerCoAlarmClear.Value() : 0xffffffff000000a1ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 17: {
+ LogStep(17, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 18: {
+ LogStep(18, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_4Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_4Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_4", 50, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ AddArgument("TEST_EVENT_TRIGGER_KEY", &mTestEventTriggerKey);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT", 0, UINT64_MAX, &mTestEventTriggerWarningBatteryAlert);
+ AddArgument("TEST_EVENT_TRIGGER_CRITICAL_BATTERY_ALERT", 0, UINT64_MAX, &mTestEventTriggerCriticalBatteryAlert);
+ AddArgument("TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR", 0, UINT64_MAX, &mTestEventTriggerBatteryAlertClear);
+ AddArgument("TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT", 0, UINT64_MAX, &mTestEventTriggerHardwareFaultAlert);
+ AddArgument("TEST_EVENT_TRIGGER_HARDWARE_FAULT_ALERT_CLEAR", 0, UINT64_MAX, &mTestEventTriggerHardwareFaultAlertClear);
+ AddArgument("TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT", 0, UINT64_MAX, &mTestEventTriggerEndOfServiceAlert);
+ AddArgument("TEST_EVENT_TRIGGER_END_OF_SERVICE_ALERT_CLEAR", 0, UINT64_MAX, &mTestEventTriggerEndOfServiceAlertClear);
+ AddArgument("EVENT_NUMBER", 0, UINT64_MAX, &mEventNumber);
+ }
+
+ ~Test_TC_SMCO_2_4Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(2910)); }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+ chip::Optional<chip::ByteSpan> mTestEventTriggerKey;
+ chip::Optional<uint64_t> mTestEventTriggerWarningBatteryAlert;
+ chip::Optional<uint64_t> mTestEventTriggerCriticalBatteryAlert;
+ chip::Optional<uint64_t> mTestEventTriggerBatteryAlertClear;
+ chip::Optional<uint64_t> mTestEventTriggerHardwareFaultAlert;
+ chip::Optional<uint64_t> mTestEventTriggerHardwareFaultAlertClear;
+ chip::Optional<uint64_t> mTestEventTriggerEndOfServiceAlert;
+ chip::Optional<uint64_t> mTestEventTriggerEndOfServiceAlertClear;
+ chip::Optional<uint64_t> mEventNumber;
+
+ 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::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testEventTriggersEnabled", value, 1));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 3U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 7:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::LowBattery::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("lowBattery.alarmSeverityLevel", value.alarmSeverityLevel, 1U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 3U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 11:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::LowBattery::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("lowBattery.alarmSeverityLevel", value.alarmSeverityLevel, 2U));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 15:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("hardwareFaultAlert", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("hardwareFaultAlert", value, 1));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 5U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 20:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::HardwareFault::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 21:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 22:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("hardwareFaultAlert", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 23:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 24:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 25:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::EndOfServiceEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("endOfServiceAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 26:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 27:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::EndOfServiceEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("endOfServiceAlert", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 28:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 6U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 29:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::EndOfService::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 30:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 31:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::EndOfServiceEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("endOfServiceAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 32:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 33:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 34:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 35:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ 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));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 1));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 38:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 4U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 39:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 40:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::SelfTestComplete::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 41:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 42:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 43:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 44:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 1));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 45:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 4U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 46:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testInProgress", value, 0));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ shouldContinue = true;
+ break;
+ case 47:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::SelfTestComplete::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 48:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 49:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ 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, "Commission DUT to TH");
+ 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 subscribes to BatteryAlert attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::BatteryAlert::Id,
+ 3, 30, true, chip::NullOptional, chip::NullOptional,
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Attributes::TestEventTriggersEnabled::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning Battery Alert Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerWarningBatteryAlert.HasValue() ? mTestEventTriggerWarningBatteryAlert.Value()
+ : 0xffffffff00000095ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 5: {
+ LogStep(5, "TH waits for a report of BatteryAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 6: {
+ LogStep(6, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads LowBattery event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::LowBattery::Id, false,
+ chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Critical Battery Alert Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerCriticalBatteryAlert.HasValue() ? mTestEventTriggerCriticalBatteryAlert.Value()
+ : 0xffffffff0000009eULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 9: {
+ LogStep(9, "TH waits for a report of BatteryAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 10: {
+ LogStep(10, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads LowBattery event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::LowBattery::Id, false,
+ chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Battery Alert Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerBatteryAlertClear.HasValue() ? mTestEventTriggerBatteryAlertClear.Value() : 0xffffffff000000a5ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 13: {
+ LogStep(13, "TH waits for a report of BatteryAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 14: {
+ LogStep(14, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16, "TH subscribes to HardwareFaultAlert attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::HardwareFaultAlert::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Hardware Fault Alert Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerHardwareFaultAlert.HasValue() ? mTestEventTriggerHardwareFaultAlert.Value()
+ : 0xffffffff00000093ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 18: {
+ LogStep(18, "TH waits for a report of HardwareFaultAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 19: {
+ LogStep(19, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 20: {
+ LogStep(20, "TH reads HardwareFault event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E03"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::HardwareFault::Id, false,
+ chip::NullOptional);
+ }
+ case 21: {
+ LogStep(21,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Hardware Fault Alert Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerHardwareFaultAlertClear.HasValue()
+ ? mTestEventTriggerHardwareFaultAlertClear.Value()
+ : 0xffffffff000000a3ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 22: {
+ LogStep(22, "TH waits for a report of HardwareFaultAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0006"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 23: {
+ LogStep(23, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 24: {
+ LogStep(24, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 25: {
+ LogStep(25, "TH subscribes to EndOfServiceAlert attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::EndOfServiceAlert::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 26: {
+ LogStep(26,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for End "
+ "of Service Alert Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerEndOfServiceAlert.HasValue() ? mTestEventTriggerEndOfServiceAlert.Value() : 0xffffffff0000009aULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 27: {
+ LogStep(27, "TH waits for a report of EndOfServiceAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 28: {
+ LogStep(28, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 29: {
+ LogStep(29, "TH reads EndOfService event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E04"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::EndOfService::Id, false,
+ chip::NullOptional);
+ }
+ case 30: {
+ LogStep(30,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for End "
+ "of Service Alert Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerEndOfServiceAlertClear.HasValue()
+ ? mTestEventTriggerEndOfServiceAlertClear.Value()
+ : 0xffffffff000000aaULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 31: {
+ LogStep(31, "TH waits for a report of EndOfServiceAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 32: {
+ LogStep(32, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 33: {
+ LogStep(33, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 34: {
+ LogStep(34, "TH subscribes to TestInProgress attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::TestInProgress::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 35: {
+ LogStep(35, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 36: {
+ LogStep(36, "Start manually DUT self-test");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && SMOKECO.M.ManuallyControlledTest"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 37: {
+ LogStep(37, "TH waits for a report of TestInProgress attribute from DUT with a timeout of 180 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 38: {
+ LogStep(38, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 39: {
+ LogStep(39, "TH waits for a report of TestInProgress attribute from DUT with a timeout of 180 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 40: {
+ LogStep(40, "TH reads SelfTestComplete event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E05"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::SelfTestComplete::Id, false,
+ chip::NullOptional);
+ }
+ case 41: {
+ LogStep(41, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 42: {
+ LogStep(42, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 43: {
+ LogStep(43, "TH sends SelfTestRequest command to DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::SmokeCoAlarm::Commands::SelfTestRequest::Type value;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Commands::SelfTestRequest::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 44: {
+ LogStep(44, "TH waits for a report of TestInProgress attribute from DUT with a timeout of 180 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 45: {
+ LogStep(45, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 46: {
+ LogStep(46, "TH waits for a report of TestInProgress attribute from DUT with a timeout of 180 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 47: {
+ LogStep(47, "TH reads SelfTestComplete event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E05"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::SelfTestComplete::Id, false,
+ chip::NullOptional);
+ }
+ case 48: {
+ LogStep(48, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 49: {
+ LogStep(49, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_5Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_5Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_5", 75, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ AddArgument("TEST_EVENT_TRIGGER_KEY", &mTestEventTriggerKey);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CRITICAL_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerCriticalSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerSmokeAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CRITICAL_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerCriticalCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CO_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerCoAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_DEVICE_MUTED", 0, UINT64_MAX, &mTestEventTriggerDeviceMuted);
+ AddArgument("TEST_EVENT_TRIGGER_DEVICE_MUTED_CLEAR", 0, UINT64_MAX, &mTestEventTriggerDeviceMutedClear);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerInterconnectSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR", 0, UINT64_MAX,
+ &mTestEventTriggerInterconnectSmokeAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerInterconnectCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerInterconnectCoAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_CONTAMINATION_STATE_HIGH", 0, UINT64_MAX, &mTestEventTriggerContaminationStateHigh);
+ AddArgument("TEST_EVENT_TRIGGER_CONTAMINATION_STATE_LOW", 0, UINT64_MAX, &mTestEventTriggerContaminationStateLow);
+ AddArgument("TTEST_EVENT_TRIGGER_CONTAMINATION_STATE_CLEAR", 0, UINT64_MAX, &mTtestEventTriggerContaminationStateClear);
+ AddArgument("TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_HIGH", 0, UINT64_MAX, &mTestEventTriggerSensitivityLevelHigh);
+ AddArgument("TEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_LOW", 0, UINT64_MAX, &mTestEventTriggerSensitivityLevelLow);
+ AddArgument("TTEST_EVENT_TRIGGER_SENSITIVITY_LEVEL_CLEAR", 0, UINT64_MAX, &mTtestEventTriggerSensitivityLevelClear);
+ AddArgument("EVENT_NUMBER", 0, UINT64_MAX, &mEventNumber);
+ }
+
+ ~Test_TC_SMCO_2_5Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(6090)); }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+ chip::Optional<chip::ByteSpan> mTestEventTriggerKey;
+ chip::Optional<uint64_t> mTestEventTriggerWarningSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCriticalSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerSmokeAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerWarningCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCriticalCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCoAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerDeviceMuted;
+ chip::Optional<uint64_t> mTestEventTriggerDeviceMutedClear;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectSmokeAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectCoAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerContaminationStateHigh;
+ chip::Optional<uint64_t> mTestEventTriggerContaminationStateLow;
+ chip::Optional<uint64_t> mTtestEventTriggerContaminationStateClear;
+ chip::Optional<uint64_t> mTestEventTriggerSensitivityLevelHigh;
+ chip::Optional<uint64_t> mTestEventTriggerSensitivityLevelLow;
+ chip::Optional<uint64_t> mTtestEventTriggerSensitivityLevelClear;
+ chip::Optional<uint64_t> mEventNumber;
+
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum interconnectSmokeAlarmSeverityLevel;
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum interconnectCOAlarmSeverityLevel;
+
+ 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::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectSmokeAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testEventTriggersEnabled", value, 1));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 1U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U));
+ interconnectSmokeAlarmSeverityLevel = value;
+ }
+ shouldContinue = true;
+ break;
+ case 6:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::InterconnectSmokeAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectSmokeAlarm.alarmSeverityLevel", value.alarmSeverityLevel,
+ interconnectSmokeAlarmSeverityLevel));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 7U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectSmokeAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 11:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectCOAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 1U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U));
+ interconnectCOAlarmSeverityLevel = value;
+ }
+ shouldContinue = true;
+ break;
+ case 16:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::InterconnectCOAlarm::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectCOAlarm.alarmSeverityLevel", value.alarmSeverityLevel,
+ interconnectCOAlarmSeverityLevel));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 8U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectCOAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 20:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 21:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AllClear::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 22:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("contaminationState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 23:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 24:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 2U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 3U));
+ }
+ shouldContinue = true;
+ break;
+ case 25:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 26:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("contaminationState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ 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));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("contaminationState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 29:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 30:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ContaminationStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("contaminationState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 31:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeSensitivityLevel", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 32:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 33:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeSensitivityLevel", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 34:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 35:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeSensitivityLevel", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 36:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 37:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeSensitivityLevel", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 38:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 39:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::SensitivityEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeSensitivityLevel", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 40:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 41:
+ 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 42:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 43:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 44:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 45:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 46:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 47:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AlarmMuted::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 48:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 49:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 50:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::MuteEnded::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 51:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 52:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 53:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 54:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 55:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 56:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 57:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 58:
+ 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 59:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 60:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 61:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 62:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 63:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 64:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::AlarmMuted::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 65:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 66:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 67:
+ switch (mTestSubStepIndex)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::Events::MuteEnded::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ }
+ mTestSubStepIndex++;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ break;
+ }
+ break;
+ case 68:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 69:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 2U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 70:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 71:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 72:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::MuteStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("deviceMuted", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 73:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 74:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ 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, "Commission DUT to TH");
+ 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 subscribes to InterconnectSmokeAlarm attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectSmokeAlarm::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && DGGEN.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Attributes::TestEventTriggersEnabled::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectSmokeAlarm.HasValue()
+ ? mTestEventTriggerInterconnectSmokeAlarm.Value()
+ : 0xffffffff00000092ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 5: {
+ LogStep(5, "TH waits for a report of InterconnectSmokeAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 6: {
+ LogStep(6, "TH reads InterconnectSmokeAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && SMOKECO.S.E08"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::InterconnectSmokeAlarm::Id,
+ false, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect Smoke Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectSmokeAlarmClear.HasValue()
+ ? mTestEventTriggerInterconnectSmokeAlarmClear.Value()
+ : 0xffffffff000000a2ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 9: {
+ LogStep(9, "TH waits for a report of InterconnectSmokeAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 10: {
+ LogStep(10, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008 && SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "TH subscribes to InterconnectCOAlarm attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectCOAlarm::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 14: {
+ LogStep(14,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectCoAlarm.HasValue() ? mTestEventTriggerInterconnectCoAlarm.Value()
+ : 0xffffffff00000094ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 15: {
+ LogStep(15, "TH waits for a report of InterconnectCOAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 16: {
+ LogStep(16, "TH reads InterconnectCOAlarm event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && SMOKECO.S.E09"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::InterconnectCOAlarm::Id, false,
+ chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 18: {
+ LogStep(18,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect CO Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectCoAlarmClear.HasValue()
+ ? mTestEventTriggerInterconnectCoAlarmClear.Value()
+ : 0xffffffff000000a4ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 19: {
+ LogStep(19, "TH waits for a report of InterconnectCOAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 20: {
+ LogStep(20, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009 && SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 21: {
+ LogStep(21, "TH reads AllClear event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.E0a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AllClear::Id, false,
+ chip::NullOptional);
+ }
+ case 22: {
+ LogStep(22, "TH subscribes to ContaminationState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::ContaminationState::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 23: {
+ LogStep(23,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Contamination State (High) Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerContaminationStateHigh.HasValue()
+ ? mTestEventTriggerContaminationStateHigh.Value()
+ : 0xffffffff00000096ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 24: {
+ LogStep(24, "TH waits for a report of ContaminationState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 25: {
+ LogStep(25,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Contamination State Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTtestEventTriggerContaminationStateClear.HasValue()
+ ? mTtestEventTriggerContaminationStateClear.Value()
+ : 0xffffffff000000a6ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 26: {
+ LogStep(26, "TH waits for a report of ContaminationState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 27: {
+ LogStep(27,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Contamination State (Low) Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerContaminationStateLow.HasValue() ? mTestEventTriggerContaminationStateLow.Value()
+ : 0xffffffff00000097ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 28: {
+ LogStep(28, "TH waits for a report of ContaminationState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 29: {
+ LogStep(29,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Contamination State Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTtestEventTriggerContaminationStateClear.HasValue()
+ ? mTtestEventTriggerContaminationStateClear.Value()
+ : 0xffffffff000000a6ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 30: {
+ LogStep(30, "TH waits for a report of ContaminationState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 31: {
+ LogStep(31, "TH subscribes to SmokeSensitivityLevel attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::SmokeSensitivityLevel::Id, 3, 30, true, chip::NullOptional,
+ chip::NullOptional, /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 32: {
+ LogStep(32,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Sensitivity Level (High) Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerSensitivityLevelHigh.HasValue() ? mTestEventTriggerSensitivityLevelHigh.Value()
+ : 0xffffffff00000098ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 33: {
+ LogStep(33, "TH waits for a report of SmokeSensitivityLevel attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 34: {
+ LogStep(34,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Sensitivity Level Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTtestEventTriggerSensitivityLevelClear.HasValue()
+ ? mTtestEventTriggerSensitivityLevelClear.Value()
+ : 0xffffffff000000a8ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 35: {
+ LogStep(35, "TH waits for a report of SmokeSensitivityLevel attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 36: {
+ LogStep(36,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Sensitivity Level (Low) Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerSensitivityLevelLow.HasValue() ? mTestEventTriggerSensitivityLevelLow.Value()
+ : 0xffffffff00000099ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 37: {
+ LogStep(37, "TH waits for a report of SmokeSensitivityLevel attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 38: {
+ LogStep(38,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Sensitivity Level Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b && DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTtestEventTriggerSensitivityLevelClear.HasValue()
+ ? mTtestEventTriggerSensitivityLevelClear.Value()
+ : 0xffffffff000000a8ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 39: {
+ LogStep(39, "TH waits for a report of SmokeSensitivityLevel attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 40: {
+ LogStep(40, "TH subscribes to DeviceMuted attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::DeviceMuted::Id,
+ 3, 30, true, chip::NullOptional, chip::NullOptional,
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 41: {
+ LogStep(41, "TH reads FeatureMap attribute(Smoke Alarm) from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 42: {
+ LogStep(42, "TH subscribes to SmokeState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::SmokeState::Id, 3,
+ 30, true, chip::NullOptional, chip::Optional<bool>(true),
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 43: {
+ LogStep(43,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningSmokeAlarm.HasValue() ? mTestEventTriggerWarningSmokeAlarm.Value() : 0xffffffff00000090ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 44: {
+ LogStep(44, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 45: {
+ LogStep(45,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMuted.HasValue() ? mTestEventTriggerDeviceMuted.Value() : 0xffffffff0000009bULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 46: {
+ LogStep(46, "TH waits for a report of DeviceMuted attribute from DUT with a timeout of 120 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 47: {
+ LogStep(47, "TH reads AlarmMuted event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E06"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AlarmMuted::Id, false,
+ chip::NullOptional);
+ }
+ case 48: {
+ LogStep(48,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMutedClear.HasValue() ? mTestEventTriggerDeviceMutedClear.Value() : 0xffffffff000000abULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 49: {
+ LogStep(49, "TH waits for a report of DeviceMuted attribute from DUT with a timeout of 120 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 50: {
+ LogStep(50, "TH reads MuteEnded event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E07"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::MuteEnded::Id, false,
+ chip::NullOptional);
+ }
+ case 51: {
+ LogStep(51,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Critical Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerCriticalSmokeAlarm.HasValue() ? mTestEventTriggerCriticalSmokeAlarm.Value()
+ : 0xffffffff0000009cULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 52: {
+ LogStep(52, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.A0001"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 53: {
+ LogStep(53,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMuted.HasValue() ? mTestEventTriggerDeviceMuted.Value() : 0xffffffff0000009bULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 54: {
+ LogStep(54, "TH waits 60 Seconds");
+ VerifyOrDo(!ShouldSkip("!PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
+ value.ms = 60000UL;
+ return WaitForMs(kIdentityAlpha, value);
+ }
+ case 55: {
+ LogStep(55, "TH reads DeviceMuted attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::DeviceMuted::Id, true,
+ chip::NullOptional);
+ }
+ case 56: {
+ LogStep(56,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F00 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerSmokeAlarmClear.HasValue() ? mTestEventTriggerSmokeAlarmClear.Value() : 0xffffffff000000a0ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 57: {
+ LogStep(57, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.A0001 && SMOKECO.S.F00"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 58: {
+ LogStep(58, "TH reads FeatureMap attribute(CO Alarm) from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::FeatureMap::Id, true,
+ chip::NullOptional);
+ }
+ case 59: {
+ LogStep(59, "TH subscribes to COState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::COState::Id, 3,
+ 30, true, chip::NullOptional, chip::Optional<bool>(true),
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 60: {
+ LogStep(60,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningCoAlarm.HasValue() ? mTestEventTriggerWarningCoAlarm.Value() : 0xffffffff00000091ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 61: {
+ LogStep(61, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 62: {
+ LogStep(62,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMuted.HasValue() ? mTestEventTriggerDeviceMuted.Value() : 0xffffffff0000009bULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 63: {
+ LogStep(63, "TH waits for a report of DeviceMuted attribute from DUT with a timeout of 120 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 64: {
+ LogStep(64, "TH reads AlarmMuted event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E06"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::AlarmMuted::Id, false,
+ chip::NullOptional);
+ }
+ case 65: {
+ LogStep(65,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMutedClear.HasValue() ? mTestEventTriggerDeviceMutedClear.Value() : 0xffffffff000000abULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 66: {
+ LogStep(66, "TH waits for a report of DeviceMuted attribute from DUT with a timeout of 120 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 67: {
+ LogStep(67, "TH reads MuteEnded event from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E07"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ mTestSubStepCount = 1;
+ return ReadEvent(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Events::MuteEnded::Id, false,
+ chip::NullOptional);
+ }
+ case 68: {
+ LogStep(68,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Critical CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerCriticalCoAlarm.HasValue() ? mTestEventTriggerCriticalCoAlarm.Value() : 0xffffffff0000009dULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 69: {
+ LogStep(69, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 70: {
+ LogStep(70,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Manual Device Mute Test Event");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerDeviceMuted.HasValue() ? mTestEventTriggerDeviceMuted.Value() : 0xffffffff0000009bULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 71: {
+ LogStep(71, "TH waits 60 Seconds");
+ VerifyOrDo(!ShouldSkip("!PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
+ value.ms = 60000UL;
+ return WaitForMs(kIdentityAlpha, value);
+ }
+ case 72: {
+ LogStep(72, "TH reads DeviceMuted attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::DeviceMuted::Id, true,
+ chip::NullOptional);
+ }
+ case 73: {
+ LogStep(73,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO "
+ "Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && DGGEN.S.C00.Rsp"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerCoAlarmClear.HasValue() ? mTestEventTriggerCoAlarmClear.Value() : 0xffffffff000000a1ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 74: {
+ LogStep(74, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.A0002"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_SMCO_2_6Suite : public TestCommand
+{
+public:
+ Test_TC_SMCO_2_6Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SMCO_2_6", 34, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ AddArgument("TEST_EVENT_TRIGGER_KEY", &mTestEventTriggerKey);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_SMOKE_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerSmokeAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerWarningCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_CO_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerCoAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_WARNING_BATTERY_ALERT", 0, UINT64_MAX, &mTestEventTriggerWarningBatteryAlert);
+ AddArgument("TEST_EVENT_TRIGGER_BATTERY_ALERT_CLEAR", 0, UINT64_MAX, &mTestEventTriggerBatteryAlertClear);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM", 0, UINT64_MAX, &mTestEventTriggerInterconnectSmokeAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_SMOKE_ALARM_CLEAR", 0, UINT64_MAX,
+ &mTestEventTriggerInterconnectSmokeAlarmClear);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM", 0, UINT64_MAX, &mTestEventTriggerInterconnectCoAlarm);
+ AddArgument("TEST_EVENT_TRIGGER_INTERCONNECT_CO_ALARM_CLEAR", 0, UINT64_MAX, &mTestEventTriggerInterconnectCoAlarmClear);
+ AddArgument("HIEST_PRI_ALARM", 0, UINT8_MAX, &mHiestPriAlarm);
+ }
+
+ ~Test_TC_SMCO_2_6Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(mTimeout.ValueOr(3090)); }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+ chip::Optional<chip::ByteSpan> mTestEventTriggerKey;
+ chip::Optional<uint64_t> mTestEventTriggerWarningSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerSmokeAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerWarningCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerCoAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerWarningBatteryAlert;
+ chip::Optional<uint64_t> mTestEventTriggerBatteryAlertClear;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectSmokeAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectSmokeAlarmClear;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectCoAlarm;
+ chip::Optional<uint64_t> mTestEventTriggerInterconnectCoAlarmClear;
+ chip::Optional<uint8_t> mHiestPriAlarm;
+
+ 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::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectSmokeAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectCOAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("testEventTriggersEnabled", value, 1));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 1U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U));
+ }
+ shouldContinue = true;
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 1U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 2U));
+ }
+ shouldContinue = true;
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, mHiestPriAlarm.HasValue() ? mHiestPriAlarm.Value() : 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 20:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("smokeState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 21:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, mHiestPriAlarm.HasValue() ? mHiestPriAlarm.Value() : 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 22:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 23:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("COState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 24:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, mHiestPriAlarm.HasValue() ? mHiestPriAlarm.Value() : 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 25:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 26:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectCOAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 27:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, mHiestPriAlarm.HasValue() ? mHiestPriAlarm.Value() : 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 28:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 29:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("interconnectSmokeAlarm", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 30:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, mHiestPriAlarm.HasValue() ? mHiestPriAlarm.Value() : 1U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ break;
+ case 31:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 32:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::AlarmStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("batteryAlert", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ shouldContinue = true;
+ break;
+ case 33:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::SmokeCoAlarm::ExpressedStateEnum value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("expressedState", value, 0U));
+ VerifyOrReturn(CheckConstraintType("value", "enum8", "enum8"));
+ }
+ 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, "Commission DUT to TH");
+ 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 ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH subscribes to BatteryAlert attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::BatteryAlert::Id,
+ 3, 30, true, chip::NullOptional, chip::NullOptional,
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH subscribes to InterconnectSmokeAlarm attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectSmokeAlarm::Id, 3, 30, true, chip::NullOptional,
+ chip::Optional<bool>(true), /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH subscribes to InterconnectCOAlarm attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id,
+ SmokeCoAlarm::Attributes::InterconnectCOAlarm::Id, 3, 30, true, chip::NullOptional,
+ chip::Optional<bool>(true), /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "TH subscribes to COState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::COState::Id, 3,
+ 30, true, chip::NullOptional, chip::Optional<bool>(true),
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "TH subscribes to SmokeState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return SubscribeAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::SmokeState::Id, 3,
+ 30, true, chip::NullOptional, chip::Optional<bool>(true),
+ /* autoResubscribe = */ chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Attributes::TestEventTriggersEnabled::Id, true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning Battery Alert Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerWarningBatteryAlert.HasValue() ? mTestEventTriggerWarningBatteryAlert.Value()
+ : 0xffffffff00000095ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 9: {
+ LogStep(9, "TH waits for a report of BatteryAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 10: {
+ LogStep(10,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectSmokeAlarm.HasValue()
+ ? mTestEventTriggerInterconnectSmokeAlarm.Value()
+ : 0xffffffff00000092ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 11: {
+ LogStep(11, "TH waits for a report of InterconnectSmokeAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 12: {
+ LogStep(12,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectCoAlarm.HasValue() ? mTestEventTriggerInterconnectCoAlarm.Value()
+ : 0xffffffff00000094ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 13: {
+ LogStep(13, "TH waits for a report of InterconnectCOAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 14: {
+ LogStep(14,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning CO Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningCoAlarm.HasValue() ? mTestEventTriggerWarningCoAlarm.Value() : 0xffffffff00000091ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 15: {
+ LogStep(15, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 16: {
+ LogStep(16,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Warning Smoke Alarm Test Event");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerWarningSmokeAlarm.HasValue() ? mTestEventTriggerWarningSmokeAlarm.Value() : 0xffffffff00000090ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 17: {
+ LogStep(17, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 18: {
+ LogStep(18, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for Smoke "
+ "Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerSmokeAlarmClear.HasValue() ? mTestEventTriggerSmokeAlarmClear.Value() : 0xffffffff000000a0ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 20: {
+ LogStep(20, "TH waits for a report of SmokeState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 21: {
+ LogStep(21, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 22: {
+ LogStep(22,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for CO "
+ "Alarm Test Event clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerCoAlarmClear.HasValue() ? mTestEventTriggerCoAlarmClear.Value() : 0xffffffff000000a1ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 23: {
+ LogStep(23, "TH waits for a report of COState attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 24: {
+ LogStep(24, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 25: {
+ LogStep(25,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect CO Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectCoAlarmClear.HasValue()
+ ? mTestEventTriggerInterconnectCoAlarmClear.Value()
+ : 0xffffffff000000a4ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 26: {
+ LogStep(26, "TH waits for a report of InterconnectCOAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 27: {
+ LogStep(27, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 28: {
+ LogStep(28,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Interconnect Smoke Alarm Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger = mTestEventTriggerInterconnectSmokeAlarmClear.HasValue()
+ ? mTestEventTriggerInterconnectSmokeAlarmClear.Value()
+ : 0xffffffff000000a2ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 29: {
+ LogStep(29, "TH waits for a report of InterconnectSmokeAlarm attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 30: {
+ LogStep(30, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ case 31: {
+ LogStep(31,
+ "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to "
+ "PIXIT.SMOKECO.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.SMOKECO.TEST_EVENT_TRIGGER for "
+ "Battery Alert Test Event Clear");
+ VerifyOrDo(!ShouldSkip("DGGEN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::GeneralDiagnostics::Commands::TestEventTrigger::Type value;
+ value.enableKey = mTestEventTriggerKey.HasValue()
+ ? mTestEventTriggerKey.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff"),
+ 16);
+ value.eventTrigger =
+ mTestEventTriggerBatteryAlertClear.HasValue() ? mTestEventTriggerBatteryAlertClear.Value() : 0xffffffff000000a5ULL;
+ return SendCommand(kIdentityAlpha, GetEndpoint(0), GeneralDiagnostics::Id,
+ GeneralDiagnostics::Commands::TestEventTrigger::Id, value, chip::NullOptional
+
+ );
+ }
+ case 32: {
+ LogStep(32, "TH waits for a report of BatteryAlert attribute from DUT with a timeout of 300 seconds");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return WaitForReport();
+ }
+ case 33: {
+ LogStep(33, "TH reads ExpressedState attribute from DUT");
+ VerifyOrDo(!ShouldSkip("SMOKECO.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), SmokeCoAlarm::Id, SmokeCoAlarm::Attributes::ExpressedState::Id,
+ true, chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_SWTCH_1_1Suite : public TestCommand
{
public:
@@ -135304,6 +139935,13 @@
make_unique<Test_TC_PSCFG_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_RH_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_RH_2_1Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_1_1Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_1Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_2Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_3Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_4Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_5Suite>(credsIssuerConfig),
+ make_unique<Test_TC_SMCO_2_6Suite>(credsIssuerConfig),
make_unique<Test_TC_SWTCH_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_SWTCH_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_TMP_1_1Suite>(credsIssuerConfig),