diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
index cf9ea43577a32d..4b5d51f442205f 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
@@ -540,6 +540,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
index 2d5f4c10118ed9..92932cfd83c333 100644
--- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
+++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
@@ -411,6 +411,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter
index 199117c8edd14a..54b3350c3a3805 100644
--- a/examples/bridge-app/bridge-common/bridge-app.matter
+++ b/examples/bridge-app/bridge-common/bridge-app.matter
@@ -239,6 +239,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
index 59852041f62afa..4bff8df11f908b 100644
--- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -299,6 +299,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
index df9263ae1c4412..fe08e80ffffc39 100644
--- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
+++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
@@ -317,6 +317,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
index c221a439eabd36..8d3d9e60304b56 100644
--- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
+++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
@@ -149,6 +149,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
index 927061e0e3d6f3..b8afaea3572f59 100644
--- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -299,6 +299,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
index a9f7ea9b22c4bb..aeb594c5de3e2e 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
@@ -149,6 +149,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
index 151ea11cec76f3..076ebe9ded9b6b 100644
--- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
+++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
@@ -299,6 +299,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
index 8114f21312532e..d851670914addd 100644
--- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
+++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
index b1cb8a0f934a8b..e2d092aadc74da 100644
--- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
+++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
index 6180211966281c..95067271e9bdbf 100644
--- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
+++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
@@ -293,6 +293,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
index 8d6d412202cc37..51539608f77c93 100644
--- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
+++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
index 483bbb34b94ae8..046c96f788b42c 100644
--- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
+++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
index b58678e94f4ad6..5f4df720ab7645 100644
--- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
+++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
index 0d004319048e9b..cdc5ce1f05fc1f 100644
--- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
+++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
@@ -299,6 +299,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
index 26de0114737044..aad75b19c1c549 100644
--- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
+++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
@@ -263,6 +263,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
index 5c10b0e1c762d8..062beadb18923b 100644
--- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
+++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
@@ -198,6 +198,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
index fa133352b4baa9..348af0da8d066d 100644
--- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
+++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_pump_a811bb33a0.matter b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
index fd3f0022ec1ab0..81a95b1aa42e46 100644
--- a/examples/chef/devices/rootnode_pump_a811bb33a0.matter
+++ b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
@@ -131,6 +131,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
index d5a586c417a99a..707711726b0578 100644
--- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
+++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
@@ -293,6 +293,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
index 9151c8d3b11ba3..11c8f04ded349e 100644
--- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
+++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
index 09438ae6a30c4f..6d8d1131ec69b0 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
@@ -149,6 +149,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
index 9f5d3850296822..445dc383e2fc42 100644
--- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
+++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
@@ -149,6 +149,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
index 2f9e5f140fee76..15ebf07c2d6673 100644
--- a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
index 91727b7e554b52..6994217884c894 100644
--- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
+++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.matter b/examples/light-switch-app/light-switch-common/light-switch-app.matter
index fd01398a33e433..61eda622d41fb6 100644
--- a/examples/light-switch-app/light-switch-common/light-switch-app.matter
+++ b/examples/light-switch-app/light-switch-common/light-switch-app.matter
@@ -447,6 +447,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
index 761728c6e07cec..7c7332cc0306b2 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
@@ -326,6 +326,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
index cec65b4ff30bb7..67de97758bf6d0 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
@@ -326,6 +326,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter
index 0c685ad61c80ad..ea56e7d7138aa4 100644
--- a/examples/lighting-app/lighting-common/lighting-app.matter
+++ b/examples/lighting-app/lighting-common/lighting-app.matter
@@ -470,6 +470,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter
index bdd3f820f6b97d..6e3048786bdbc4 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.matter
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter
@@ -319,6 +319,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter
index b456501a1e6e46..09c2343a8aae9c 100644
--- a/examples/lighting-app/qpg/zap/light.matter
+++ b/examples/lighting-app/qpg/zap/light.matter
@@ -322,6 +322,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
index 5e4a911199f773..4a96f5b54e78a4 100644
--- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
@@ -491,6 +491,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
index 2294885328b132..77979c8eee896e 100644
--- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
@@ -470,6 +470,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter
index 12ccf99737cca3..0e9be617da8907 100644
--- a/examples/lock-app/lock-common/lock-app.matter
+++ b/examples/lock-app/lock-common/lock-app.matter
@@ -129,6 +129,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter
index f8f52512838f1f..397452eb07fa79 100644
--- a/examples/lock-app/nxp/zap/lock-app.matter
+++ b/examples/lock-app/nxp/zap/lock-app.matter
@@ -86,6 +86,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter
index 48debf870725a1..c07134be9d7262 100644
--- a/examples/lock-app/qpg/zap/lock.matter
+++ b/examples/lock-app/qpg/zap/lock.matter
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter b/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
index 0d104ee6ee3beb..18b9e1e99e5ed3 100644
--- a/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
+++ b/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
@@ -40,6 +40,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
index 0ffa0d1a21dc31..fe4652795026ba 100644
--- a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
+++ b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
@@ -218,6 +218,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter
index fbc2d4fc5bf331..d9380b5ace2a41 100644
--- a/examples/placeholder/linux/apps/app1/config.matter
+++ b/examples/placeholder/linux/apps/app1/config.matter
@@ -683,6 +683,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter
index d993525d57d388..abf76c3a9de16d 100644
--- a/examples/placeholder/linux/apps/app2/config.matter
+++ b/examples/placeholder/linux/apps/app2/config.matter
@@ -681,6 +681,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter
index b616e32193f87b..5636ad24e581b8 100644
--- a/examples/pump-app/pump-common/pump-app.matter
+++ b/examples/pump-app/pump-common/pump-app.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/pump-app/silabs/data_model/pump-thread-app.matter b/examples/pump-app/silabs/data_model/pump-thread-app.matter
index 195a0c1644a5dc..dae3db394fcbd9 100644
--- a/examples/pump-app/silabs/data_model/pump-thread-app.matter
+++ b/examples/pump-app/silabs/data_model/pump-thread-app.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/pump-app/silabs/data_model/pump-wifi-app.matter b/examples/pump-app/silabs/data_model/pump-wifi-app.matter
index 195a0c1644a5dc..dae3db394fcbd9 100644
--- a/examples/pump-app/silabs/data_model/pump-wifi-app.matter
+++ b/examples/pump-app/silabs/data_model/pump-wifi-app.matter
@@ -224,6 +224,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
index 751ddeea59cd4f..16c72d7d0341bd 100644
--- a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
+++ b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
@@ -149,6 +149,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter b/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter
index 70272ea93e4dbe..facd6595b3943e 100644
--- a/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter
+++ b/examples/resource-monitoring-app/resource-monitoring-common/resource-monitoring-app.matter
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
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 97f09da8a4b90e..f3a361a71119e9 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
@@ -155,6 +155,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
index 28319df34ee599..70f93bcd68ec64 100644
--- a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
+++ b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
@@ -40,6 +40,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter
index 37049ec0f0b330..49776bcef7069d 100644
--- a/examples/thermostat/thermostat-common/thermostat.matter
+++ b/examples/thermostat/thermostat-common/thermostat.matter
@@ -320,6 +320,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter
index 0722e02b66f878..38a9224dabe38f 100644
--- a/examples/tv-app/tv-common/tv-app.matter
+++ b/examples/tv-app/tv-common/tv-app.matter
@@ -193,6 +193,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
index 154e5f96b4a483..2fa6d8631192ed 100644
--- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
+++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
@@ -354,10 +354,18 @@ client cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
readonly attribute ENDPOINT_NO partsList[] = 3;
+ readonly attribute optional SemanticTagStruct tagList[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -373,6 +381,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
index d86ccf415c13aa..280eac184ac8c5 100644
--- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
+++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
@@ -337,6 +337,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/examples/window-app/common/window-app.matter b/examples/window-app/common/window-app.matter
index afbea2f746a193..b6a03dc6d91d13 100644
--- a/examples/window-app/common/window-app.matter
+++ b/examples/window-app/common/window-app.matter
@@ -272,6 +272,13 @@ server cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
diff --git a/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml
index c2393f383730b3..e27710d26f8c8f 100644
--- a/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml
@@ -23,6 +23,14 @@ limitations under the License.
+
+
+
+
+
+
+
+
General
Descriptor
@@ -33,5 +41,6 @@ limitations under the License.
ServerList
ClientList
PartsList
+ TagList
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 43004df7702d9e..f5434d4cd08ced 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -571,10 +571,18 @@ client cluster Descriptor = 29 {
int16u revision = 1;
}
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
readonly attribute CLUSTER_ID serverList[] = 1;
readonly attribute CLUSTER_ID clientList[] = 2;
readonly attribute ENDPOINT_NO partsList[] = 3;
+ readonly attribute optional SemanticTagStruct tagList[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
index 1d666b7dadceb0..dedcfd9290312d 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
@@ -1681,6 +1681,7 @@ public enum Attribute {
ServerList(1L),
ClientList(2L),
PartsList(3L),
+ TagList(4L),
GeneratedCommandList(65528L),
AcceptedCommandList(65529L),
EventList(65530L),
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
index 285cef92fe3553..338023c10f36c1 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -1081,6 +1081,17 @@ private static Map readDescriptorInteractionInfo() {
readDescriptorPartsListCommandParams
);
result.put("readPartsListAttribute", readDescriptorPartsListAttributeInteractionInfo);
+ Map readDescriptorTagListCommandParams = new LinkedHashMap();
+ InteractionInfo readDescriptorTagListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.DescriptorCluster) cluster).readTagListAttribute(
+ (ChipClusters.DescriptorCluster.TagListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedDescriptorClusterTagListAttributeCallback(),
+ readDescriptorTagListCommandParams
+ );
+ result.put("readTagListAttribute", readDescriptorTagListAttributeInteractionInfo);
Map readDescriptorGeneratedCommandListCommandParams = new LinkedHashMap();
InteractionInfo readDescriptorGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
(cluster, callback, commandArguments) -> {
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index 6803b8c6e15505..111b0828a57a99 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -1914,6 +1914,89 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
}
return value;
}
+ case Attributes::TagList::Id: {
+ using TypeInfo = Attributes::TagList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ jobject newElement_0_mfgCode;
+ if (entry_0.mfgCode.IsNull())
+ {
+ newElement_0_mfgCode = nullptr;
+ }
+ else
+ {
+ std::string newElement_0_mfgCodeClassName = "java/lang/Integer";
+ std::string newElement_0_mfgCodeCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_mfgCodeClassName.c_str(), newElement_0_mfgCodeCtorSignature.c_str(),
+ static_cast(entry_0.mfgCode.Value()), newElement_0_mfgCode);
+ }
+ jobject newElement_0_namespaceID;
+ std::string newElement_0_namespaceIDClassName = "java/lang/Integer";
+ std::string newElement_0_namespaceIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_namespaceIDClassName.c_str(),
+ newElement_0_namespaceIDCtorSignature.c_str(),
+ entry_0.namespaceID, newElement_0_namespaceID);
+ jobject newElement_0_tag;
+ std::string newElement_0_tagClassName = "java/lang/Integer";
+ std::string newElement_0_tagCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_tagClassName.c_str(), newElement_0_tagCtorSignature.c_str(), entry_0.tag, newElement_0_tag);
+ jobject newElement_0_label;
+ if (!entry_0.label.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_label);
+ }
+ else
+ {
+ jobject newElement_0_labelInsideOptional;
+ if (entry_0.label.Value().IsNull())
+ {
+ newElement_0_labelInsideOptional = nullptr;
+ }
+ else
+ {
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.label.Value().Value(),
+ newElement_0_labelInsideOptional));
+ }
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_labelInsideOptional, newElement_0_label);
+ }
+
+ jclass semanticTagStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$DescriptorClusterSemanticTagStruct", semanticTagStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$DescriptorClusterSemanticTagStruct");
+ return nullptr;
+ }
+ jmethodID semanticTagStructStructCtor_1 =
+ env->GetMethodID(semanticTagStructStructClass_1, "",
+ "(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/Optional;)V");
+ if (semanticTagStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$DescriptorClusterSemanticTagStruct constructor");
+ return nullptr;
+ }
+
+ newElement_0 = env->NewObject(semanticTagStructStructClass_1, semanticTagStructStructCtor_1, newElement_0_mfgCode,
+ newElement_0_namespaceID, newElement_0_tag, newElement_0_label);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
case Attributes::GeneratedCommandList::Id: {
using TypeInfo = Attributes::GeneratedCommandList::TypeInfo;
TypeInfo::DecodableType cppValue;
diff --git a/src/controller/java/zap-generated/CHIPClientCallbacks.h b/src/controller/java/zap-generated/CHIPClientCallbacks.h
index 2cb8e7e426bce7..813ddba48a0738 100644
--- a/src/controller/java/zap-generated/CHIPClientCallbacks.h
+++ b/src/controller/java/zap-generated/CHIPClientCallbacks.h
@@ -101,6 +101,9 @@ typedef void (*DescriptorClientListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorPartsListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
+typedef void (*DescriptorTagListListAttributeCallback)(
+ void * context,
+ const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorGeneratedCommandListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorAcceptedCommandListListAttributeCallback)(
diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
index f5518c4f4e7b01..7091c9ab3a7ef5 100644
--- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
@@ -3112,6 +3112,135 @@ void CHIPDescriptorPartsListAttributeCallback::CallbackFn(void * context,
env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
}
+CHIPDescriptorTagListAttributeCallback::CHIPDescriptorTagListAttributeCallback(jobject javaCallback, bool keepAlive) :
+ chip::Callback::Callback(CallbackFn, this), keepAlive(keepAlive)
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not create global reference for Java callback");
+ return;
+ }
+
+ javaCallbackRef = env->NewGlobalRef(javaCallback);
+ if (javaCallbackRef == nullptr)
+ {
+ ChipLogError(Zcl, "Could not create global reference for Java callback");
+ }
+}
+
+CHIPDescriptorTagListAttributeCallback::~CHIPDescriptorTagListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPDescriptorTagListAttributeCallback::CallbackFn(
+ void * context,
+ const chip::app::DataModel::DecodableList & list)
+{
+ chip::DeviceLayer::StackUnlock unlock;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ jobject javaCallbackRef;
+
+ VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+ std::unique_ptr cppCallback(
+ reinterpret_cast(context), maybeDestroy);
+
+ // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
+ javaCallbackRef = cppCallback.get()->javaCallbackRef;
+ VerifyOrReturn(javaCallbackRef != nullptr,
+ ChipLogProgress(Zcl, "Early return from attribute callback since Java callback is null"));
+
+ jmethodID javaMethod;
+ err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/util/List;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess() method"));
+
+ jobject arrayListObj;
+ chip::JniReferences::GetInstance().CreateArrayList(arrayListObj);
+
+ auto iter_arrayListObj_0 = list.begin();
+ while (iter_arrayListObj_0.Next())
+ {
+ auto & entry_0 = iter_arrayListObj_0.GetValue();
+ jobject newElement_0;
+ jobject newElement_0_mfgCode;
+ if (entry_0.mfgCode.IsNull())
+ {
+ newElement_0_mfgCode = nullptr;
+ }
+ else
+ {
+ std::string newElement_0_mfgCodeClassName = "java/lang/Integer";
+ std::string newElement_0_mfgCodeCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_mfgCodeClassName.c_str(), newElement_0_mfgCodeCtorSignature.c_str(),
+ static_cast(entry_0.mfgCode.Value()), newElement_0_mfgCode);
+ }
+ jobject newElement_0_namespaceID;
+ std::string newElement_0_namespaceIDClassName = "java/lang/Integer";
+ std::string newElement_0_namespaceIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_namespaceIDClassName.c_str(),
+ newElement_0_namespaceIDCtorSignature.c_str(),
+ entry_0.namespaceID, newElement_0_namespaceID);
+ jobject newElement_0_tag;
+ std::string newElement_0_tagClassName = "java/lang/Integer";
+ std::string newElement_0_tagCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_tagClassName.c_str(), newElement_0_tagCtorSignature.c_str(), entry_0.tag, newElement_0_tag);
+ jobject newElement_0_label;
+ if (!entry_0.label.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_label);
+ }
+ else
+ {
+ jobject newElement_0_labelInsideOptional;
+ if (entry_0.label.Value().IsNull())
+ {
+ newElement_0_labelInsideOptional = nullptr;
+ }
+ else
+ {
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.label.Value().Value(),
+ newElement_0_labelInsideOptional));
+ }
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_labelInsideOptional, newElement_0_label);
+ }
+
+ jclass semanticTagStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$DescriptorClusterSemanticTagStruct", semanticTagStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$DescriptorClusterSemanticTagStruct");
+ return;
+ }
+ jmethodID semanticTagStructStructCtor_1 =
+ env->GetMethodID(semanticTagStructStructClass_1, "",
+ "(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/Optional;)V");
+ if (semanticTagStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$DescriptorClusterSemanticTagStruct constructor");
+ return;
+ }
+
+ newElement_0 = env->NewObject(semanticTagStructStructClass_1, semanticTagStructStructCtor_1, newElement_0_mfgCode,
+ newElement_0_namespaceID, newElement_0_tag, newElement_0_label);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
CHIPDescriptorGeneratedCommandListAttributeCallback::CHIPDescriptorGeneratedCommandListAttributeCallback(jobject javaCallback,
bool keepAlive) :
chip::Callback::Callback(CallbackFn, this),
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
index 3be313a4ff970d..54e2e40372e417 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -2835,6 +2835,11 @@ public interface PartsListAttributeCallback {
void onError(Exception ex);
default void onSubscriptionEstablished(long subscriptionId) {}
}
+ public interface TagListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
public interface GeneratedCommandListAttributeCallback {
void onSuccess( List valueList);
void onError(Exception ex);
@@ -2904,6 +2909,18 @@ public void subscribePartsListAttribute(
subscribePartsListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
}
+ public void readTagListAttribute(
+ TagListAttributeCallback callback
+ ) {
+ readTagListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeTagListAttribute(
+ TagListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeTagListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
public void readGeneratedCommandListAttribute(
GeneratedCommandListAttributeCallback callback
) {
@@ -3004,6 +3021,13 @@ private native void subscribePartsListAttribute(long chipClusterPtr,
PartsListAttributeCallback callback
, int minInterval, int maxInterval);
+ private native void readTagListAttribute(long chipClusterPtr,
+ TagListAttributeCallback callback
+ );
+ private native void subscribeTagListAttribute(long chipClusterPtr,
+ TagListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
private native void readGeneratedCommandListAttribute(long chipClusterPtr,
GeneratedCommandListAttributeCallback callback
);
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
index 08cd512dcc30df..6907c0912103af 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
@@ -105,6 +105,45 @@ public String toString() {
}
}
+public static class DescriptorClusterSemanticTagStruct {
+public @Nullable Integer mfgCode;
+public Integer namespaceID;
+public Integer tag;
+public @Nullable Optional label;
+
+ public DescriptorClusterSemanticTagStruct(
+ @Nullable Integer mfgCode
+ , Integer namespaceID
+ , Integer tag
+ , @Nullable Optional label
+ ) {
+ this.mfgCode = mfgCode;
+ this.namespaceID = namespaceID;
+ this.tag = tag;
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("DescriptorClusterSemanticTagStruct {\n");
+ output.append("\tmfgCode: ");
+ output.append(mfgCode);
+ output.append("\n");
+ output.append("\tnamespaceID: ");
+ output.append(namespaceID);
+ output.append("\n");
+ output.append("\ttag: ");
+ output.append(tag);
+ output.append("\n");
+ output.append("\tlabel: ");
+ output.append(label);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+
public static class BindingClusterTargetStruct {
public Optional node;
public Optional group;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
index 2f745f9a1a6652..67727e6b56cf13 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
@@ -1389,6 +1389,25 @@ public void onError(Exception ex) {
callback.onFailure(ex);
}
}
+ public static class DelegatedDescriptorClusterTagListAttributeCallback implements ChipClusters.DescriptorCluster.TagListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess( List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
public static class DelegatedDescriptorClusterGeneratedCommandListAttributeCallback implements ChipClusters.DescriptorCluster.GeneratedCommandListAttributeCallback, DelegatedClusterCallback {
private ClusterCommandCallback callback;
@Override
diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py
index fb2c9b2a3479e3..c639a3a770d3b2 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.py
+++ b/src/controller/python/chip/clusters/CHIPClusters.py
@@ -948,6 +948,12 @@ class ChipClusters:
"type": "int",
"reportable": True,
},
+ 0x00000004: {
+ "attributeName": "TagList",
+ "attributeId": 0x00000004,
+ "type": "",
+ "reportable": True,
+ },
0x0000FFF8: {
"attributeName": "GeneratedCommandList",
"attributeId": 0x0000FFF8,
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 1c843b6c1e53aa..9d5670c8e8d930 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -2782,6 +2782,7 @@ def descriptor(cls) -> ClusterObjectDescriptor:
ClusterObjectFieldDescriptor(Label="serverList", Tag=0x00000001, Type=typing.List[uint]),
ClusterObjectFieldDescriptor(Label="clientList", Tag=0x00000002, Type=typing.List[uint]),
ClusterObjectFieldDescriptor(Label="partsList", Tag=0x00000003, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="tagList", Tag=0x00000004, Type=typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]]),
ClusterObjectFieldDescriptor(Label="generatedCommandList", Tag=0x0000FFF8, Type=typing.List[uint]),
ClusterObjectFieldDescriptor(Label="acceptedCommandList", Tag=0x0000FFF9, Type=typing.List[uint]),
ClusterObjectFieldDescriptor(Label="eventList", Tag=0x0000FFFA, Type=typing.List[uint]),
@@ -2794,6 +2795,7 @@ def descriptor(cls) -> ClusterObjectDescriptor:
serverList: 'typing.List[uint]' = None
clientList: 'typing.List[uint]' = None
partsList: 'typing.List[uint]' = None
+ tagList: 'typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]]' = None
generatedCommandList: 'typing.List[uint]' = None
acceptedCommandList: 'typing.List[uint]' = None
eventList: 'typing.List[uint]' = None
@@ -2815,6 +2817,23 @@ def descriptor(cls) -> ClusterObjectDescriptor:
deviceType: 'uint' = 0
revision: 'uint' = 0
+ @dataclass
+ class SemanticTagStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="mfgCode", Tag=0, Type=typing.Union[Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="namespaceID", Tag=1, Type=uint),
+ ClusterObjectFieldDescriptor(Label="tag", Tag=2, Type=uint),
+ ClusterObjectFieldDescriptor(Label="label", Tag=3, Type=typing.Union[None, Nullable, str]),
+ ])
+
+ mfgCode: 'typing.Union[Nullable, uint]' = NullValue
+ namespaceID: 'uint' = 0
+ tag: 'uint' = 0
+ label: 'typing.Union[None, Nullable, str]' = None
+
class Attributes:
@dataclass
class DeviceTypeList(ClusterAttributeDescriptor):
@@ -2880,6 +2899,22 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
value: 'typing.List[uint]' = field(default_factory=lambda: [])
+ @dataclass
+ class TagList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x001D
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000004
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]])
+
+ value: 'typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]]' = None
+
@dataclass
class GeneratedCommandList(ClusterAttributeDescriptor):
@ChipUtility.classproperty
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
index d409280e841e95..abf35d26b40424 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
@@ -378,6 +378,9 @@ static BOOL AttributeIsSpecifiedInDescriptorCluster(AttributeId aAttributeId)
case Attributes::PartsList::Id: {
return YES;
}
+ case Attributes::TagList::Id: {
+ return YES;
+ }
case Attributes::GeneratedCommandList::Id: {
return YES;
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index fd80b7549d2056..14d0fb2f4bb436 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -1778,6 +1778,53 @@ static id _Nullable DecodeAttributeValueForDescriptorCluster(
}
return value;
}
+ case Attributes::TagList::Id: {
+ using TypeInfo = Attributes::TagList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSArray * _Nonnull value;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = cppValue.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ MTRDescriptorClusterSemanticTagStruct * newElement_0;
+ newElement_0 = [MTRDescriptorClusterSemanticTagStruct new];
+ if (entry_0.mfgCode.IsNull()) {
+ newElement_0.mfgCode = nil;
+ } else {
+ newElement_0.mfgCode = [NSNumber numberWithUnsignedShort:chip::to_underlying(entry_0.mfgCode.Value())];
+ }
+ newElement_0.namespaceID = [NSNumber numberWithUnsignedChar:entry_0.namespaceID];
+ newElement_0.tag = [NSNumber numberWithUnsignedChar:entry_0.tag];
+ if (entry_0.label.HasValue()) {
+ if (entry_0.label.Value().IsNull()) {
+ newElement_0.label = nil;
+ } else {
+ newElement_0.label = AsString(entry_0.label.Value().Value());
+ if (newElement_0.label == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ }
+ } else {
+ newElement_0.label = nil;
+ }
+ [array_0 addObject:newElement_0];
+ }
+ CHIP_ERROR err = iter_0.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ *aError = err;
+ return nil;
+ }
+ value = array_0;
+ }
+ return value;
+ }
case Attributes::GeneratedCommandList::Id: {
using TypeInfo = Attributes::GeneratedCommandList::TypeInfo;
TypeInfo::DecodableType cppValue;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index 73bbdf12755f6a..ded2a0be84a606 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -1753,6 +1753,18 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
+- (void)readAttributeTagListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeTagListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeTagListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
- (void)subscribeAttributeGeneratedCommandListWithParams:(MTRSubscribeParams *)params
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index 6dc534148f5b85..4123b1d90123c2 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -10054,6 +10054,49 @@ + (void)readAttributePartsListWithClusterStateCache:(MTRClusterStateCacheContain
});
}
+- (void)readAttributeTagListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = Descriptor::Attributes::TagList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeTagListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = Descriptor::Attributes::TagList::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeTagListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRDescriptorTagListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(DescriptorTagListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = Descriptor::Attributes::TagList::TypeInfo;
+ path.mEndpointId = static_cast([endpoint unsignedShortValue]);
+ path.mClusterId = TypeInfo::GetClusterId();
+ path.mAttributeId = TypeInfo::GetAttributeId();
+ TypeInfo::DecodableType value;
+ CHIP_ERROR err = clusterStateCacheContainer.cppClusterStateCache->Get(path, value);
+ if (err == CHIP_NO_ERROR) {
+ successCb(bridge, value);
+ }
+ return err;
+ }
+ return CHIP_ERROR_NOT_FOUND;
+ });
+}
+
- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
{
MTRReadParams * params = [[MTRReadParams alloc] init];
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
index d442cba34e462c..0cc7f3684f1c80 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
@@ -893,6 +893,9 @@ typedef void (*DescriptorClientListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorPartsListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
+typedef void (*DescriptorTagListListAttributeCallback)(
+ void * context,
+ const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorGeneratedCommandListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*DescriptorAcceptedCommandListListAttributeCallback)(
@@ -3901,6 +3904,39 @@ class MTRDescriptorPartsListListAttributeCallbackSubscriptionBridge : public MTR
MTRSubscriptionEstablishedHandler mEstablishedHandler;
};
+class MTRDescriptorTagListListAttributeCallbackBridge : public MTRCallbackBridge
+{
+public:
+ MTRDescriptorTagListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRDescriptorTagListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(
+ void * context,
+ const chip::app::DataModel::DecodableList &
+ value);
+};
+
+class MTRDescriptorTagListListAttributeCallbackSubscriptionBridge : public MTRDescriptorTagListListAttributeCallbackBridge
+{
+public:
+ MTRDescriptorTagListListAttributeCallbackSubscriptionBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRDescriptorTagListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRDescriptorTagListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRDescriptorTagListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
class MTRDescriptorGeneratedCommandListListAttributeCallbackBridge
: public MTRCallbackBridge
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
index 5a57fde9efdc14..c6806421244642 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
@@ -2132,6 +2132,65 @@
}
}
+void MTRDescriptorTagListListAttributeCallbackBridge::OnSuccessFn(void * context,
+ const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ MTRDescriptorClusterSemanticTagStruct * newElement_0;
+ newElement_0 = [MTRDescriptorClusterSemanticTagStruct new];
+ if (entry_0.mfgCode.IsNull()) {
+ newElement_0.mfgCode = nil;
+ } else {
+ newElement_0.mfgCode = [NSNumber numberWithUnsignedShort:chip::to_underlying(entry_0.mfgCode.Value())];
+ }
+ newElement_0.namespaceID = [NSNumber numberWithUnsignedChar:entry_0.namespaceID];
+ newElement_0.tag = [NSNumber numberWithUnsignedChar:entry_0.tag];
+ if (entry_0.label.HasValue()) {
+ if (entry_0.label.Value().IsNull()) {
+ newElement_0.label = nil;
+ } else {
+ newElement_0.label = AsString(entry_0.label.Value().Value());
+ if (newElement_0.label == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ OnFailureFn(context, err);
+ return;
+ }
+ }
+ } else {
+ newElement_0.label = nil;
+ }
+ [array_0 addObject:newElement_0];
+ }
+ CHIP_ERROR err = iter_0.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRDescriptorTagListListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
void MTRDescriptorGeneratedCommandListListAttributeCallbackBridge::OnSuccessFn(
void * context, const chip::app::DataModel::DecodableList & value)
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
index ec24d0bf46d825..7f0f5a82834061 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
@@ -915,6 +915,7 @@ typedef NS_ENUM(uint32_t, MTRAttributeIDType) {
= 0x00000002,
MTRAttributeIDTypeClusterDescriptorAttributePartsListID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= 0x00000003,
+ MTRAttributeIDTypeClusterDescriptorAttributeTagListID MTR_NEWLY_AVAILABLE = 0x00000004,
MTRAttributeIDTypeClusterDescriptorAttributeGeneratedCommandListID API_AVAILABLE(
ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= MTRAttributeIDTypeGlobalAttributeGeneratedCommandListID,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index d94a33f298ca64..77495c0ef94bfe 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -749,6 +749,8 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
- (NSDictionary *)readAttributePartsListWithParams:(MTRReadParams * _Nullable)params
API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
+- (NSDictionary *)readAttributeTagListWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
- (NSDictionary *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params
API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index 604999af9b401c..f433d153adcafb 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -4307,6 +4307,14 @@ - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpoi
params:params];
}
+- (NSDictionary *)readAttributeTagListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeDescriptorID)
+ attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeTagListID)
+ params:params];
+}
+
- (NSDictionary *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params
{
return [self.device readAttributeWithEndpointID:@(_endpoint)
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
index a711c57acd66ff..cb5ffe460ba0af 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
@@ -50,6 +50,14 @@ MTR_DEPRECATED(
"Please use MTRDescriptorClusterDeviceTypeStruct", ios(16.1, 16.4), macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4));
@end
+MTR_NEWLY_AVAILABLE
+@interface MTRDescriptorClusterSemanticTagStruct : NSObject
+@property (nonatomic, copy) NSNumber * _Nullable mfgCode MTR_NEWLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull namespaceID MTR_NEWLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull tag MTR_NEWLY_AVAILABLE;
+@property (nonatomic, copy) NSString * _Nullable label MTR_NEWLY_AVAILABLE;
+@end
+
API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@interface MTRBindingClusterTargetStruct : NSObject
@property (nonatomic, copy) NSNumber * _Nullable node API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
index 1ceb18855b7549..3a2579b22f8cc9 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
@@ -146,6 +146,43 @@ @implementation MTRDescriptorClusterDeviceType : MTRDescriptorClusterDeviceTypeS
@dynamic revision;
@end
+@implementation MTRDescriptorClusterSemanticTagStruct
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _mfgCode = nil;
+
+ _namespaceID = @(0);
+
+ _tag = @(0);
+
+ _label = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+ auto other = [[MTRDescriptorClusterSemanticTagStruct alloc] init];
+
+ other.mfgCode = self.mfgCode;
+ other.namespaceID = self.namespaceID;
+ other.tag = self.tag;
+ other.label = self.label;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: mfgCode:%@; namespaceID:%@; tag:%@; label:%@; >",
+ NSStringFromClass([self class]), _mfgCode, _namespaceID, _tag, _label];
+ return descriptionString;
+}
+
+@end
+
@implementation MTRBindingClusterTargetStruct
- (instancetype)init
{
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
index 6dc54839545c54..8fac2b4581f03a 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
@@ -2851,6 +2851,58 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
}
} // namespace DeviceTypeStruct
+namespace SemanticTagStruct {
+CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const
+{
+ TLV::TLVType outer;
+ ReturnErrorOnFailure(aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
+ ReturnErrorOnFailure(DataModel::Encode(aWriter, TLV::ContextTag(Fields::kMfgCode), mfgCode));
+ ReturnErrorOnFailure(DataModel::Encode(aWriter, TLV::ContextTag(Fields::kNamespaceID), namespaceID));
+ ReturnErrorOnFailure(DataModel::Encode(aWriter, TLV::ContextTag(Fields::kTag), tag));
+ ReturnErrorOnFailure(DataModel::Encode(aWriter, TLV::ContextTag(Fields::kLabel), label));
+ ReturnErrorOnFailure(aWriter.EndContainer(outer));
+ return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ TLV::TLVType outer;
+ VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
+ err = reader.EnterContainer(outer);
+ ReturnErrorOnFailure(err);
+ while ((err = reader.Next()) == CHIP_NO_ERROR)
+ {
+ if (!TLV::IsContextTag(reader.GetTag()))
+ {
+ continue;
+ }
+ switch (TLV::TagNumFromTag(reader.GetTag()))
+ {
+ case to_underlying(Fields::kMfgCode):
+ ReturnErrorOnFailure(DataModel::Decode(reader, mfgCode));
+ break;
+ case to_underlying(Fields::kNamespaceID):
+ ReturnErrorOnFailure(DataModel::Decode(reader, namespaceID));
+ break;
+ case to_underlying(Fields::kTag):
+ ReturnErrorOnFailure(DataModel::Decode(reader, tag));
+ break;
+ case to_underlying(Fields::kLabel):
+ ReturnErrorOnFailure(DataModel::Decode(reader, label));
+ break;
+ default:
+ break;
+ }
+ }
+
+ VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
+ ReturnErrorOnFailure(reader.ExitContainer(outer));
+
+ return CHIP_NO_ERROR;
+}
+
+} // namespace SemanticTagStruct
} // namespace Structs
namespace Commands {} // namespace Commands
@@ -2872,6 +2924,9 @@ CHIP_ERROR TypeInfo::DecodableType::Decode(TLV::TLVReader & reader, const Concre
case Attributes::PartsList::TypeInfo::GetAttributeId():
ReturnErrorOnFailure(DataModel::Decode(reader, partsList));
break;
+ case Attributes::TagList::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, tagList));
+ break;
case Attributes::GeneratedCommandList::TypeInfo::GetAttributeId():
ReturnErrorOnFailure(DataModel::Decode(reader, generatedCommandList));
break;
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
index e9063f35119f91..be7ffc777ee112 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
@@ -3311,6 +3311,33 @@ struct Type
using DecodableType = Type;
} // namespace DeviceTypeStruct
+namespace SemanticTagStruct {
+enum class Fields : uint8_t
+{
+ kMfgCode = 0,
+ kNamespaceID = 1,
+ kTag = 2,
+ kLabel = 3,
+};
+
+struct Type
+{
+public:
+ DataModel::Nullable mfgCode;
+ uint8_t namespaceID = static_cast(0);
+ uint8_t tag = static_cast(0);
+ Optional> label;
+
+ CHIP_ERROR Decode(TLV::TLVReader & reader);
+
+ static constexpr bool kIsFabricScoped = false;
+
+ CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const;
+};
+
+using DecodableType = Type;
+
+} // namespace SemanticTagStruct
} // namespace Structs
namespace Attributes {
@@ -3365,6 +3392,20 @@ struct TypeInfo
static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace PartsList
+namespace TagList {
+struct TypeInfo
+{
+ using Type = chip::app::DataModel::List;
+ using DecodableType =
+ chip::app::DataModel::DecodableList;
+ using DecodableArgType =
+ const chip::app::DataModel::DecodableList &;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::Descriptor::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::TagList::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace TagList
namespace GeneratedCommandList {
struct TypeInfo : public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo
{
@@ -3414,6 +3455,7 @@ struct TypeInfo
Attributes::ServerList::TypeInfo::DecodableType serverList;
Attributes::ClientList::TypeInfo::DecodableType clientList;
Attributes::PartsList::TypeInfo::DecodableType partsList;
+ Attributes::TagList::TypeInfo::DecodableType tagList;
Attributes::GeneratedCommandList::TypeInfo::DecodableType generatedCommandList;
Attributes::AcceptedCommandList::TypeInfo::DecodableType acceptedCommandList;
Attributes::EventList::TypeInfo::DecodableType eventList;
diff --git a/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h b/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
index dce88719f3bb7b..5e335aeb3d8d18 100644
--- a/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
+++ b/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
@@ -478,6 +478,10 @@ namespace PartsList {
static constexpr AttributeId Id = 0x00000003;
} // namespace PartsList
+namespace TagList {
+static constexpr AttributeId Id = 0x00000004;
+} // namespace TagList
+
namespace GeneratedCommandList {
static constexpr AttributeId Id = Globals::Attributes::GeneratedCommandList::Id;
} // namespace GeneratedCommandList
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
index 30c2cdc531e8df..e92d7f7c750d82 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
@@ -1387,6 +1387,7 @@ class LevelControlMoveToClosestFrequency : public ClusterCommand
| * ServerList | 0x0001 |
| * ClientList | 0x0002 |
| * PartsList | 0x0003 |
+| * TagList | 0x0004 |
| * GeneratedCommandList | 0xFFF8 |
| * AcceptedCommandList | 0xFFF9 |
| * EventList | 0xFFFA |
@@ -10482,6 +10483,7 @@ void registerClusterDescriptor(Commands & commands, CredentialIssuerCommands * c
make_unique(Id, "server-list", Attributes::ServerList::Id, credsIssuerConfig), //
make_unique(Id, "client-list", Attributes::ClientList::Id, credsIssuerConfig), //
make_unique(Id, "parts-list", Attributes::PartsList::Id, credsIssuerConfig), //
+ make_unique(Id, "tag-list", Attributes::TagList::Id, credsIssuerConfig), //
make_unique(Id, "generated-command-list", Attributes::GeneratedCommandList::Id, credsIssuerConfig), //
make_unique(Id, "accepted-command-list", Attributes::AcceptedCommandList::Id, credsIssuerConfig), //
make_unique(Id, "event-list", Attributes::EventList::Id, credsIssuerConfig), //
@@ -10498,6 +10500,9 @@ void registerClusterDescriptor(Commands & commands, CredentialIssuerCommands * c
Id, "client-list", Attributes::ClientList::Id, WriteCommandType::kForceWrite, credsIssuerConfig), //
make_unique>>(
Id, "parts-list", Attributes::PartsList::Id, WriteCommandType::kForceWrite, credsIssuerConfig), //
+ make_unique>>(
+ Id, "tag-list", Attributes::TagList::Id, WriteCommandType::kForceWrite, credsIssuerConfig), //
make_unique>>(
Id, "generated-command-list", Attributes::GeneratedCommandList::Id, WriteCommandType::kForceWrite,
credsIssuerConfig), //
@@ -10516,6 +10521,7 @@ void registerClusterDescriptor(Commands & commands, CredentialIssuerCommands * c
make_unique(Id, "server-list", Attributes::ServerList::Id, credsIssuerConfig), //
make_unique(Id, "client-list", Attributes::ClientList::Id, credsIssuerConfig), //
make_unique(Id, "parts-list", Attributes::PartsList::Id, credsIssuerConfig), //
+ make_unique(Id, "tag-list", Attributes::TagList::Id, credsIssuerConfig), //
make_unique(Id, "generated-command-list", Attributes::GeneratedCommandList::Id, credsIssuerConfig), //
make_unique(Id, "accepted-command-list", Attributes::AcceptedCommandList::Id, credsIssuerConfig), //
make_unique(Id, "event-list", Attributes::EventList::Id, credsIssuerConfig), //
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
index 164c6e16d28f9c..c72ad1d6409a65 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
+++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
@@ -315,6 +315,52 @@ void ComplexArgumentParser::Finalize(chip::app::Clusters::Descriptor::Structs::D
ComplexArgumentParser::Finalize(request.revision);
}
+CHIP_ERROR ComplexArgumentParser::Setup(const char * label,
+ chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::Type & request,
+ Json::Value & value)
+{
+ VerifyOrReturnError(value.isObject(), CHIP_ERROR_INVALID_ARGUMENT);
+
+ // Copy to track which members we already processed.
+ Json::Value valueCopy(value);
+
+ ReturnErrorOnFailure(
+ ComplexArgumentParser::EnsureMemberExist("SemanticTagStruct.mfgCode", "mfgCode", value.isMember("mfgCode")));
+ ReturnErrorOnFailure(
+ ComplexArgumentParser::EnsureMemberExist("SemanticTagStruct.namespaceID", "namespaceID", value.isMember("namespaceID")));
+ ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("SemanticTagStruct.tag", "tag", value.isMember("tag")));
+
+ char labelWithMember[kMaxLabelLength];
+ snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "mfgCode");
+ ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.mfgCode, value["mfgCode"]));
+ valueCopy.removeMember("mfgCode");
+
+ snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "namespaceID");
+ ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.namespaceID, value["namespaceID"]));
+ valueCopy.removeMember("namespaceID");
+
+ snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "tag");
+ ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.tag, value["tag"]));
+ valueCopy.removeMember("tag");
+
+ if (value.isMember("label"))
+ {
+ snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "label");
+ ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.label, value["label"]));
+ }
+ valueCopy.removeMember("label");
+
+ return ComplexArgumentParser::EnsureNoMembersRemaining(label, valueCopy);
+}
+
+void ComplexArgumentParser::Finalize(chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::Type & request)
+{
+ ComplexArgumentParser::Finalize(request.mfgCode);
+ ComplexArgumentParser::Finalize(request.namespaceID);
+ ComplexArgumentParser::Finalize(request.tag);
+ ComplexArgumentParser::Finalize(request.label);
+}
+
CHIP_ERROR ComplexArgumentParser::Setup(const char * label, chip::app::Clusters::Binding::Structs::TargetStruct::Type & request,
Json::Value & value)
{
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h
index 5e1497359e9742..6a9f327de7492c 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h
@@ -66,6 +66,11 @@ static CHIP_ERROR Setup(const char * label, chip::app::Clusters::Descriptor::Str
static void Finalize(chip::app::Clusters::Descriptor::Structs::DeviceTypeStruct::Type & request);
+static CHIP_ERROR Setup(const char * label, chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::Type & request,
+ Json::Value & value);
+
+static void Finalize(chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::Type & request);
+
static CHIP_ERROR Setup(const char * label, chip::app::Clusters::Binding::Structs::TargetStruct::Type & request,
Json::Value & value);
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
index 721030a021cb71..a26f2ea8bf7c96 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
+++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
@@ -262,6 +262,47 @@ CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
return CHIP_NO_ERROR;
}
+CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
+ const chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::DecodableType & value)
+{
+ DataModelLogger::LogString(label, indent, "{");
+ {
+ CHIP_ERROR err = LogValue("MfgCode", indent + 1, value.mfgCode);
+ if (err != CHIP_NO_ERROR)
+ {
+ DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'MfgCode'");
+ return err;
+ }
+ }
+ {
+ CHIP_ERROR err = LogValue("NamespaceID", indent + 1, value.namespaceID);
+ if (err != CHIP_NO_ERROR)
+ {
+ DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'NamespaceID'");
+ return err;
+ }
+ }
+ {
+ CHIP_ERROR err = LogValue("Tag", indent + 1, value.tag);
+ if (err != CHIP_NO_ERROR)
+ {
+ DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'Tag'");
+ return err;
+ }
+ }
+ {
+ CHIP_ERROR err = LogValue("Label", indent + 1, value.label);
+ if (err != CHIP_NO_ERROR)
+ {
+ DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'Label'");
+ return err;
+ }
+ }
+ DataModelLogger::LogString(indent, "}");
+
+ return CHIP_NO_ERROR;
+}
+
CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
const chip::app::Clusters::Binding::Structs::TargetStruct::DecodableType & value)
{
@@ -5561,6 +5602,11 @@ CHIP_ERROR DataModelLogger::LogAttribute(const chip::app::ConcreteDataAttributeP
ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value));
return DataModelLogger::LogValue("PartsList", 1, value);
}
+ case Descriptor::Attributes::TagList::Id: {
+ chip::app::DataModel::DecodableList value;
+ ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value));
+ return DataModelLogger::LogValue("TagList", 1, value);
+ }
case Descriptor::Attributes::GeneratedCommandList::Id: {
chip::app::DataModel::DecodableList value;
ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value));
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
index 55af7763327fa5..a5fbdc0c4166bf 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
@@ -47,6 +47,9 @@ static CHIP_ERROR LogValue(const char * label, size_t indent,
static CHIP_ERROR LogValue(const char * label, size_t indent,
const chip::app::Clusters::Descriptor::Structs::DeviceTypeStruct::DecodableType & value);
+static CHIP_ERROR LogValue(const char * label, size_t indent,
+ const chip::app::Clusters::Descriptor::Structs::SemanticTagStruct::DecodableType & value);
+
static CHIP_ERROR LogValue(const char * label, size_t indent,
const chip::app::Clusters::Binding::Structs::TargetStruct::DecodableType & value);
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
index bfd09c73fbfee7..41350c5c812c7e 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
@@ -8853,6 +8853,7 @@ class SubscribeAttributePulseWidthModulationClusterRevision : public SubscribeAt
| * ServerList | 0x0001 |
| * ClientList | 0x0002 |
| * PartsList | 0x0003 |
+| * TagList | 0x0004 |
| * GeneratedCommandList | 0xFFF8 |
| * AcceptedCommandList | 0xFFF9 |
| * EventList | 0xFFFA |
@@ -9143,6 +9144,76 @@ class SubscribeAttributeDescriptorPartsList : public SubscribeAttribute {
}
};
+/*
+ * Attribute TagList
+ */
+class ReadDescriptorTagList : public ReadAttribute {
+public:
+ ReadDescriptorTagList()
+ : ReadAttribute("tag-list")
+ {
+ }
+
+ ~ReadDescriptorTagList() {}
+
+ CHIP_ERROR SendCommand(MTRBaseDevice * device, chip::EndpointId endpointId) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x0000001D) ReadAttribute (0x00000004) on endpoint %u", endpointId);
+
+ dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.command", DISPATCH_QUEUE_SERIAL);
+ __auto_type * cluster = [[MTRBaseClusterDescriptor alloc] initWithDevice:device
+ endpointID:@(endpointId)
+ queue:callbackQueue];
+ [cluster readAttributeTagListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable error) {
+ NSLog(@"Descriptor.TagList response %@", [value description]);
+ if (error != nil) {
+ LogNSError("Descriptor TagList read Error", error);
+ }
+ SetCommandExitStatus(error);
+ }];
+ return CHIP_NO_ERROR;
+ }
+};
+
+class SubscribeAttributeDescriptorTagList : public SubscribeAttribute {
+public:
+ SubscribeAttributeDescriptorTagList()
+ : SubscribeAttribute("tag-list")
+ {
+ }
+
+ ~SubscribeAttributeDescriptorTagList() {}
+
+ CHIP_ERROR SendCommand(MTRBaseDevice * device, chip::EndpointId endpointId) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x0000001D) ReportAttribute (0x00000004) on endpoint %u", endpointId);
+ dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.command", DISPATCH_QUEUE_SERIAL);
+ __auto_type * cluster = [[MTRBaseClusterDescriptor alloc] initWithDevice:device
+ endpointID:@(endpointId)
+ queue:callbackQueue];
+ __auto_type * params = [[MTRSubscribeParams alloc] initWithMinInterval:@(mMinInterval) maxInterval:@(mMaxInterval)];
+ if (mKeepSubscriptions.HasValue()) {
+ params.replaceExistingSubscriptions = !mKeepSubscriptions.Value();
+ }
+ if (mFabricFiltered.HasValue()) {
+ params.filterByFabric = mFabricFiltered.Value();
+ }
+ if (mAutoResubscribe.HasValue()) {
+ params.resubscribeAutomatically = mAutoResubscribe.Value();
+ }
+ [cluster subscribeAttributeTagListWithParams:params
+ subscriptionEstablished:^() {
+ mSubscriptionEstablished = YES;
+ }
+ reportHandler:^(NSArray * _Nullable value, NSError * _Nullable error) {
+ NSLog(@"Descriptor.TagList response %@", [value description]);
+ SetCommandExitStatus(error);
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+};
+
/*
* Attribute GeneratedCommandList
*/
@@ -133255,6 +133326,8 @@ void registerClusterDescriptor(Commands & commands)
make_unique(), //
make_unique(), //
make_unique(), //
+ make_unique(), //
+ make_unique(), //
make_unique(), //
make_unique(), //
make_unique(), //