From 82438f5615722989a39ca92ace5f105959efcc59 Mon Sep 17 00:00:00 2001
From: Petru Lauric <81822411+plauric@users.noreply.github.com>
Date: Thu, 15 Jun 2023 11:16:49 -0400
Subject: [PATCH] [Feature] RVC operational state cluster xml (#26989)
* add non-generated code
* add generated files
* Update .github/workflows/tests.yaml
* address code review feedback
* Update src/controller/data_model/BUILD.gn
* Apply suggestions from code review
* add generated code
* Update src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml
* add generated code
* add missing EOL
* address code review feedback
* update the RVC and the generic OpState XMLs
* fix typo + indentation
* enable the stop and start commands in the controller clusters zap file
* add RVC OpState cluster to OpState struct definitions
* remove spaces at the end of the line
---
.github/workflows/tests.yaml | 1 +
.gitignore | 1 +
.../all-clusters-app.matter | 11 +
.../all-clusters-minimal-app.matter | 11 +
.../bridge-common/bridge-app.matter | 11 +
...p_rootnode_dimmablelight_bCwGYSDpoe.matter | 11 +
...de_colortemperaturelight_hbUnzYVeyn.matter | 11 +
.../rootnode_contactsensor_lFAGG1bfRO.matter | 11 +
.../rootnode_dimmablelight_bCwGYSDpoe.matter | 11 +
.../rootnode_doorlock_aNKYAreMXE.matter | 11 +
...tnode_extendedcolorlight_8lcaaYJVAa.matter | 11 +
.../devices/rootnode_fan_7N2TobIlOX.matter | 11 +
.../rootnode_flowsensor_1zVxHedlaV.matter | 11 +
...tnode_heatingcoolingunit_ncdGai1E5a.matter | 11 +
.../rootnode_humiditysensor_Xyj4gda6Hb.matter | 11 +
.../rootnode_lightsensor_lZQycTFcJK.matter | 11 +
...rootnode_occupancysensor_iHyVgifZuo.matter | 11 +
.../rootnode_onofflight_bbs1b7IaOV.matter | 11 +
...ootnode_onofflightswitch_FsPlMr090Q.matter | 11 +
...rootnode_onoffpluginunit_Wtf8ss5EBY.matter | 11 +
.../rootnode_pressuresensor_s0qC9wLH4k.matter | 11 +
.../devices/rootnode_pump_a811bb33a0.matter | 11 +
.../rootnode_speaker_RpzeXdimqA.matter | 11 +
...otnode_temperaturesensor_Qy1zkNW7c3.matter | 11 +
.../rootnode_thermostat_bm3fb8dhYi.matter | 11 +
.../rootnode_windowcovering_RLCxaGi9Yx.matter | 11 +
.../contact-sensor-app.matter | 11 +
.../light-switch-app.matter | 11 +
.../data_model/lighting-app-thread.matter | 11 +
.../data_model/lighting-app-wifi.matter | 11 +
.../lighting-common/lighting-app.matter | 11 +
.../nxp/zap/lighting-on-off.matter | 11 +
examples/lighting-app/qpg/zap/light.matter | 11 +
.../data_model/lighting-thread-app.matter | 11 +
.../data_model/lighting-wifi-app.matter | 11 +
examples/lock-app/lock-common/lock-app.matter | 11 +
examples/lock-app/nxp/zap/lock-app.matter | 11 +
examples/lock-app/qpg/zap/lock.matter | 11 +
.../log-source-common/log-source-app.matter | 11 +
.../ota-provider-app.matter | 11 +
.../ota-requestor-app.matter | 11 +
.../placeholder/linux/apps/app1/config.matter | 11 +
.../placeholder/linux/apps/app2/config.matter | 11 +
examples/pump-app/pump-common/pump-app.matter | 11 +
.../pump-controller-app.matter | 11 +
.../smoke-co-alarm-app.matter | 11 +
.../temperature-measurement.matter | 11 +
.../thermostat-common/thermostat.matter | 11 +
examples/tv-app/tv-common/tv-app.matter | 11 +
.../tv-casting-common/tv-casting-app.matter | 11 +
examples/window-app/common/window-app.matter | 11 +
scripts/rules.matterlint | 1 +
src/app/zap-templates/zcl/data-model/all.xml | 1 +
.../chip/operational-state-cluster.xml | 18 +-
.../chip/operational-state-rvc-cluster.xml | 91 ++
.../zcl/zcl-with-test-extensions.json | 7 +-
src/app/zap-templates/zcl/zcl.json | 7 +-
src/app/zap_cluster_list.json | 1 +
src/controller/data_model/BUILD.gn | 2 +
.../data_model/controller-clusters.matter | 88 +-
.../data_model/controller-clusters.zap | 340 ++++-
.../devicecontroller/ClusterIDMapping.java | 115 ++
.../devicecontroller/ClusterReadMapping.java | 115 ++
.../devicecontroller/ClusterWriteMapping.java | 2 +
.../CHIPAttributeTLVValueDecoder.cpp | 439 ++++++-
.../java/zap-generated/CHIPClientCallbacks.h | 14 +
.../CHIPEventTLVValueDecoder.cpp | 204 ++-
.../zap-generated/CHIPInvokeCallbacks.cpp | 127 +-
.../java/zap-generated/CHIPInvokeCallbacks.h | 16 +
.../java/zap-generated/CHIPReadCallbacks.cpp | 626 +++++++++-
.../chip/devicecontroller/ChipClusters.java | 304 +++++
.../devicecontroller/ChipEventStructs.java | 54 +
.../chip/devicecontroller/ChipIdLookup.java | 51 +
.../chip/devicecontroller/ChipStructs.java | 68 +-
.../devicecontroller/ClusterInfoMapping.java | 228 ++++
.../python/chip/clusters/CHIPClusters.py | 106 ++
.../python/chip/clusters/Objects.py | 416 ++++++-
.../MTRAttributeSpecifiedCheck.mm | 48 +
.../MTRAttributeTLVValueDecoder.mm | 334 ++++-
.../CHIP/zap-generated/MTRBaseClusters.h | 231 ++++
.../CHIP/zap-generated/MTRBaseClusters.mm | 724 +++++++++++
.../zap-generated/MTRBaseClusters_Internal.h | 5 +
.../CHIP/zap-generated/MTRCallbackBridge.h | 475 +++++++
.../CHIP/zap-generated/MTRCallbackBridge.mm | 480 ++++++-
.../CHIP/zap-generated/MTRClusterConstants.h | 32 +
.../CHIP/zap-generated/MTRClusters.h | 77 ++
.../CHIP/zap-generated/MTRClusters.mm | 429 +++++++
.../CHIP/zap-generated/MTRClusters_Internal.h | 5 +
.../zap-generated/MTRCommandPayloadsObjc.h | 132 ++
.../zap-generated/MTRCommandPayloadsObjc.mm | 211 +++-
.../MTRCommandPayloads_Internal.h | 8 +
.../zap-generated/MTREventTLVValueDecoder.mm | 105 +-
.../CHIP/zap-generated/MTRStructsObjc.h | 27 +-
.../CHIP/zap-generated/MTRStructsObjc.mm | 130 +-
.../zap-generated/attributes/Accessors.cpp | 174 +++
.../zap-generated/attributes/Accessors.h | 30 +
.../app-common/zap-generated/callback.h | 109 ++
.../zap-generated/cluster-enums-check.h | 32 +
.../app-common/zap-generated/cluster-enums.h | 34 +
.../zap-generated/cluster-objects.cpp | 370 +++++-
.../zap-generated/cluster-objects.h | 498 +++++++-
.../app-common/zap-generated/ids/Attributes.h | 54 +
.../app-common/zap-generated/ids/Clusters.h | 3 +
.../app-common/zap-generated/ids/Commands.h | 26 +
.../app-common/zap-generated/ids/Events.h | 14 +
.../app-common/zap-generated/print-cluster.h | 8 +
.../zap-generated/cluster/Commands.h | 233 ++++
.../cluster/ComplexArgumentParser.cpp | 147 +--
.../cluster/ComplexArgumentParser.h | 20 +-
.../cluster/logging/DataModelLogger.cpp | 269 +++-
.../cluster/logging/DataModelLogger.h | 21 +-
.../zap-generated/cluster/Commands.h | 1098 +++++++++++++++++
112 files changed, 10214 insertions(+), 361 deletions(-)
create mode 100644 src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 2d641bb21a0e53..47ad5341ac7f4d 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -167,6 +167,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/onoff-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/operational-credentials-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml \
diff --git a/.gitignore b/.gitignore
index 4c17bb63a84a8c..21a01b1000a779 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,4 @@ examples/thermostat/ameba/build
# https://github.com/espressif/idf-component-manager#using-with-a-project
examples/*/esp32/managed_components
examples/*/esp32/dependencies.lock
+examples/all-clusters-app/all-clusters-common/all-clusters-app.zap.old
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 dd8e49f387652d..02d9c1ddec2298 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 ac09d5456eb636..104fa4b1dac252 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter
index 6531edb1e75503..92cadc203dee65 100644
--- a/examples/bridge-app/bridge-common/bridge-app.matter
+++ b/examples/bridge-app/bridge-common/bridge-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
index a458da9d021e37..50a92f95409d58 100644
--- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
index ebc9e4e5486f58..54efa018e7cfa0 100644
--- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
+++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
index 72da64cff277aa..bb701a18ee67f0 100644
--- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
+++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
index c8bbadd07fab6d..c2e5318a739ab1 100644
--- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
index 7280968fb259fc..44034fc276cd9a 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
index a7d53aaeecd93c..b3287ac4d76f5d 100644
--- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
+++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
index 0ad9c02d5cc4c2..7ce96d6a1b79cc 100644
--- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
+++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
index 3aab05c6ace501..cf1217be0a4a81 100644
--- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
+++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
index 0c50e8602406b8..293c6f20d54f28 100644
--- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
+++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
index dbf22aa9b13b97..c92b8e34fd8d89 100644
--- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
+++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
index 8f11a43bf3ac8e..a4ce7b2f50b217 100644
--- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
+++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
index 174d400db5ea1c..2419ff7c662a6b 100644
--- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
+++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
index 7bb540870bd8b6..58b80e234217b1 100644
--- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
+++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
index caffea35361731..75810385dd8bee 100644
--- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
+++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
index 1502efbb5aac49..116c9888f85784 100644
--- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
+++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
index 9deb03484943b1..156127529e8d0b 100644
--- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
+++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_pump_a811bb33a0.matter b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
index 391a6975cd2737..96c4e8ccf06ba9 100644
--- a/examples/chef/devices/rootnode_pump_a811bb33a0.matter
+++ b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
index 17f82500378cd3..f9b2b1a0bf7fed 100644
--- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
+++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
index e04574d866f334..3271ad89c92a0f 100644
--- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
+++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
index b0462727f5b4fc..694dc771797ce9 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
index e4a671aad8c9ad..c2eea25c88feb7 100644
--- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
+++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 18cdf112410294..a7a951c52a0ac2 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 eef00caa037cc2..054967c1f9ec29 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
client cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 d96ec9472c60cc..96ad29d946455b 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 9cfe2296c4c6e0..abea6c297c8826 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter
index e8a2e130590652..4a6f7909a556d7 100644
--- a/examples/lighting-app/lighting-common/lighting-app.matter
+++ b/examples/lighting-app/lighting-common/lighting-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter
index 52db5c7fafafb3..0ae348837f0df0 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.matter
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter
index 41c986eb8e0584..644724d1b7021c 100644
--- a/examples/lighting-app/qpg/zap/light.matter
+++ b/examples/lighting-app/qpg/zap/light.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 35d143b87c10b5..c53787eaf6418e 100644
--- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 f57a222dae038f..65ec6c1f964fd6 100644
--- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter
index f65707d1bf81a7..bbe991722a17f7 100644
--- a/examples/lock-app/lock-common/lock-app.matter
+++ b/examples/lock-app/lock-common/lock-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter
index 1991075fd9bb86..e006c0ff6baf09 100644
--- a/examples/lock-app/nxp/zap/lock-app.matter
+++ b/examples/lock-app/nxp/zap/lock-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter
index a701a908691e9f..77dade82d35019 100644
--- a/examples/lock-app/qpg/zap/lock.matter
+++ b/examples/lock-app/qpg/zap/lock.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/log-source-app/log-source-common/log-source-app.matter b/examples/log-source-app/log-source-common/log-source-app.matter
index 23798cde6f2219..f982536f029c5c 100644
--- a/examples/log-source-app/log-source-common/log-source-app.matter
+++ b/examples/log-source-app/log-source-common/log-source-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** The Access Control Cluster exposes a data model view of a
Node's Access Control List (ACL), which codifies the rules used to manage
and enforce Access Control for the Node's endpoints and their associated
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 60ce28100ca0b7..1048f1f23d986f 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
struct DeviceTypeStruct {
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 79eb0c8f93911d..624a7909f336f4 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter
index 43897ccc850a9f..ced41db421494b 100644
--- a/examples/placeholder/linux/apps/app1/config.matter
+++ b/examples/placeholder/linux/apps/app1/config.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter
index a08f06fd56a176..486524fe426c1b 100644
--- a/examples/placeholder/linux/apps/app2/config.matter
+++ b/examples/placeholder/linux/apps/app2/config.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter
index 06e12a5b21d32d..e43d3afa2ca24c 100644
--- a/examples/pump-app/pump-common/pump-app.matter
+++ b/examples/pump-app/pump-common/pump-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 15b6233cc69855..0025fb8aa63a3c 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 efe45e7e9a6c70..3ceab153db1fa4 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
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 1a2aaab3ae031a..d7a1ec6b003f64 100644
--- a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
+++ b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
struct DeviceTypeStruct {
diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter
index 304de497411237..85fcfa9afbbbdf 100644
--- a/examples/thermostat/thermostat-common/thermostat.matter
+++ b/examples/thermostat/thermostat-common/thermostat.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
client cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter
index c60e578a902dfe..11c4b348cbe8a2 100644
--- a/examples/tv-app/tv-common/tv-app.matter
+++ b/examples/tv-app/tv-common/tv-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for switching devices between 'On' and 'Off' states. */
server cluster OnOff = 6 {
enum OnOffDelayedAllOffEffectVariant : ENUM8 {
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 a2e66c29348bca..559e42c257415c 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
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/examples/window-app/common/window-app.matter b/examples/window-app/common/window-app.matter
index 409aec2feb4ca6..ba4f26b31b963b 100644
--- a/examples/window-app/common/window-app.matter
+++ b/examples/window-app/common/window-app.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
index 69a6cee7f88af0..7134768396864a 100644
--- a/scripts/rules.matterlint
+++ b/scripts/rules.matterlint
@@ -50,6 +50,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/occupancy-sensing-cluster.xml
load "../src/app/zap-templates/zcl/data-model/chip/onoff-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/operational-credentials-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml";
diff --git a/src/app/zap-templates/zcl/data-model/all.xml b/src/app/zap-templates/zcl/data-model/all.xml
index 849921d488c814..7aec7f0f260116 100644
--- a/src/app/zap-templates/zcl/data-model/all.xml
+++ b/src/app/zap-templates/zcl/data-model/all.xml
@@ -49,6 +49,7 @@
+
diff --git a/src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml
index de156b7a726041..e454bbee517ae3 100644
--- a/src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml
@@ -35,15 +35,17 @@ limitations under the License.
-
-
+
+
+
-
-
-
+
+
+
+
@@ -59,10 +61,10 @@ limitations under the License.
PhaseList
CurrentPhase
- CountdownTime
+ CountdownTime
OperationalStateList
OperationalState
- OperationalError
+ OperationalError
Upon receipt, the device SHALL pause its operation if it is possible based on the current function of the server.
@@ -92,7 +94,7 @@ limitations under the License.
OperationCompletion
-
+
diff --git a/src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml
new file mode 100644
index 00000000000000..c568f3f873871f
--- /dev/null
+++ b/src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Robots
+ Robotic Vacuum Operational State
+ 0x0061
+ OPERATIONAL_STATE_RVC_CLUSTER
+ true
+ true
+ This cluster supports remotely monitoring and, where supported, changing the operational state of a Robotic Vacuum.
+
+
+
+ PhaseList
+ CurrentPhase
+ CountdownTime
+ OperationalStateList
+ OperationalState
+ OperationalError
+
+
+ Upon receipt, the device SHALL pause its operation if it is possible based on the current function of the server.
+
+
+
+ Upon receipt, the device SHALL stop its operation if it is at a position where it is safe to do so and/or permitted.
+
+
+
+ Upon receipt, the device SHALL start its operation if it is safe to do so and the device is in an operational state from which it can be started.
+
+
+
+ Upon receipt, the device SHALL resume its operation from the point it was at when it received the Pause command, or from the point when it was paused by means outside of this cluster (for example by manual button press).
+
+
+
+ This command SHALL be generated in response to any of the Start, Stop, Pause, or Resume commands.
+
+
+
+
+ OperationalError
+
+
+
+
+ OperationCompletion
+
+
+
+
+
+
+
diff --git a/src/app/zap-templates/zcl/zcl-with-test-extensions.json b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
index 24be37cd01d7d1..3e52c910fe02d5 100644
--- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json
+++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
@@ -67,6 +67,7 @@
"onoff-switch-configuration-cluster.xml",
"operational-credentials-cluster.xml",
"operational-state-cluster.xml",
+ "operational-state-rvc-cluster.xml",
"pressure-measurement-cluster.xml",
"power-source-cluster.xml",
"power-source-configuration-cluster.xml",
@@ -300,7 +301,11 @@
"LocalTime"
],
"Temperature Control": ["SupportedTemperatureLevels"],
- "Operational State": ["OperationalState", "OperationalError"]
+ "Operational State": ["OperationalState", "OperationalError"],
+ "Robotic Vacuum Operational State": [
+ "OperationalState",
+ "OperationalError"
+ ]
},
"defaultReportingPolicy": "mandatory",
"ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json
index 220ce3a3c9574f..91567280ea4764 100644
--- a/src/app/zap-templates/zcl/zcl.json
+++ b/src/app/zap-templates/zcl/zcl.json
@@ -65,6 +65,7 @@
"onoff-switch-configuration-cluster.xml",
"operational-credentials-cluster.xml",
"operational-state-cluster.xml",
+ "operational-state-rvc-cluster.xml",
"pressure-measurement-cluster.xml",
"power-source-cluster.xml",
"power-source-configuration-cluster.xml",
@@ -298,7 +299,11 @@
"LocalTime"
],
"Temperature Control": ["SupportedTemperatureLevels"],
- "Operational State": ["OperationalState", "OperationalError"]
+ "Operational State": ["OperationalState", "OperationalError"],
+ "Robotic Vacuum Operational State": [
+ "OperationalState",
+ "OperationalError"
+ ]
},
"defaultReportingPolicy": "mandatory",
"ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json
index ae3c9ff51732e2..0e7b0c1593cd6a 100644
--- a/src/app/zap_cluster_list.json
+++ b/src/app/zap_cluster_list.json
@@ -84,6 +84,7 @@
"ON_OFF_SWITCH_CONFIGURATION_CLUSTER": [],
"OPERATIONAL_CREDENTIALS_CLUSTER": [],
"OPERATIONAL_STATE_CLUSTER": [],
+ "OPERATIONAL_STATE_RVC_CLUSTER": [],
"OTA_BOOTLOAD_CLUSTER": [],
"OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER": [],
"OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER": [],
diff --git a/src/controller/data_model/BUILD.gn b/src/controller/data_model/BUILD.gn
index 88eee715a7f08f..698c950b3b81d0 100644
--- a/src/controller/data_model/BUILD.gn
+++ b/src/controller/data_model/BUILD.gn
@@ -242,6 +242,8 @@ if (current_os == "android" || matter_enable_java_compilation) {
"jni/RefrigeratorAndTemperatureControlledCabinetModeSelectClient-ReadImpl.cpp",
"jni/RelativeHumidityMeasurementClient-InvokeSubscribeImpl.cpp",
"jni/RelativeHumidityMeasurementClient-ReadImpl.cpp",
+ "jni/RoboticVacuumOperationalStateClient-InvokeSubscribeImpl.cpp",
+ "jni/RoboticVacuumOperationalStateClient-ReadImpl.cpp",
"jni/RvcCleanModeSelectClient-InvokeSubscribeImpl.cpp",
"jni/RvcCleanModeSelectClient-ReadImpl.cpp",
"jni/RvcRunModeSelectClient-InvokeSubscribeImpl.cpp",
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 8515fe3b3d9d41..2da11212f13c50 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -18,11 +18,22 @@ struct ApplicationStruct {
char_string applicationID = 1;
}
+struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+}
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
}
+struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+}
+
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
client cluster Identify = 3 {
enum EffectIdentifierEnum : ENUM8 {
@@ -3357,14 +3368,81 @@ client cluster OperationalState = 96 {
}
struct ErrorStateStruct {
- ErrorStateEnum errorStateID = 0;
- nullable char_string<64> errorStateLabel = 1;
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
+ optional char_string<64> errorStateDetails = 2;
+ }
+
+ struct OperationalStateStruct {
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
+ }
+
+ critical event OperationalError = 0 {
+ ErrorStateStruct errorState = 0;
+ }
+
+ info event OperationCompletion = 1 {
+ ENUM8 completionErrorCode = 0;
+ optional nullable elapsed_s totalOperationalTime = 1;
+ optional nullable elapsed_s pausedTime = 2;
+ }
+
+ readonly attribute nullable CHAR_STRING phaseList[] = 0;
+ readonly attribute nullable int8u currentPhase = 1;
+ readonly attribute optional nullable elapsed_s countdownTime = 2;
+ readonly attribute OperationalStateStruct operationalStateList[] = 3;
+ readonly attribute OperationalStateStruct operationalState = 4;
+ readonly attribute ErrorStateStruct operationalError = 5;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ response struct OperationalCommandResponse = 4 {
+ ErrorStateStruct commandResponseState = 0;
+ }
+
+ /** Upon receipt, the device SHALL pause its operation if it is possible based on the current function of the server. */
+ command Pause(): OperationalCommandResponse = 0;
+ /** Upon receipt, the device SHALL stop its operation if it is at a position where it is safe to do so and/or permitted. */
+ command Stop(): OperationalCommandResponse = 1;
+ /** Upon receipt, the device SHALL start its operation if it is safe to do so and the device is in an operational state from which it can be started. */
+ command Start(): OperationalCommandResponse = 2;
+ /** Upon receipt, the device SHALL resume its operation from the point it was at when it received the Pause command, or from the point when it was paused by means outside of this cluster (for example by manual button press). */
+ command Resume(): OperationalCommandResponse = 3;
+}
+
+/** This cluster supports remotely monitoring and, where supported, changing the operational state of a Robotic Vacuum. */
+client cluster RoboticVacuumOperationalState = 97 {
+ enum ErrorStateEnum : ENUM8 {
+ kFailedToFindChargingDock = 64;
+ kStuck = 65;
+ kDustBinMissing = 66;
+ kDustBinFull = 67;
+ kWaterTankEmpty = 68;
+ kWaterTankMissing = 69;
+ kWaterTankLidOpen = 70;
+ kMopCleaningPadMissing = 71;
+ }
+
+ enum OperationalStateEnum : ENUM8 {
+ kSeekingCharger = 64;
+ kCharging = 65;
+ kDocked = 66;
+ }
+
+ struct ErrorStateStruct {
+ enum8 errorStateID = 0;
+ optional char_string<64> errorStateLabel = 1;
optional char_string<64> errorStateDetails = 2;
}
struct OperationalStateStruct {
- OperationalStateEnum operationalStateID = 0;
- char_string<64> operationalStateLabel = 1;
+ enum8 operationalStateID = 0;
+ optional char_string<64> operationalStateLabel = 1;
}
critical event OperationalError = 0 {
@@ -3372,7 +3450,7 @@ client cluster OperationalState = 96 {
}
info event OperationCompletion = 1 {
- ErrorStateEnum completionErrorCode = 0;
+ ENUM8 completionErrorCode = 0;
optional nullable elapsed_s totalOperationalTime = 1;
optional nullable elapsed_s pausedTime = 2;
}
diff --git a/src/controller/data_model/controller-clusters.zap b/src/controller/data_model/controller-clusters.zap
index c393c9e320bc7f..238e6e3cd83233 100644
--- a/src/controller/data_model/controller-clusters.zap
+++ b/src/controller/data_model/controller-clusters.zap
@@ -11292,7 +11292,7 @@
"side": "server",
"type": "array",
"included": 0,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11356,7 +11356,7 @@
"side": "server",
"type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11372,7 +11372,7 @@
"side": "server",
"type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11388,7 +11388,7 @@
"side": "server",
"type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11404,7 +11404,7 @@
"side": "server",
"type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11966,16 +11966,6 @@
"define": "REFRIGERATOR_ALARM",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "Reset",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -12035,22 +12025,6 @@
"maxInterval": 65534,
"reportableChange": 0
},
- {
- "name": "Latch",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "AlarmMap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
{
"name": "State",
"code": 2,
@@ -13179,6 +13153,310 @@
}
]
},
+ {
+ "name": "Robotic Vacuum Operational State",
+ "code": 97,
+ "mfgCode": null,
+ "define": "OPERATIONAL_STATE_RVC_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Pause",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "Stop",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "Start",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "Resume",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "client",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Robotic Vacuum Operational State",
+ "code": 97,
+ "mfgCode": null,
+ "define": "OPERATIONAL_STATE_RVC_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "OperationalCommandResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
+ {
+ "name": "PhaseList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentPhase",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CountdownTime",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "elapsed_s",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OperationalStateList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OperationalState",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "OperationalStateStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OperationalError",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "ErrorStateStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "OperationalError",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "OperationCompletion",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
{
"name": "HEPA Filter Monitoring",
"code": 113,
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
index f95bd3e9867c45..9b988ead4d2a73 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
@@ -187,6 +187,9 @@ public static BaseCluster getCluster(long clusterId) {
if (clusterId == OperationalState.ID) {
return new OperationalState();
}
+ if (clusterId == RoboticVacuumOperationalState.ID) {
+ return new RoboticVacuumOperationalState();
+ }
if (clusterId == HepaFilterMonitoring.ID) {
return new HepaFilterMonitoring();
}
@@ -7706,6 +7709,118 @@ public long getCommandID(String name) throws IllegalArgumentException {
return Command.valueOf(name).getID();
}
}
+ public static class RoboticVacuumOperationalState implements BaseCluster {
+ public static final long ID = 97L;
+ public long getID() {
+ return ID;
+ }
+
+ public enum Attribute {
+ PhaseList(0L),
+ CurrentPhase(1L),
+ CountdownTime(2L),
+ OperationalStateList(3L),
+ OperationalState(4L),
+ OperationalError(5L),
+ GeneratedCommandList(65528L),
+ AcceptedCommandList(65529L),
+ EventList(65530L),
+ AttributeList(65531L),
+ FeatureMap(65532L),
+ ClusterRevision(65533L),;
+ private final long id;
+ Attribute(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Attribute value(long id) throws NoSuchFieldError {
+ for (Attribute attribute : Attribute.values()) {
+ if (attribute.getID() == id) {
+ return attribute;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Event {
+ OperationalError(0L),
+ OperationCompletion(1L),;
+ private final long id;
+ Event(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Event value(long id) throws NoSuchFieldError {
+ for (Event event : Event.values()) {
+ if (event.getID() == id) {
+ return event;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Command {
+ Pause(0L),
+ Stop(1L),
+ Start(2L),
+ Resume(3L),;
+ private final long id;
+ Command(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Command value(long id) throws NoSuchFieldError {
+ for (Command command : Command.values()) {
+ if (command.getID() == id) {
+ return command;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }@Override
+ public String getAttributeName(long id) throws NoSuchFieldError {
+ return Attribute.value(id).toString();
+ }
+
+ @Override
+ public String getEventName(long id) throws NoSuchFieldError {
+ return Event.value(id).toString();
+ }
+
+ @Override
+ public String getCommandName(long id) throws NoSuchFieldError {
+ return Command.value(id).toString();
+ }
+
+ @Override
+ public long getAttributeID(String name) throws IllegalArgumentException {
+ return Attribute.valueOf(name).getID();
+ }
+
+ @Override
+ public long getEventID(String name) throws IllegalArgumentException {
+ return Event.valueOf(name).getID();
+ }
+
+ @Override
+ public long getCommandID(String name) throws IllegalArgumentException {
+ return Command.valueOf(name).getID();
+ }
+ }
public static class HepaFilterMonitoring implements BaseCluster {
public static final long ID = 113L;
public long getID() {
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
index 40a742a4b047ad..5b67e5c2e3247b 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -7420,6 +7420,120 @@ private static Map readOperationalStateInteractionInfo(
return result;
}
+ private static Map readRoboticVacuumOperationalStateInteractionInfo() {
+ Map result = new LinkedHashMap<>();Map readRoboticVacuumOperationalStatePhaseListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStatePhaseListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readPhaseListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.PhaseListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterPhaseListAttributeCallback(),
+ readRoboticVacuumOperationalStatePhaseListCommandParams
+ );
+ result.put("readPhaseListAttribute", readRoboticVacuumOperationalStatePhaseListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateCurrentPhaseCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateCurrentPhaseAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readCurrentPhaseAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.CurrentPhaseAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterCurrentPhaseAttributeCallback(),
+ readRoboticVacuumOperationalStateCurrentPhaseCommandParams
+ );
+ result.put("readCurrentPhaseAttribute", readRoboticVacuumOperationalStateCurrentPhaseAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateCountdownTimeCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateCountdownTimeAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readCountdownTimeAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.CountdownTimeAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterCountdownTimeAttributeCallback(),
+ readRoboticVacuumOperationalStateCountdownTimeCommandParams
+ );
+ result.put("readCountdownTimeAttribute", readRoboticVacuumOperationalStateCountdownTimeAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateOperationalStateListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateOperationalStateListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readOperationalStateListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.OperationalStateListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterOperationalStateListAttributeCallback(),
+ readRoboticVacuumOperationalStateOperationalStateListCommandParams
+ );
+ result.put("readOperationalStateListAttribute", readRoboticVacuumOperationalStateOperationalStateListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateGeneratedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readGeneratedCommandListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.GeneratedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterGeneratedCommandListAttributeCallback(),
+ readRoboticVacuumOperationalStateGeneratedCommandListCommandParams
+ );
+ result.put("readGeneratedCommandListAttribute", readRoboticVacuumOperationalStateGeneratedCommandListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateAcceptedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateAcceptedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readAcceptedCommandListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.AcceptedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterAcceptedCommandListAttributeCallback(),
+ readRoboticVacuumOperationalStateAcceptedCommandListCommandParams
+ );
+ result.put("readAcceptedCommandListAttribute", readRoboticVacuumOperationalStateAcceptedCommandListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateEventListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateEventListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readEventListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.EventListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterEventListAttributeCallback(),
+ readRoboticVacuumOperationalStateEventListCommandParams
+ );
+ result.put("readEventListAttribute", readRoboticVacuumOperationalStateEventListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateAttributeListCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateAttributeListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readAttributeListAttribute(
+ (ChipClusters.RoboticVacuumOperationalStateCluster.AttributeListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedRoboticVacuumOperationalStateClusterAttributeListAttributeCallback(),
+ readRoboticVacuumOperationalStateAttributeListCommandParams
+ );
+ result.put("readAttributeListAttribute", readRoboticVacuumOperationalStateAttributeListAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateFeatureMapCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateFeatureMapAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readFeatureMapAttribute(
+ (ChipClusters.LongAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedLongAttributeCallback(),
+ readRoboticVacuumOperationalStateFeatureMapCommandParams
+ );
+ result.put("readFeatureMapAttribute", readRoboticVacuumOperationalStateFeatureMapAttributeInteractionInfo);
+ Map readRoboticVacuumOperationalStateClusterRevisionCommandParams = new LinkedHashMap();
+ InteractionInfo readRoboticVacuumOperationalStateClusterRevisionAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster).readClusterRevisionAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readRoboticVacuumOperationalStateClusterRevisionCommandParams
+ );
+ result.put("readClusterRevisionAttribute", readRoboticVacuumOperationalStateClusterRevisionAttributeInteractionInfo);
+
+ return result;
+ }
private static Map readHepaFilterMonitoringInteractionInfo() {
Map result = new LinkedHashMap<>();Map readHepaFilterMonitoringConditionCommandParams = new LinkedHashMap();
InteractionInfo readHepaFilterMonitoringConditionAttributeInteractionInfo = new InteractionInfo(
@@ -23222,6 +23336,7 @@ public Map> getReadAttributeMap() {
put("airQuality", readAirQualityInteractionInfo());
put("smokeCoAlarm", readSmokeCoAlarmInteractionInfo());
put("operationalState", readOperationalStateInteractionInfo());
+ put("roboticVacuumOperationalState", readRoboticVacuumOperationalStateInteractionInfo());
put("hepaFilterMonitoring", readHepaFilterMonitoringInteractionInfo());
put("activatedCarbonFilterMonitoring", readActivatedCarbonFilterMonitoringInteractionInfo());
put("ceramicFilterMonitoring", readCeramicFilterMonitoringInteractionInfo());
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
index 3028e3525125f5..659c5d0ee3dc1d 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
@@ -1078,6 +1078,8 @@ public Map> getWriteAttributeMap() {
writeAttributeMap.put("smokeCoAlarm", writeSmokeCoAlarmInteractionInfo);
Map writeOperationalStateInteractionInfo = new LinkedHashMap<>();
writeAttributeMap.put("operationalState", writeOperationalStateInteractionInfo);
+ Map writeRoboticVacuumOperationalStateInteractionInfo = new LinkedHashMap<>();
+ writeAttributeMap.put("roboticVacuumOperationalState", writeRoboticVacuumOperationalStateInteractionInfo);
Map writeHepaFilterMonitoringInteractionInfo = new LinkedHashMap<>();
writeAttributeMap.put("hepaFilterMonitoring", writeHepaFilterMonitoringInteractionInfo);
Map writeActivatedCarbonFilterMonitoringInteractionInfo = new LinkedHashMap<>();
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index 0248cc27172020..615c368c0707c8 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -15011,10 +15011,20 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
std::string newElement_0_operationalStateIDCtorSignature = "(I)V";
chip::JniReferences::GetInstance().CreateBoxedObject(
newElement_0_operationalStateIDClassName.c_str(), newElement_0_operationalStateIDCtorSignature.c_str(),
- static_cast(entry_0.operationalStateID), newElement_0_operationalStateID);
+ entry_0.operationalStateID, newElement_0_operationalStateID);
jobject newElement_0_operationalStateLabel;
- LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.operationalStateLabel,
- newElement_0_operationalStateLabel));
+ if (!entry_0.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_operationalStateLabel);
+ }
+ else
+ {
+ jobject newElement_0_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ entry_0.operationalStateLabel.Value(), newElement_0_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_operationalStateLabelInsideOptional,
+ newElement_0_operationalStateLabel);
+ }
jclass operationalStateStructStructClass_1;
err = chip::JniReferences::GetInstance().GetClassRef(
@@ -15026,7 +15036,7 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
return nullptr;
}
jmethodID operationalStateStructStructCtor_1 =
- env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/lang/String;)V");
+ env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
if (operationalStateStructStructCtor_1 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterOperationalStateStruct constructor");
@@ -15051,12 +15061,22 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
jobject value_operationalStateID;
std::string value_operationalStateIDClassName = "java/lang/Integer";
std::string value_operationalStateIDCtorSignature = "(I)V";
- chip::JniReferences::GetInstance().CreateBoxedObject(
- value_operationalStateIDClassName.c_str(), value_operationalStateIDCtorSignature.c_str(),
- static_cast(cppValue.operationalStateID), value_operationalStateID);
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_operationalStateIDClassName.c_str(),
+ value_operationalStateIDCtorSignature.c_str(),
+ cppValue.operationalStateID, value_operationalStateID);
jobject value_operationalStateLabel;
- LogErrorOnFailure(
- chip::JniReferences::GetInstance().CharToStringUTF(cppValue.operationalStateLabel, value_operationalStateLabel));
+ if (!cppValue.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_operationalStateLabel);
+ }
+ else
+ {
+ jobject value_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.operationalStateLabel.Value(),
+ value_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_operationalStateLabelInsideOptional,
+ value_operationalStateLabel);
+ }
jclass operationalStateStructStructClass_0;
err = chip::JniReferences::GetInstance().GetClassRef(
@@ -15068,7 +15088,7 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
return nullptr;
}
jmethodID operationalStateStructStructCtor_0 =
- env->GetMethodID(operationalStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/lang/String;)V");
+ env->GetMethodID(operationalStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
if (operationalStateStructStructCtor_0 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterOperationalStateStruct constructor");
@@ -15091,18 +15111,20 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
jobject value_errorStateID;
std::string value_errorStateIDClassName = "java/lang/Integer";
std::string value_errorStateIDCtorSignature = "(I)V";
- chip::JniReferences::GetInstance().CreateBoxedObject(
- value_errorStateIDClassName.c_str(), value_errorStateIDCtorSignature.c_str(),
- static_cast(cppValue.errorStateID), value_errorStateID);
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_errorStateIDClassName.c_str(),
+ value_errorStateIDCtorSignature.c_str(),
+ cppValue.errorStateID, value_errorStateID);
jobject value_errorStateLabel;
- if (cppValue.errorStateLabel.IsNull())
+ if (!cppValue.errorStateLabel.HasValue())
{
- value_errorStateLabel = nullptr;
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorStateLabel);
}
else
{
- LogErrorOnFailure(
- chip::JniReferences::GetInstance().CharToStringUTF(cppValue.errorStateLabel.Value(), value_errorStateLabel));
+ jobject value_errorStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.errorStateLabel.Value(),
+ value_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorStateLabelInsideOptional, value_errorStateLabel);
}
jobject value_errorStateDetails;
if (!cppValue.errorStateDetails.HasValue())
@@ -15126,7 +15148,7 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
return nullptr;
}
jmethodID errorStateStructStructCtor_0 = env->GetMethodID(
- errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Optional;)V");
+ errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
if (errorStateStructStructCtor_0 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterErrorStateStruct constructor");
@@ -15269,6 +15291,387 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
}
break;
}
+ case app::Clusters::RoboticVacuumOperationalState::Id: {
+ using namespace app::Clusters::RoboticVacuumOperationalState;
+ switch (aPath.mAttributeId)
+ {
+ case Attributes::PhaseList::Id: {
+ using TypeInfo = Attributes::PhaseList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ if (cppValue.IsNull())
+ {
+ value = nullptr;
+ }
+ else
+ {
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_1 = cppValue.Value().begin();
+ while (iter_value_1.Next())
+ {
+ auto & entry_1 = iter_value_1.GetValue();
+ jobject newElement_1;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_1, newElement_1));
+ chip::JniReferences::GetInstance().AddToList(value, newElement_1);
+ }
+ }
+ return value;
+ }
+ case Attributes::CurrentPhase::Id: {
+ using TypeInfo = Attributes::CurrentPhase::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ if (cppValue.IsNull())
+ {
+ value = nullptr;
+ }
+ else
+ {
+ std::string valueClassName = "java/lang/Integer";
+ std::string valueCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(),
+ cppValue.Value(), value);
+ }
+ return value;
+ }
+ case Attributes::CountdownTime::Id: {
+ using TypeInfo = Attributes::CountdownTime::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ if (cppValue.IsNull())
+ {
+ value = nullptr;
+ }
+ else
+ {
+ std::string valueClassName = "java/lang/Long";
+ std::string valueCtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(),
+ cppValue.Value(), value);
+ }
+ return value;
+ }
+ case Attributes::OperationalStateList::Id: {
+ using TypeInfo = Attributes::OperationalStateList::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_operationalStateID;
+ std::string newElement_0_operationalStateIDClassName = "java/lang/Integer";
+ std::string newElement_0_operationalStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_operationalStateIDClassName.c_str(), newElement_0_operationalStateIDCtorSignature.c_str(),
+ entry_0.operationalStateID, newElement_0_operationalStateID);
+ jobject newElement_0_operationalStateLabel;
+ if (!entry_0.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_operationalStateLabel);
+ }
+ else
+ {
+ jobject newElement_0_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ entry_0.operationalStateLabel.Value(), newElement_0_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_operationalStateLabelInsideOptional,
+ newElement_0_operationalStateLabel);
+ }
+
+ jclass operationalStateStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct",
+ operationalStateStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl,
+ "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct");
+ return nullptr;
+ }
+ jmethodID operationalStateStructStructCtor_1 =
+ env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
+ if (operationalStateStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(
+ Zcl, "Could not find ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct constructor");
+ return nullptr;
+ }
+
+ newElement_0 = env->NewObject(operationalStateStructStructClass_1, operationalStateStructStructCtor_1,
+ newElement_0_operationalStateID, newElement_0_operationalStateLabel);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::OperationalState::Id: {
+ using TypeInfo = Attributes::OperationalState::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ jobject value_operationalStateID;
+ std::string value_operationalStateIDClassName = "java/lang/Integer";
+ std::string value_operationalStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_operationalStateIDClassName.c_str(),
+ value_operationalStateIDCtorSignature.c_str(),
+ cppValue.operationalStateID, value_operationalStateID);
+ jobject value_operationalStateLabel;
+ if (!cppValue.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_operationalStateLabel);
+ }
+ else
+ {
+ jobject value_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.operationalStateLabel.Value(),
+ value_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_operationalStateLabelInsideOptional,
+ value_operationalStateLabel);
+ }
+
+ jclass operationalStateStructStructClass_0;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct",
+ operationalStateStructStructClass_0);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct");
+ return nullptr;
+ }
+ jmethodID operationalStateStructStructCtor_0 =
+ env->GetMethodID(operationalStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
+ if (operationalStateStructStructCtor_0 == nullptr)
+ {
+ ChipLogError(Zcl,
+ "Could not find ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct constructor");
+ return nullptr;
+ }
+
+ value = env->NewObject(operationalStateStructStructClass_0, operationalStateStructStructCtor_0,
+ value_operationalStateID, value_operationalStateLabel);
+ return value;
+ }
+ case Attributes::OperationalError::Id: {
+ using TypeInfo = Attributes::OperationalError::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ jobject value_errorStateID;
+ std::string value_errorStateIDClassName = "java/lang/Integer";
+ std::string value_errorStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_errorStateIDClassName.c_str(),
+ value_errorStateIDCtorSignature.c_str(),
+ cppValue.errorStateID, value_errorStateID);
+ jobject value_errorStateLabel;
+ if (!cppValue.errorStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorStateLabel);
+ }
+ else
+ {
+ jobject value_errorStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.errorStateLabel.Value(),
+ value_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorStateLabelInsideOptional, value_errorStateLabel);
+ }
+ jobject value_errorStateDetails;
+ if (!cppValue.errorStateDetails.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorStateDetails);
+ }
+ else
+ {
+ jobject value_errorStateDetailsInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.errorStateDetails.Value(),
+ value_errorStateDetailsInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorStateDetailsInsideOptional, value_errorStateDetails);
+ }
+
+ jclass errorStateStructStructClass_0;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct",
+ errorStateStructStructClass_0);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct");
+ return nullptr;
+ }
+ jmethodID errorStateStructStructCtor_0 = env->GetMethodID(
+ errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
+ if (errorStateStructStructCtor_0 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct constructor");
+ return nullptr;
+ }
+
+ value = env->NewObject(errorStateStructStructClass_0, errorStateStructStructCtor_0, value_errorStateID,
+ value_errorStateLabel, value_errorStateDetails);
+ return value;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ using TypeInfo = Attributes::GeneratedCommandList::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::AcceptedCommandList::Id: {
+ using TypeInfo = Attributes::AcceptedCommandList::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::EventList::Id: {
+ using TypeInfo = Attributes::EventList::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::AttributeList::Id: {
+ using TypeInfo = Attributes::AttributeList::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::FeatureMap::Id: {
+ using TypeInfo = Attributes::FeatureMap::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ std::string valueClassName = "java/lang/Long";
+ std::string valueCtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(),
+ cppValue, value);
+ return value;
+ }
+ case Attributes::ClusterRevision::Id: {
+ using TypeInfo = Attributes::ClusterRevision::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ std::string valueClassName = "java/lang/Integer";
+ std::string valueCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(),
+ cppValue, value);
+ return value;
+ }
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::HepaFilterMonitoring::Id: {
using namespace app::Clusters::HepaFilterMonitoring;
switch (aPath.mAttributeId)
diff --git a/src/controller/java/zap-generated/CHIPClientCallbacks.h b/src/controller/java/zap-generated/CHIPClientCallbacks.h
index b7537c2e38ad24..0c5b959a478e20 100644
--- a/src/controller/java/zap-generated/CHIPClientCallbacks.h
+++ b/src/controller/java/zap-generated/CHIPClientCallbacks.h
@@ -594,6 +594,20 @@ typedef void (*OperationalStateEventListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
typedef void (*OperationalStateAttributeListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*RoboticVacuumOperationalStatePhaseListListAttributeCallback)(
+ void * context, const chip::app::DataModel::Nullable> & data);
+typedef void (*RoboticVacuumOperationalStateOperationalStateListListAttributeCallback)(
+ void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::RoboticVacuumOperationalState::Structs::OperationalStateStruct::DecodableType> & data);
+typedef void (*RoboticVacuumOperationalStateGeneratedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*RoboticVacuumOperationalStateAcceptedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*RoboticVacuumOperationalStateEventListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*RoboticVacuumOperationalStateAttributeListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*HepaFilterMonitoringGeneratedCommandListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*HepaFilterMonitoringAcceptedCommandListListAttributeCallback)(
diff --git a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
index 03ebc2ef9083f4..79f848d427a08b 100644
--- a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
@@ -2883,16 +2883,19 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
std::string value_errorState_errorStateIDCtorSignature = "(I)V";
chip::JniReferences::GetInstance().CreateBoxedObject(
value_errorState_errorStateIDClassName.c_str(), value_errorState_errorStateIDCtorSignature.c_str(),
- static_cast(cppValue.errorState.errorStateID), value_errorState_errorStateID);
+ cppValue.errorState.errorStateID, value_errorState_errorStateID);
jobject value_errorState_errorStateLabel;
- if (cppValue.errorState.errorStateLabel.IsNull())
+ if (!cppValue.errorState.errorStateLabel.HasValue())
{
- value_errorState_errorStateLabel = nullptr;
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorState_errorStateLabel);
}
else
{
- LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(cppValue.errorState.errorStateLabel.Value(),
- value_errorState_errorStateLabel));
+ jobject value_errorState_errorStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ cppValue.errorState.errorStateLabel.Value(), value_errorState_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorState_errorStateLabelInsideOptional,
+ value_errorState_errorStateLabel);
}
jobject value_errorState_errorStateDetails;
if (!cppValue.errorState.errorStateDetails.HasValue())
@@ -2917,7 +2920,7 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
return nullptr;
}
jmethodID errorStateStructStructCtor_0 = env->GetMethodID(
- errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Optional;)V");
+ errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
if (errorStateStructStructCtor_0 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterErrorStateStruct constructor");
@@ -2960,9 +2963,9 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
jobject value_completionErrorCode;
std::string value_completionErrorCodeClassName = "java/lang/Integer";
std::string value_completionErrorCodeCtorSignature = "(I)V";
- chip::JniReferences::GetInstance().CreateBoxedObject(
- value_completionErrorCodeClassName.c_str(), value_completionErrorCodeCtorSignature.c_str(),
- static_cast(cppValue.completionErrorCode), value_completionErrorCode);
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_completionErrorCodeClassName.c_str(),
+ value_completionErrorCodeCtorSignature.c_str(),
+ cppValue.completionErrorCode, value_completionErrorCode);
jobject value_totalOperationalTime;
if (!cppValue.totalOperationalTime.HasValue())
@@ -3040,6 +3043,189 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
}
break;
}
+ case app::Clusters::RoboticVacuumOperationalState::Id: {
+ using namespace app::Clusters::RoboticVacuumOperationalState;
+ switch (aPath.mEventId)
+ {
+ case Events::OperationalError::Id: {
+ Events::OperationalError::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value_errorState;
+ jobject value_errorState_errorStateID;
+ std::string value_errorState_errorStateIDClassName = "java/lang/Integer";
+ std::string value_errorState_errorStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ value_errorState_errorStateIDClassName.c_str(), value_errorState_errorStateIDCtorSignature.c_str(),
+ cppValue.errorState.errorStateID, value_errorState_errorStateID);
+ jobject value_errorState_errorStateLabel;
+ if (!cppValue.errorState.errorStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorState_errorStateLabel);
+ }
+ else
+ {
+ jobject value_errorState_errorStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ cppValue.errorState.errorStateLabel.Value(), value_errorState_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorState_errorStateLabelInsideOptional,
+ value_errorState_errorStateLabel);
+ }
+ jobject value_errorState_errorStateDetails;
+ if (!cppValue.errorState.errorStateDetails.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_errorState_errorStateDetails);
+ }
+ else
+ {
+ jobject value_errorState_errorStateDetailsInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ cppValue.errorState.errorStateDetails.Value(), value_errorState_errorStateDetailsInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(value_errorState_errorStateDetailsInsideOptional,
+ value_errorState_errorStateDetails);
+ }
+
+ jclass errorStateStructStructClass_0;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct",
+ errorStateStructStructClass_0);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct");
+ return nullptr;
+ }
+ jmethodID errorStateStructStructCtor_0 = env->GetMethodID(
+ errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
+ if (errorStateStructStructCtor_0 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct constructor");
+ return nullptr;
+ }
+
+ value_errorState =
+ env->NewObject(errorStateStructStructClass_0, errorStateStructStructCtor_0, value_errorState_errorStateID,
+ value_errorState_errorStateLabel, value_errorState_errorStateDetails);
+
+ jclass operationalErrorStructClass;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipEventStructs$RoboticVacuumOperationalStateClusterOperationalErrorEvent",
+ operationalErrorStructClass);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl,
+ "Could not find class ChipEventStructs$RoboticVacuumOperationalStateClusterOperationalErrorEvent");
+ return nullptr;
+ }
+ jmethodID operationalErrorStructCtor =
+ env->GetMethodID(operationalErrorStructClass, "",
+ "(Lchip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct;)V");
+ if (operationalErrorStructCtor == nullptr)
+ {
+ ChipLogError(
+ Zcl, "Could not find ChipEventStructs$RoboticVacuumOperationalStateClusterOperationalErrorEvent constructor");
+ return nullptr;
+ }
+
+ jobject value = env->NewObject(operationalErrorStructClass, operationalErrorStructCtor, value_errorState);
+
+ return value;
+ }
+ case Events::OperationCompletion::Id: {
+ Events::OperationCompletion::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value_completionErrorCode;
+ std::string value_completionErrorCodeClassName = "java/lang/Integer";
+ std::string value_completionErrorCodeCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(value_completionErrorCodeClassName.c_str(),
+ value_completionErrorCodeCtorSignature.c_str(),
+ cppValue.completionErrorCode, value_completionErrorCode);
+
+ jobject value_totalOperationalTime;
+ if (!cppValue.totalOperationalTime.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_totalOperationalTime);
+ }
+ else
+ {
+ jobject value_totalOperationalTimeInsideOptional;
+ if (cppValue.totalOperationalTime.Value().IsNull())
+ {
+ value_totalOperationalTimeInsideOptional = nullptr;
+ }
+ else
+ {
+ std::string value_totalOperationalTimeInsideOptionalClassName = "java/lang/Long";
+ std::string value_totalOperationalTimeInsideOptionalCtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ value_totalOperationalTimeInsideOptionalClassName.c_str(),
+ value_totalOperationalTimeInsideOptionalCtorSignature.c_str(),
+ cppValue.totalOperationalTime.Value().Value(), value_totalOperationalTimeInsideOptional);
+ }
+ chip::JniReferences::GetInstance().CreateOptional(value_totalOperationalTimeInsideOptional,
+ value_totalOperationalTime);
+ }
+
+ jobject value_pausedTime;
+ if (!cppValue.pausedTime.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, value_pausedTime);
+ }
+ else
+ {
+ jobject value_pausedTimeInsideOptional;
+ if (cppValue.pausedTime.Value().IsNull())
+ {
+ value_pausedTimeInsideOptional = nullptr;
+ }
+ else
+ {
+ std::string value_pausedTimeInsideOptionalClassName = "java/lang/Long";
+ std::string value_pausedTimeInsideOptionalCtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ value_pausedTimeInsideOptionalClassName.c_str(), value_pausedTimeInsideOptionalCtorSignature.c_str(),
+ cppValue.pausedTime.Value().Value(), value_pausedTimeInsideOptional);
+ }
+ chip::JniReferences::GetInstance().CreateOptional(value_pausedTimeInsideOptional, value_pausedTime);
+ }
+
+ jclass operationCompletionStructClass;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipEventStructs$RoboticVacuumOperationalStateClusterOperationCompletionEvent",
+ operationCompletionStructClass);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl,
+ "Could not find class ChipEventStructs$RoboticVacuumOperationalStateClusterOperationCompletionEvent");
+ return nullptr;
+ }
+ jmethodID operationCompletionStructCtor = env->GetMethodID(
+ operationCompletionStructClass, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
+ if (operationCompletionStructCtor == nullptr)
+ {
+ ChipLogError(
+ Zcl,
+ "Could not find ChipEventStructs$RoboticVacuumOperationalStateClusterOperationCompletionEvent constructor");
+ return nullptr;
+ }
+
+ jobject value = env->NewObject(operationCompletionStructClass, operationCompletionStructCtor, value_completionErrorCode,
+ value_totalOperationalTime, value_pausedTime);
+
+ return value;
+ }
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::HepaFilterMonitoring::Id: {
using namespace app::Clusters::HepaFilterMonitoring;
switch (aPath.mEventId)
diff --git a/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp b/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
index dacb197027abec..1b889b3567489d 100644
--- a/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
@@ -3322,16 +3322,19 @@ void CHIPOperationalStateClusterOperationalCommandResponseCallback::CallbackFn(
std::string CommandResponseState_errorStateIDCtorSignature = "(I)V";
chip::JniReferences::GetInstance().CreateBoxedObject(
CommandResponseState_errorStateIDClassName.c_str(), CommandResponseState_errorStateIDCtorSignature.c_str(),
- static_cast(dataResponse.commandResponseState.errorStateID), CommandResponseState_errorStateID);
+ dataResponse.commandResponseState.errorStateID, CommandResponseState_errorStateID);
jobject CommandResponseState_errorStateLabel;
- if (dataResponse.commandResponseState.errorStateLabel.IsNull())
+ if (!dataResponse.commandResponseState.errorStateLabel.HasValue())
{
- CommandResponseState_errorStateLabel = nullptr;
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, CommandResponseState_errorStateLabel);
}
else
{
+ jobject CommandResponseState_errorStateLabelInsideOptional;
LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
- dataResponse.commandResponseState.errorStateLabel.Value(), CommandResponseState_errorStateLabel));
+ dataResponse.commandResponseState.errorStateLabel.Value(), CommandResponseState_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(CommandResponseState_errorStateLabelInsideOptional,
+ CommandResponseState_errorStateLabel);
}
jobject CommandResponseState_errorStateDetails;
if (!dataResponse.commandResponseState.errorStateDetails.HasValue())
@@ -3356,7 +3359,7 @@ void CHIPOperationalStateClusterOperationalCommandResponseCallback::CallbackFn(
return;
}
jmethodID errorStateStructStructCtor_0 =
- env->GetMethodID(errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Optional;)V");
+ env->GetMethodID(errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
if (errorStateStructStructCtor_0 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterErrorStateStruct constructor");
@@ -3369,6 +3372,120 @@ void CHIPOperationalStateClusterOperationalCommandResponseCallback::CallbackFn(
env->CallVoidMethod(javaCallbackRef, javaMethod, CommandResponseState);
}
+CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback::
+ CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(jobject javaCallback) :
+ Callback::Callback(CallbackFn, this)
+{
+ JNIEnv * env = 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback::
+ ~CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback()
+{
+ JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+};
+
+void CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback::CallbackFn(
+ void * context,
+ const chip::app::Clusters::RoboticVacuumOperationalState::Commands::OperationalCommandResponse::DecodableType & dataResponse)
+{
+ chip::DeviceLayer::StackUnlock unlock;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ jobject javaCallbackRef;
+ jmethodID javaMethod;
+
+ VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Error invoking Java callback: no JNIEnv"));
+
+ std::unique_ptr
+ cppCallback(reinterpret_cast(context),
+ chip::Platform::Delete);
+ VerifyOrReturn(cppCallback != nullptr, ChipLogError(Zcl, "Error invoking Java callback: failed to cast native callback"));
+
+ javaCallbackRef = cppCallback->javaCallbackRef;
+ // Java callback is allowed to be null, exit early if this is the case.
+ VerifyOrReturn(javaCallbackRef != nullptr);
+
+ err = JniReferences::GetInstance().FindMethod(
+ env, javaCallbackRef, "onSuccess",
+ "(Lchip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Error invoking Java callback: %s", ErrorStr(err)));
+
+ jobject CommandResponseState;
+ jobject CommandResponseState_errorStateID;
+ std::string CommandResponseState_errorStateIDClassName = "java/lang/Integer";
+ std::string CommandResponseState_errorStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ CommandResponseState_errorStateIDClassName.c_str(), CommandResponseState_errorStateIDCtorSignature.c_str(),
+ dataResponse.commandResponseState.errorStateID, CommandResponseState_errorStateID);
+ jobject CommandResponseState_errorStateLabel;
+ if (!dataResponse.commandResponseState.errorStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, CommandResponseState_errorStateLabel);
+ }
+ else
+ {
+ jobject CommandResponseState_errorStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ dataResponse.commandResponseState.errorStateLabel.Value(), CommandResponseState_errorStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(CommandResponseState_errorStateLabelInsideOptional,
+ CommandResponseState_errorStateLabel);
+ }
+ jobject CommandResponseState_errorStateDetails;
+ if (!dataResponse.commandResponseState.errorStateDetails.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, CommandResponseState_errorStateDetails);
+ }
+ else
+ {
+ jobject CommandResponseState_errorStateDetailsInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(
+ dataResponse.commandResponseState.errorStateDetails.Value(), CommandResponseState_errorStateDetailsInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(CommandResponseState_errorStateDetailsInsideOptional,
+ CommandResponseState_errorStateDetails);
+ }
+
+ jclass errorStateStructStructClass_0;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct",
+ errorStateStructStructClass_0);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct");
+ return;
+ }
+ jmethodID errorStateStructStructCtor_0 =
+ env->GetMethodID(errorStateStructStructClass_0, "", "(Ljava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;)V");
+ if (errorStateStructStructCtor_0 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$RoboticVacuumOperationalStateClusterErrorStateStruct constructor");
+ return;
+ }
+
+ CommandResponseState =
+ env->NewObject(errorStateStructStructClass_0, errorStateStructStructCtor_0, CommandResponseState_errorStateID,
+ CommandResponseState_errorStateLabel, CommandResponseState_errorStateDetails);
+
+ env->CallVoidMethod(javaCallbackRef, javaMethod, CommandResponseState);
+}
CHIPDoorLockClusterGetWeekDayScheduleResponseCallback::CHIPDoorLockClusterGetWeekDayScheduleResponseCallback(jobject javaCallback) :
Callback::Callback(CallbackFn, this)
{
diff --git a/src/controller/java/zap-generated/CHIPInvokeCallbacks.h b/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
index 585195f541e966..c838d0e129b262 100644
--- a/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
+++ b/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
@@ -571,6 +571,22 @@ class CHIPOperationalStateClusterOperationalCommandResponseCallback
jobject javaCallbackRef;
};
+class CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback
+ : public Callback::Callback
+{
+public:
+ CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(jobject javaCallback);
+
+ ~CHIPRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback();
+
+ static void CallbackFn(
+ void * context,
+ const chip::app::Clusters::RoboticVacuumOperationalState::Commands::OperationalCommandResponse::DecodableType & data);
+
+private:
+ jobject javaCallbackRef;
+};
+
class CHIPDoorLockClusterGetWeekDayScheduleResponseCallback
: public Callback::Callback
{
diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
index 23be9ec0902b8f..fcc2f44b7a1f5e 100644
--- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
@@ -25127,12 +25127,22 @@ void CHIPOperationalStateOperationalStateListAttributeCallback::CallbackFn(
jobject newElement_0_operationalStateID;
std::string newElement_0_operationalStateIDClassName = "java/lang/Integer";
std::string newElement_0_operationalStateIDCtorSignature = "(I)V";
- chip::JniReferences::GetInstance().CreateBoxedObject(
- newElement_0_operationalStateIDClassName.c_str(), newElement_0_operationalStateIDCtorSignature.c_str(),
- static_cast(entry_0.operationalStateID), newElement_0_operationalStateID);
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_operationalStateIDClassName.c_str(),
+ newElement_0_operationalStateIDCtorSignature.c_str(),
+ entry_0.operationalStateID, newElement_0_operationalStateID);
jobject newElement_0_operationalStateLabel;
- LogErrorOnFailure(
- chip::JniReferences::GetInstance().CharToStringUTF(entry_0.operationalStateLabel, newElement_0_operationalStateLabel));
+ if (!entry_0.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_operationalStateLabel);
+ }
+ else
+ {
+ jobject newElement_0_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.operationalStateLabel.Value(),
+ newElement_0_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_operationalStateLabelInsideOptional,
+ newElement_0_operationalStateLabel);
+ }
jclass operationalStateStructStructClass_1;
err = chip::JniReferences::GetInstance().GetClassRef(
@@ -25144,7 +25154,7 @@ void CHIPOperationalStateOperationalStateListAttributeCallback::CallbackFn(
return;
}
jmethodID operationalStateStructStructCtor_1 =
- env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/lang/String;)V");
+ env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
if (operationalStateStructStructCtor_1 == nullptr)
{
ChipLogError(Zcl, "Could not find ChipStructs$OperationalStateClusterOperationalStateStruct constructor");
@@ -25444,6 +25454,610 @@ void CHIPOperationalStateAttributeListAttributeCallback::CallbackFn(
env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
}
+CHIPRoboticVacuumOperationalStatePhaseListAttributeCallback::CHIPRoboticVacuumOperationalStatePhaseListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStatePhaseListAttributeCallback::~CHIPRoboticVacuumOperationalStatePhaseListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStatePhaseListAttributeCallback::CallbackFn(
+ void * context, const chip::app::DataModel::Nullable> & 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;
+ if (list.IsNull())
+ {
+ arrayListObj = nullptr;
+ }
+ else
+ {
+ chip::JniReferences::GetInstance().CreateArrayList(arrayListObj);
+
+ auto iter_arrayListObj_1 = list.Value().begin();
+ while (iter_arrayListObj_1.Next())
+ {
+ auto & entry_1 = iter_arrayListObj_1.GetValue();
+ jobject newElement_1;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_1, newElement_1));
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_1);
+ }
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPRoboticVacuumOperationalStateCurrentPhaseAttributeCallback::CHIPRoboticVacuumOperationalStateCurrentPhaseAttributeCallback(
+ 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateCurrentPhaseAttributeCallback::~CHIPRoboticVacuumOperationalStateCurrentPhaseAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateCurrentPhaseAttributeCallback::CallbackFn(
+ void * context, const chip::app::DataModel::Nullable & value)
+{
+ 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/lang/Integer;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess() method"));
+
+ jobject javaValue;
+ if (value.IsNull())
+ {
+ javaValue = nullptr;
+ }
+ else
+ {
+ std::string javaValueClassName = "java/lang/Integer";
+ std::string javaValueCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(javaValueClassName.c_str(), javaValueCtorSignature.c_str(),
+ value.Value(), javaValue);
+ }
+
+ env->CallVoidMethod(javaCallbackRef, javaMethod, javaValue);
+}
+
+CHIPRoboticVacuumOperationalStateCountdownTimeAttributeCallback::CHIPRoboticVacuumOperationalStateCountdownTimeAttributeCallback(
+ 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateCountdownTimeAttributeCallback::~CHIPRoboticVacuumOperationalStateCountdownTimeAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateCountdownTimeAttributeCallback::CallbackFn(
+ void * context, const chip::app::DataModel::Nullable & value)
+{
+ 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/lang/Long;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess() method"));
+
+ jobject javaValue;
+ if (value.IsNull())
+ {
+ javaValue = nullptr;
+ }
+ else
+ {
+ std::string javaValueClassName = "java/lang/Long";
+ std::string javaValueCtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(javaValueClassName.c_str(), javaValueCtorSignature.c_str(),
+ value.Value(), javaValue);
+ }
+
+ env->CallVoidMethod(javaCallbackRef, javaMethod, javaValue);
+}
+
+CHIPRoboticVacuumOperationalStateOperationalStateListAttributeCallback::
+ CHIPRoboticVacuumOperationalStateOperationalStateListAttributeCallback(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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateOperationalStateListAttributeCallback::
+ ~CHIPRoboticVacuumOperationalStateOperationalStateListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateOperationalStateListAttributeCallback::CallbackFn(
+ void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::RoboticVacuumOperationalState::Structs::OperationalStateStruct::DecodableType> & 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_operationalStateID;
+ std::string newElement_0_operationalStateIDClassName = "java/lang/Integer";
+ std::string newElement_0_operationalStateIDCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_operationalStateIDClassName.c_str(),
+ newElement_0_operationalStateIDCtorSignature.c_str(),
+ entry_0.operationalStateID, newElement_0_operationalStateID);
+ jobject newElement_0_operationalStateLabel;
+ if (!entry_0.operationalStateLabel.HasValue())
+ {
+ chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_operationalStateLabel);
+ }
+ else
+ {
+ jobject newElement_0_operationalStateLabelInsideOptional;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.operationalStateLabel.Value(),
+ newElement_0_operationalStateLabelInsideOptional));
+ chip::JniReferences::GetInstance().CreateOptional(newElement_0_operationalStateLabelInsideOptional,
+ newElement_0_operationalStateLabel);
+ }
+
+ jclass operationalStateStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct",
+ operationalStateStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct");
+ return;
+ }
+ jmethodID operationalStateStructStructCtor_1 =
+ env->GetMethodID(operationalStateStructStructClass_1, "", "(Ljava/lang/Integer;Ljava/util/Optional;)V");
+ if (operationalStateStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$RoboticVacuumOperationalStateClusterOperationalStateStruct constructor");
+ return;
+ }
+
+ newElement_0 = env->NewObject(operationalStateStructStructClass_1, operationalStateStructStructCtor_1,
+ newElement_0_operationalStateID, newElement_0_operationalStateLabel);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPRoboticVacuumOperationalStateGeneratedCommandListAttributeCallback::
+ CHIPRoboticVacuumOperationalStateGeneratedCommandListAttributeCallback(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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateGeneratedCommandListAttributeCallback::
+ ~CHIPRoboticVacuumOperationalStateGeneratedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateGeneratedCommandListAttributeCallback::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0ClassName.c_str(),
+ newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPRoboticVacuumOperationalStateAcceptedCommandListAttributeCallback::
+ CHIPRoboticVacuumOperationalStateAcceptedCommandListAttributeCallback(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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateAcceptedCommandListAttributeCallback::
+ ~CHIPRoboticVacuumOperationalStateAcceptedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateAcceptedCommandListAttributeCallback::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0ClassName.c_str(),
+ newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPRoboticVacuumOperationalStateEventListAttributeCallback::CHIPRoboticVacuumOperationalStateEventListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateEventListAttributeCallback::~CHIPRoboticVacuumOperationalStateEventListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateEventListAttributeCallback::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0ClassName.c_str(),
+ newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPRoboticVacuumOperationalStateAttributeListAttributeCallback::CHIPRoboticVacuumOperationalStateAttributeListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPRoboticVacuumOperationalStateAttributeListAttributeCallback::~CHIPRoboticVacuumOperationalStateAttributeListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPRoboticVacuumOperationalStateAttributeListAttributeCallback::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;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0ClassName.c_str(),
+ newElement_0CtorSignature.c_str(), entry_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
CHIPHepaFilterMonitoringGeneratedCommandListAttributeCallback::CHIPHepaFilterMonitoringGeneratedCommandListAttributeCallback(
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 f9aca55fe803e6..c47f7a1cdd6770 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -16780,6 +16780,310 @@ private native void subscribeClusterRevisionAttribute(long chipClusterPtr,
, int minInterval, int maxInterval);
}
+ public static class RoboticVacuumOperationalStateCluster extends BaseChipCluster {
+ public static final long CLUSTER_ID = 97L;
+
+ public RoboticVacuumOperationalStateCluster(long devicePtr, int endpointId) {
+ super(devicePtr, endpointId);
+ }
+
+ @Override
+ public native long initWithDevice(long devicePtr, int endpointId);
+
+ public void pause(OperationalCommandResponseCallback callback
+ ) {
+ pause(chipClusterPtr, callback, null);
+ }
+
+ public void pause(OperationalCommandResponseCallback callback
+
+ , int timedInvokeTimeoutMs) {
+ pause(chipClusterPtr, callback, timedInvokeTimeoutMs);
+ }
+
+ public void stop(OperationalCommandResponseCallback callback
+ ) {
+ stop(chipClusterPtr, callback, null);
+ }
+
+ public void stop(OperationalCommandResponseCallback callback
+
+ , int timedInvokeTimeoutMs) {
+ stop(chipClusterPtr, callback, timedInvokeTimeoutMs);
+ }
+
+ public void start(OperationalCommandResponseCallback callback
+ ) {
+ start(chipClusterPtr, callback, null);
+ }
+
+ public void start(OperationalCommandResponseCallback callback
+
+ , int timedInvokeTimeoutMs) {
+ start(chipClusterPtr, callback, timedInvokeTimeoutMs);
+ }
+
+ public void resume(OperationalCommandResponseCallback callback
+ ) {
+ resume(chipClusterPtr, callback, null);
+ }
+
+ public void resume(OperationalCommandResponseCallback callback
+
+ , int timedInvokeTimeoutMs) {
+ resume(chipClusterPtr, callback, timedInvokeTimeoutMs);
+ }
+ private native void pause(long chipClusterPtr, OperationalCommandResponseCallback Callback
+
+ , @Nullable Integer timedInvokeTimeoutMs);
+ private native void stop(long chipClusterPtr, OperationalCommandResponseCallback Callback
+
+ , @Nullable Integer timedInvokeTimeoutMs);
+ private native void start(long chipClusterPtr, OperationalCommandResponseCallback Callback
+
+ , @Nullable Integer timedInvokeTimeoutMs);
+ private native void resume(long chipClusterPtr, OperationalCommandResponseCallback Callback
+
+ , @Nullable Integer timedInvokeTimeoutMs);
+ public interface OperationalCommandResponseCallback {
+ void onSuccess(ChipStructs.RoboticVacuumOperationalStateClusterErrorStateStruct commandResponseState);
+
+ void onError(Exception error);
+ }
+
+
+ public interface PhaseListAttributeCallback {
+ void onSuccess(@Nullable List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface CurrentPhaseAttributeCallback {
+ void onSuccess(@Nullable Integer value);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface CountdownTimeAttributeCallback {
+ void onSuccess(@Nullable Long value);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface OperationalStateListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface GeneratedCommandListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface AcceptedCommandListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface EventListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface AttributeListAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public void readPhaseListAttribute(
+ PhaseListAttributeCallback callback
+ ) {
+ readPhaseListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribePhaseListAttribute(
+ PhaseListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribePhaseListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readCurrentPhaseAttribute(
+ CurrentPhaseAttributeCallback callback
+ ) {
+ readCurrentPhaseAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeCurrentPhaseAttribute(
+ CurrentPhaseAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeCurrentPhaseAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readCountdownTimeAttribute(
+ CountdownTimeAttributeCallback callback
+ ) {
+ readCountdownTimeAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeCountdownTimeAttribute(
+ CountdownTimeAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeCountdownTimeAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readOperationalStateListAttribute(
+ OperationalStateListAttributeCallback callback
+ ) {
+ readOperationalStateListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeOperationalStateListAttribute(
+ OperationalStateListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeOperationalStateListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback
+ ) {
+ readGeneratedCommandListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeGeneratedCommandListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback
+ ) {
+ readAcceptedCommandListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeAcceptedCommandListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readEventListAttribute(
+ EventListAttributeCallback callback
+ ) {
+ readEventListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeEventListAttribute(
+ EventListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeEventListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readAttributeListAttribute(
+ AttributeListAttributeCallback callback
+ ) {
+ readAttributeListAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeAttributeListAttribute(
+ AttributeListAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeAttributeListAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readFeatureMapAttribute(
+ LongAttributeCallback callback
+ ) {
+ readFeatureMapAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeFeatureMapAttribute(
+ LongAttributeCallback callback
+,
+ int minInterval, int maxInterval) {
+ subscribeFeatureMapAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readClusterRevisionAttribute(
+ IntegerAttributeCallback callback
+ ) {
+ readClusterRevisionAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeClusterRevisionAttribute(
+ IntegerAttributeCallback callback
+,
+ int minInterval, int maxInterval) {
+ subscribeClusterRevisionAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ private native void readPhaseListAttribute(long chipClusterPtr,
+ PhaseListAttributeCallback callback
+ );
+ private native void subscribePhaseListAttribute(long chipClusterPtr,
+ PhaseListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readCurrentPhaseAttribute(long chipClusterPtr,
+ CurrentPhaseAttributeCallback callback
+ );
+ private native void subscribeCurrentPhaseAttribute(long chipClusterPtr,
+ CurrentPhaseAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readCountdownTimeAttribute(long chipClusterPtr,
+ CountdownTimeAttributeCallback callback
+ );
+ private native void subscribeCountdownTimeAttribute(long chipClusterPtr,
+ CountdownTimeAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readOperationalStateListAttribute(long chipClusterPtr,
+ OperationalStateListAttributeCallback callback
+ );
+ private native void subscribeOperationalStateListAttribute(long chipClusterPtr,
+ OperationalStateListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readGeneratedCommandListAttribute(long chipClusterPtr,
+ GeneratedCommandListAttributeCallback callback
+ );
+ private native void subscribeGeneratedCommandListAttribute(long chipClusterPtr,
+ GeneratedCommandListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readAcceptedCommandListAttribute(long chipClusterPtr,
+ AcceptedCommandListAttributeCallback callback
+ );
+ private native void subscribeAcceptedCommandListAttribute(long chipClusterPtr,
+ AcceptedCommandListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readEventListAttribute(long chipClusterPtr,
+ EventListAttributeCallback callback
+ );
+ private native void subscribeEventListAttribute(long chipClusterPtr,
+ EventListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readAttributeListAttribute(long chipClusterPtr,
+ AttributeListAttributeCallback callback
+ );
+ private native void subscribeAttributeListAttribute(long chipClusterPtr,
+ AttributeListAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readFeatureMapAttribute(long chipClusterPtr,
+ LongAttributeCallback callback
+ );
+ private native void subscribeFeatureMapAttribute(long chipClusterPtr,
+ LongAttributeCallback callback
+, int minInterval, int maxInterval);
+
+ private native void readClusterRevisionAttribute(long chipClusterPtr,
+ IntegerAttributeCallback callback
+ );
+ private native void subscribeClusterRevisionAttribute(long chipClusterPtr,
+ IntegerAttributeCallback callback
+, int minInterval, int maxInterval);
+ }
+
public static class HepaFilterMonitoringCluster extends BaseChipCluster {
public static final long CLUSTER_ID = 113L;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipEventStructs.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipEventStructs.java
index 5141fbb60aa041..acbf63d6f4c4e2 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipEventStructs.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipEventStructs.java
@@ -1305,6 +1305,60 @@ public String toString() {
}
}
+public static class RoboticVacuumOperationalStateClusterOperationalErrorEvent {
+public ChipStructs.RoboticVacuumOperationalStateClusterErrorStateStruct errorState;
+
+ public RoboticVacuumOperationalStateClusterOperationalErrorEvent(
+ ChipStructs.RoboticVacuumOperationalStateClusterErrorStateStruct errorState
+ ) {
+ this.errorState = errorState;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("RoboticVacuumOperationalStateClusterOperationalErrorEvent {\n");
+ output.append("\terrorState: ");
+ output.append(errorState);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+
+public static class RoboticVacuumOperationalStateClusterOperationCompletionEvent {
+public Integer completionErrorCode;
+public @Nullable Optional totalOperationalTime;
+public @Nullable Optional pausedTime;
+
+ public RoboticVacuumOperationalStateClusterOperationCompletionEvent(
+ Integer completionErrorCode
+ , @Nullable Optional totalOperationalTime
+ , @Nullable Optional pausedTime
+ ) {
+ this.completionErrorCode = completionErrorCode;
+ this.totalOperationalTime = totalOperationalTime;
+ this.pausedTime = pausedTime;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("RoboticVacuumOperationalStateClusterOperationCompletionEvent {\n");
+ output.append("\tcompletionErrorCode: ");
+ output.append(completionErrorCode);
+ output.append("\n");
+ output.append("\ttotalOperationalTime: ");
+ output.append(totalOperationalTime);
+ output.append("\n");
+ output.append("\tpausedTime: ");
+ output.append(pausedTime);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+
public static class DoorLockClusterDoorLockAlarmEvent {
public Integer alarmCode;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
index 83e7e60c2e79ea..1691df2f2bd8ee 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
@@ -183,6 +183,9 @@ public static String clusterIdToName(long clusterId) {
if (clusterId == 96L) {
return "OperationalState";
}
+ if (clusterId == 97L) {
+ return "RoboticVacuumOperationalState";
+ }
if (clusterId == 113L) {
return "HepaFilterMonitoring";
}
@@ -2570,6 +2573,45 @@ public static String attributeIdToName(long clusterId, long attributeId) {
}
return "";
}
+ if (clusterId == 97L) {
+ if (attributeId == 0L) {
+ return "PhaseList";
+ }
+ if (attributeId == 1L) {
+ return "CurrentPhase";
+ }
+ if (attributeId == 2L) {
+ return "CountdownTime";
+ }
+ if (attributeId == 3L) {
+ return "OperationalStateList";
+ }
+ if (attributeId == 4L) {
+ return "OperationalState";
+ }
+ if (attributeId == 5L) {
+ return "OperationalError";
+ }
+ if (attributeId == 65528L) {
+ return "GeneratedCommandList";
+ }
+ if (attributeId == 65529L) {
+ return "AcceptedCommandList";
+ }
+ if (attributeId == 65530L) {
+ return "EventList";
+ }
+ if (attributeId == 65531L) {
+ return "AttributeList";
+ }
+ if (attributeId == 65532L) {
+ return "FeatureMap";
+ }
+ if (attributeId == 65533L) {
+ return "ClusterRevision";
+ }
+ return "";
+ }
if (clusterId == 113L) {
if (attributeId == 0L) {
return "Condition";
@@ -7366,6 +7408,15 @@ public static String eventIdToName(long clusterId, long eventId) {
}
return "";
}
+ if (clusterId == 97L) {
+ if (eventId == 0L) {
+ return "OperationalError";
+ }
+ if (eventId == 1L) {
+ return "OperationCompletion";
+ }
+ return "";
+ }
if (clusterId == 113L) {
return "";
}
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
index b5294f94e6054b..e7aff346222b4a 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
@@ -1940,12 +1940,12 @@ public String toString() {
public static class OperationalStateClusterErrorStateStruct {
public Integer errorStateID;
-public @Nullable String errorStateLabel;
+public Optional errorStateLabel;
public Optional errorStateDetails;
public OperationalStateClusterErrorStateStruct(
Integer errorStateID
- , @Nullable String errorStateLabel
+ , Optional errorStateLabel
, Optional errorStateDetails
) {
this.errorStateID = errorStateID;
@@ -1973,11 +1973,11 @@ public String toString() {
public static class OperationalStateClusterOperationalStateStruct {
public Integer operationalStateID;
-public String operationalStateLabel;
+public Optional operationalStateLabel;
public OperationalStateClusterOperationalStateStruct(
Integer operationalStateID
- , String operationalStateLabel
+ , Optional operationalStateLabel
) {
this.operationalStateID = operationalStateID;
this.operationalStateLabel = operationalStateLabel;
@@ -1998,6 +1998,66 @@ public String toString() {
}
}
+public static class RoboticVacuumOperationalStateClusterErrorStateStruct {
+public Integer errorStateID;
+public Optional errorStateLabel;
+public Optional errorStateDetails;
+
+ public RoboticVacuumOperationalStateClusterErrorStateStruct(
+ Integer errorStateID
+ , Optional errorStateLabel
+ , Optional errorStateDetails
+ ) {
+ this.errorStateID = errorStateID;
+ this.errorStateLabel = errorStateLabel;
+ this.errorStateDetails = errorStateDetails;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("RoboticVacuumOperationalStateClusterErrorStateStruct {\n");
+ output.append("\terrorStateID: ");
+ output.append(errorStateID);
+ output.append("\n");
+ output.append("\terrorStateLabel: ");
+ output.append(errorStateLabel);
+ output.append("\n");
+ output.append("\terrorStateDetails: ");
+ output.append(errorStateDetails);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+
+public static class RoboticVacuumOperationalStateClusterOperationalStateStruct {
+public Integer operationalStateID;
+public Optional operationalStateLabel;
+
+ public RoboticVacuumOperationalStateClusterOperationalStateStruct(
+ Integer operationalStateID
+ , Optional operationalStateLabel
+ ) {
+ this.operationalStateID = operationalStateID;
+ this.operationalStateLabel = operationalStateLabel;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("RoboticVacuumOperationalStateClusterOperationalStateStruct {\n");
+ output.append("\toperationalStateID: ");
+ output.append(operationalStateID);
+ output.append("\n");
+ output.append("\toperationalStateLabel: ");
+ output.append(operationalStateLabel);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+
public static class DoorLockClusterCredentialStruct {
public Integer credentialType;
public Integer credentialIndex;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
index 92f7fa0d6f7645..71d7a62f7ecf6f 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
@@ -7319,6 +7319,180 @@ 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 DelegatedRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.OperationalCommandResponseCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(ChipStructs.RoboticVacuumOperationalStateClusterErrorStateStruct CommandResponseState) {
+ Map responseValues = new LinkedHashMap<>();
+ // CommandResponseState: Struct ErrorStateStruct
+ // Conversion from this type to Java is not properly implemented yet
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception error) {
+ callback.onFailure(error);
+ }
+ }
+
+ public static class DelegatedRoboticVacuumOperationalStateClusterPhaseListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.PhaseListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess(@Nullable 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 DelegatedRoboticVacuumOperationalStateClusterCurrentPhaseAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.CurrentPhaseAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess(@Nullable Integer value) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("value", "Integer");
+ responseValues.put(commandResponseInfo, value);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+ public static class DelegatedRoboticVacuumOperationalStateClusterCountdownTimeAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.CountdownTimeAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess(@Nullable Long value) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("value", "Long");
+ responseValues.put(commandResponseInfo, value);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+ public static class DelegatedRoboticVacuumOperationalStateClusterOperationalStateListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.OperationalStateListAttributeCallback, 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 DelegatedRoboticVacuumOperationalStateClusterGeneratedCommandListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.GeneratedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess( List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+ public static class DelegatedRoboticVacuumOperationalStateClusterAcceptedCommandListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.AcceptedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess( List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+ public static class DelegatedRoboticVacuumOperationalStateClusterEventListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.EventListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+@Override
+ public void onSuccess( List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+ public static class DelegatedRoboticVacuumOperationalStateClusterAttributeListAttributeCallback implements ChipClusters.RoboticVacuumOperationalStateCluster.AttributeListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
@Override
public void onSuccess( List valueList) {
Map responseValues = new LinkedHashMap<>();
@@ -19852,6 +20026,9 @@ public Map initializeClusterMap() {
ClusterInfo operationalStateClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.OperationalStateCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("operationalState", operationalStateClusterInfo);
+ ClusterInfo roboticVacuumOperationalStateClusterInfo = new ClusterInfo(
+ (ptr, endpointId) -> new ChipClusters.RoboticVacuumOperationalStateCluster(ptr, endpointId), new HashMap<>());
+ clusterMap.put("roboticVacuumOperationalState", roboticVacuumOperationalStateClusterInfo);
ClusterInfo hepaFilterMonitoringClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.HepaFilterMonitoringCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("hepaFilterMonitoring", hepaFilterMonitoringClusterInfo);
@@ -20143,6 +20320,7 @@ public void combineCommand(Map destination, Map> getCommandMap() {
commandMap.put("smokeCoAlarm", smokeCoAlarmClusterInteractionInfoMap);
Map operationalStateClusterInteractionInfoMap = new LinkedHashMap<>();
commandMap.put("operationalState", operationalStateClusterInteractionInfoMap);
+ Map roboticVacuumOperationalStateClusterInteractionInfoMap = new LinkedHashMap<>();
+ Map roboticVacuumOperationalStatepauseCommandParams = new LinkedHashMap();
+ InteractionInfo roboticVacuumOperationalStatepauseInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster)
+ .pause((ChipClusters.RoboticVacuumOperationalStateCluster.OperationalCommandResponseCallback) callback
+
+ );
+ },
+ () -> new DelegatedRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(),
+ roboticVacuumOperationalStatepauseCommandParams
+ );
+ roboticVacuumOperationalStateClusterInteractionInfoMap.put("pause", roboticVacuumOperationalStatepauseInteractionInfo);
+ Map roboticVacuumOperationalStatestopCommandParams = new LinkedHashMap();
+ InteractionInfo roboticVacuumOperationalStatestopInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster)
+ .stop((ChipClusters.RoboticVacuumOperationalStateCluster.OperationalCommandResponseCallback) callback
+
+ );
+ },
+ () -> new DelegatedRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(),
+ roboticVacuumOperationalStatestopCommandParams
+ );
+ roboticVacuumOperationalStateClusterInteractionInfoMap.put("stop", roboticVacuumOperationalStatestopInteractionInfo);
+ Map roboticVacuumOperationalStatestartCommandParams = new LinkedHashMap();
+ InteractionInfo roboticVacuumOperationalStatestartInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster)
+ .start((ChipClusters.RoboticVacuumOperationalStateCluster.OperationalCommandResponseCallback) callback
+
+ );
+ },
+ () -> new DelegatedRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(),
+ roboticVacuumOperationalStatestartCommandParams
+ );
+ roboticVacuumOperationalStateClusterInteractionInfoMap.put("start", roboticVacuumOperationalStatestartInteractionInfo);
+ Map roboticVacuumOperationalStateresumeCommandParams = new LinkedHashMap();
+ InteractionInfo roboticVacuumOperationalStateresumeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.RoboticVacuumOperationalStateCluster) cluster)
+ .resume((ChipClusters.RoboticVacuumOperationalStateCluster.OperationalCommandResponseCallback) callback
+
+ );
+ },
+ () -> new DelegatedRoboticVacuumOperationalStateClusterOperationalCommandResponseCallback(),
+ roboticVacuumOperationalStateresumeCommandParams
+ );
+ roboticVacuumOperationalStateClusterInteractionInfoMap.put("resume", roboticVacuumOperationalStateresumeInteractionInfo);
+ commandMap.put("roboticVacuumOperationalState", roboticVacuumOperationalStateClusterInteractionInfoMap);
Map hepaFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
commandMap.put("hepaFilterMonitoring", hepaFilterMonitoringClusterInteractionInfoMap);
Map activatedCarbonFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py
index d65219839e0887..3a561178d48930 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.py
+++ b/src/controller/python/chip/clusters/CHIPClusters.py
@@ -5305,6 +5305,110 @@ class ChipClusters:
},
},
}
+ _ROBOTIC_VACUUM_OPERATIONAL_STATE_CLUSTER_INFO = {
+ "clusterName": "RoboticVacuumOperationalState",
+ "clusterId": 0x00000061,
+ "commands": {
+ 0x00000000: {
+ "commandId": 0x00000000,
+ "commandName": "Pause",
+ "args": {
+ },
+ },
+ 0x00000001: {
+ "commandId": 0x00000001,
+ "commandName": "Stop",
+ "args": {
+ },
+ },
+ 0x00000002: {
+ "commandId": 0x00000002,
+ "commandName": "Start",
+ "args": {
+ },
+ },
+ 0x00000003: {
+ "commandId": 0x00000003,
+ "commandName": "Resume",
+ "args": {
+ },
+ },
+ },
+ "attributes": {
+ 0x00000000: {
+ "attributeName": "PhaseList",
+ "attributeId": 0x00000000,
+ "type": "str",
+ "reportable": True,
+ },
+ 0x00000001: {
+ "attributeName": "CurrentPhase",
+ "attributeId": 0x00000001,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x00000002: {
+ "attributeName": "CountdownTime",
+ "attributeId": 0x00000002,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x00000003: {
+ "attributeName": "OperationalStateList",
+ "attributeId": 0x00000003,
+ "type": "",
+ "reportable": True,
+ },
+ 0x00000004: {
+ "attributeName": "OperationalState",
+ "attributeId": 0x00000004,
+ "type": "",
+ "reportable": True,
+ },
+ 0x00000005: {
+ "attributeName": "OperationalError",
+ "attributeId": 0x00000005,
+ "type": "",
+ "reportable": True,
+ },
+ 0x0000FFF8: {
+ "attributeName": "GeneratedCommandList",
+ "attributeId": 0x0000FFF8,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFF9: {
+ "attributeName": "AcceptedCommandList",
+ "attributeId": 0x0000FFF9,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFA: {
+ "attributeName": "EventList",
+ "attributeId": 0x0000FFFA,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFB: {
+ "attributeName": "AttributeList",
+ "attributeId": 0x0000FFFB,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFC: {
+ "attributeName": "FeatureMap",
+ "attributeId": 0x0000FFFC,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFD: {
+ "attributeName": "ClusterRevision",
+ "attributeId": 0x0000FFFD,
+ "type": "int",
+ "reportable": True,
+ },
+ },
+ }
_HEPA_FILTER_MONITORING_CLUSTER_INFO = {
"clusterName": "HepaFilterMonitoring",
"clusterId": 0x00000071,
@@ -15591,6 +15695,7 @@ class ChipClusters:
0x0000005B: _AIR_QUALITY_CLUSTER_INFO,
0x0000005C: _SMOKE_CO_ALARM_CLUSTER_INFO,
0x00000060: _OPERATIONAL_STATE_CLUSTER_INFO,
+ 0x00000061: _ROBOTIC_VACUUM_OPERATIONAL_STATE_CLUSTER_INFO,
0x00000071: _HEPA_FILTER_MONITORING_CLUSTER_INFO,
0x00000072: _ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER_INFO,
0x00000073: _CERAMIC_FILTER_MONITORING_CLUSTER_INFO,
@@ -15725,6 +15830,7 @@ class ChipClusters:
"AirQuality": _AIR_QUALITY_CLUSTER_INFO,
"SmokeCoAlarm": _SMOKE_CO_ALARM_CLUSTER_INFO,
"OperationalState": _OPERATIONAL_STATE_CLUSTER_INFO,
+ "RoboticVacuumOperationalState": _ROBOTIC_VACUUM_OPERATIONAL_STATE_CLUSTER_INFO,
"HepaFilterMonitoring": _HEPA_FILTER_MONITORING_CLUSTER_INFO,
"ActivatedCarbonFilterMonitoring": _ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER_INFO,
"CeramicFilterMonitoring": _CERAMIC_FILTER_MONITORING_CLUSTER_INFO,
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 06be17d6c5a97d..2f9c0c0bc7ac56 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -18235,13 +18235,13 @@ class ErrorStateStruct(ClusterObject):
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields=[
- ClusterObjectFieldDescriptor(Label="errorStateID", Tag=0, Type=OperationalState.Enums.ErrorStateEnum),
- ClusterObjectFieldDescriptor(Label="errorStateLabel", Tag=1, Type=typing.Union[Nullable, str]),
+ ClusterObjectFieldDescriptor(Label="errorStateID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="errorStateLabel", Tag=1, Type=typing.Optional[str]),
ClusterObjectFieldDescriptor(Label="errorStateDetails", Tag=2, Type=typing.Optional[str]),
])
- errorStateID: 'OperationalState.Enums.ErrorStateEnum' = 0
- errorStateLabel: 'typing.Union[Nullable, str]' = NullValue
+ errorStateID: 'uint' = 0
+ errorStateLabel: 'typing.Optional[str]' = None
errorStateDetails: 'typing.Optional[str]' = None
@dataclass
@@ -18250,12 +18250,12 @@ class OperationalStateStruct(ClusterObject):
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields=[
- ClusterObjectFieldDescriptor(Label="operationalStateID", Tag=0, Type=OperationalState.Enums.OperationalStateEnum),
- ClusterObjectFieldDescriptor(Label="operationalStateLabel", Tag=1, Type=str),
+ ClusterObjectFieldDescriptor(Label="operationalStateID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="operationalStateLabel", Tag=1, Type=typing.Optional[str]),
])
- operationalStateID: 'OperationalState.Enums.OperationalStateEnum' = 0
- operationalStateLabel: 'str' = ""
+ operationalStateID: 'uint' = 0
+ operationalStateLabel: 'typing.Optional[str]' = None
class Commands:
@dataclass
@@ -18553,12 +18553,408 @@ def event_id(cls) -> int:
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields=[
- ClusterObjectFieldDescriptor(Label="completionErrorCode", Tag=0, Type=OperationalState.Enums.ErrorStateEnum),
+ ClusterObjectFieldDescriptor(Label="completionErrorCode", Tag=0, Type=uint),
ClusterObjectFieldDescriptor(Label="totalOperationalTime", Tag=1, Type=typing.Union[None, Nullable, uint]),
ClusterObjectFieldDescriptor(Label="pausedTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
])
- completionErrorCode: 'OperationalState.Enums.ErrorStateEnum' = 0
+ completionErrorCode: 'uint' = 0
+ totalOperationalTime: 'typing.Union[None, Nullable, uint]' = None
+ pausedTime: 'typing.Union[None, Nullable, uint]' = None
+
+
+@dataclass
+class RoboticVacuumOperationalState(Cluster):
+ id: typing.ClassVar[int] = 0x0061
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="phaseList", Tag=0x00000000, Type=typing.Union[Nullable, typing.List[str]]),
+ ClusterObjectFieldDescriptor(Label="currentPhase", Tag=0x00000001, Type=typing.Union[Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="countdownTime", Tag=0x00000002, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="operationalStateList", Tag=0x00000003, Type=typing.List[RoboticVacuumOperationalState.Structs.OperationalStateStruct]),
+ ClusterObjectFieldDescriptor(Label="operationalState", Tag=0x00000004, Type=RoboticVacuumOperationalState.Structs.OperationalStateStruct),
+ ClusterObjectFieldDescriptor(Label="operationalError", Tag=0x00000005, Type=RoboticVacuumOperationalState.Structs.ErrorStateStruct),
+ 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]),
+ ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=uint),
+ ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
+ ])
+
+ phaseList: 'typing.Union[Nullable, typing.List[str]]' = None
+ currentPhase: 'typing.Union[Nullable, uint]' = None
+ countdownTime: 'typing.Union[None, Nullable, uint]' = None
+ operationalStateList: 'typing.List[RoboticVacuumOperationalState.Structs.OperationalStateStruct]' = None
+ operationalState: 'RoboticVacuumOperationalState.Structs.OperationalStateStruct' = None
+ operationalError: 'RoboticVacuumOperationalState.Structs.ErrorStateStruct' = None
+ generatedCommandList: 'typing.List[uint]' = None
+ acceptedCommandList: 'typing.List[uint]' = None
+ eventList: 'typing.List[uint]' = None
+ attributeList: 'typing.List[uint]' = None
+ featureMap: 'uint' = None
+ clusterRevision: 'uint' = None
+
+ class Enums:
+ class ErrorStateEnum(MatterIntEnum):
+ kFailedToFindChargingDock = 0x40
+ kStuck = 0x41
+ kDustBinMissing = 0x42
+ kDustBinFull = 0x43
+ kWaterTankEmpty = 0x44
+ kWaterTankMissing = 0x45
+ kWaterTankLidOpen = 0x46
+ kMopCleaningPadMissing = 0x47
+ # All received enum values that are not listed above will be mapped
+ # to kUnknownEnumValue. This is a helper enum value that should only
+ # be used by code to process how it handles receiving and unknown
+ # enum value. This specific should never be transmitted.
+ kUnknownEnumValue = 0,
+
+ class OperationalStateEnum(MatterIntEnum):
+ kSeekingCharger = 0x40
+ kCharging = 0x41
+ kDocked = 0x42
+ # All received enum values that are not listed above will be mapped
+ # to kUnknownEnumValue. This is a helper enum value that should only
+ # be used by code to process how it handles receiving and unknown
+ # enum value. This specific should never be transmitted.
+ kUnknownEnumValue = 0,
+
+ class Structs:
+ @dataclass
+ class ErrorStateStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="errorStateID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="errorStateLabel", Tag=1, Type=typing.Optional[str]),
+ ClusterObjectFieldDescriptor(Label="errorStateDetails", Tag=2, Type=typing.Optional[str]),
+ ])
+
+ errorStateID: 'uint' = 0
+ errorStateLabel: 'typing.Optional[str]' = None
+ errorStateDetails: 'typing.Optional[str]' = None
+
+ @dataclass
+ class OperationalStateStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="operationalStateID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="operationalStateLabel", Tag=1, Type=typing.Optional[str]),
+ ])
+
+ operationalStateID: 'uint' = 0
+ operationalStateLabel: 'typing.Optional[str]' = None
+
+ class Commands:
+ @dataclass
+ class Pause(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0061
+ command_id: typing.ClassVar[int] = 0x00000000
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'OperationalCommandResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ])
+
+ @dataclass
+ class Stop(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0061
+ command_id: typing.ClassVar[int] = 0x00000001
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'OperationalCommandResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ])
+
+ @dataclass
+ class Start(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0061
+ command_id: typing.ClassVar[int] = 0x00000002
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'OperationalCommandResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ])
+
+ @dataclass
+ class Resume(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0061
+ command_id: typing.ClassVar[int] = 0x00000003
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'OperationalCommandResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ])
+
+ @dataclass
+ class OperationalCommandResponse(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0061
+ command_id: typing.ClassVar[int] = 0x00000004
+ is_client: typing.ClassVar[bool] = False
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="commandResponseState", Tag=0, Type=RoboticVacuumOperationalState.Structs.ErrorStateStruct),
+ ])
+
+ commandResponseState: 'RoboticVacuumOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RoboticVacuumOperationalState.Structs.ErrorStateStruct())
+
+ class Attributes:
+ @dataclass
+ class PhaseList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000000
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, typing.List[str]])
+
+ value: 'typing.Union[Nullable, typing.List[str]]' = NullValue
+
+ @dataclass
+ class CurrentPhase(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000001
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
+
+ value: 'typing.Union[Nullable, uint]' = NullValue
+
+ @dataclass
+ class CountdownTime(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000002
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
+
+ value: 'typing.Union[None, Nullable, uint]' = None
+
+ @dataclass
+ class OperationalStateList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000003
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[RoboticVacuumOperationalState.Structs.OperationalStateStruct])
+
+ value: 'typing.List[RoboticVacuumOperationalState.Structs.OperationalStateStruct]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class OperationalState(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000004
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=RoboticVacuumOperationalState.Structs.OperationalStateStruct)
+
+ value: 'RoboticVacuumOperationalState.Structs.OperationalStateStruct' = field(default_factory=lambda: RoboticVacuumOperationalState.Structs.OperationalStateStruct())
+
+ @dataclass
+ class OperationalError(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000005
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=RoboticVacuumOperationalState.Structs.ErrorStateStruct)
+
+ value: 'RoboticVacuumOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RoboticVacuumOperationalState.Structs.ErrorStateStruct())
+
+ @dataclass
+ class GeneratedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFF8
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class AcceptedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFF9
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class EventList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFA
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class AttributeList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFB
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class FeatureMap(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFC
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=uint)
+
+ value: 'uint' = 0
+
+ @dataclass
+ class ClusterRevision(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFD
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=uint)
+
+ value: 'uint' = 0
+
+ class Events:
+ @dataclass
+ class OperationalError(ClusterEvent):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def event_id(cls) -> int:
+ return 0x00000000
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="errorState", Tag=0, Type=RoboticVacuumOperationalState.Structs.ErrorStateStruct),
+ ])
+
+ errorState: 'RoboticVacuumOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RoboticVacuumOperationalState.Structs.ErrorStateStruct())
+
+ @dataclass
+ class OperationCompletion(ClusterEvent):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0061
+
+ @ChipUtility.classproperty
+ def event_id(cls) -> int:
+ return 0x00000001
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="completionErrorCode", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="totalOperationalTime", Tag=1, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="pausedTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
+ ])
+
+ completionErrorCode: 'uint' = 0
totalOperationalTime: 'typing.Union[None, Nullable, uint]' = None
pausedTime: 'typing.Union[None, Nullable, uint]' = None
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
index 0920c65ca69499..ca5f6de6d4d508 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
@@ -2018,6 +2018,51 @@ static BOOL AttributeIsSpecifiedInOperationalStateCluster(AttributeId aAttribute
}
}
}
+static BOOL AttributeIsSpecifiedInRoboticVacuumOperationalStateCluster(AttributeId aAttributeId)
+{
+ using namespace Clusters::RoboticVacuumOperationalState;
+ switch (aAttributeId) {
+ case Attributes::PhaseList::Id: {
+ return YES;
+ }
+ case Attributes::CurrentPhase::Id: {
+ return YES;
+ }
+ case Attributes::CountdownTime::Id: {
+ return YES;
+ }
+ case Attributes::OperationalStateList::Id: {
+ return YES;
+ }
+ case Attributes::OperationalState::Id: {
+ return YES;
+ }
+ case Attributes::OperationalError::Id: {
+ return YES;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ return YES;
+ }
+ case Attributes::AcceptedCommandList::Id: {
+ return YES;
+ }
+ case Attributes::EventList::Id: {
+ return YES;
+ }
+ case Attributes::AttributeList::Id: {
+ return YES;
+ }
+ case Attributes::FeatureMap::Id: {
+ return YES;
+ }
+ case Attributes::ClusterRevision::Id: {
+ return YES;
+ }
+ default: {
+ return NO;
+ }
+ }
+}
static BOOL AttributeIsSpecifiedInHEPAFilterMonitoringCluster(AttributeId aAttributeId)
{
using namespace Clusters::HepaFilterMonitoring;
@@ -5100,6 +5145,9 @@ BOOL MTRAttributeIsSpecified(ClusterId aClusterId, AttributeId aAttributeId)
case Clusters::OperationalState::Id: {
return AttributeIsSpecifiedInOperationalStateCluster(aAttributeId);
}
+ case Clusters::RoboticVacuumOperationalState::Id: {
+ return AttributeIsSpecifiedInRoboticVacuumOperationalStateCluster(aAttributeId);
+ }
case Clusters::HepaFilterMonitoring::Id: {
return AttributeIsSpecifiedInHEPAFilterMonitoringCluster(aAttributeId);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index 4d7cbd75eab3d6..a5635f62e1e325 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -10146,12 +10146,16 @@ static id _Nullable DecodeAttributeValueForOperationalStateCluster(
auto & entry_0 = iter_0.GetValue();
MTROperationalStateClusterOperationalStateStruct * newElement_0;
newElement_0 = [MTROperationalStateClusterOperationalStateStruct new];
- newElement_0.operationalStateID = [NSNumber numberWithUnsignedChar:chip::to_underlying(entry_0.operationalStateID)];
- newElement_0.operationalStateLabel = AsString(entry_0.operationalStateLabel);
- if (newElement_0.operationalStateLabel == nil) {
- CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
- *aError = err;
- return nil;
+ newElement_0.operationalStateID = [NSNumber numberWithUnsignedChar:entry_0.operationalStateID];
+ if (entry_0.operationalStateLabel.HasValue()) {
+ newElement_0.operationalStateLabel = AsString(entry_0.operationalStateLabel.Value());
+ if (newElement_0.operationalStateLabel == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
+ newElement_0.operationalStateLabel = nil;
}
[array_0 addObject:newElement_0];
}
@@ -10173,12 +10177,16 @@ static id _Nullable DecodeAttributeValueForOperationalStateCluster(
}
MTROperationalStateClusterOperationalStateStruct * _Nonnull value;
value = [MTROperationalStateClusterOperationalStateStruct new];
- value.operationalStateID = [NSNumber numberWithUnsignedChar:chip::to_underlying(cppValue.operationalStateID)];
- value.operationalStateLabel = AsString(cppValue.operationalStateLabel);
- if (value.operationalStateLabel == nil) {
- CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
- *aError = err;
- return nil;
+ value.operationalStateID = [NSNumber numberWithUnsignedChar:cppValue.operationalStateID];
+ if (cppValue.operationalStateLabel.HasValue()) {
+ value.operationalStateLabel = AsString(cppValue.operationalStateLabel.Value());
+ if (value.operationalStateLabel == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
+ value.operationalStateLabel = nil;
}
return value;
}
@@ -10191,16 +10199,311 @@ static id _Nullable DecodeAttributeValueForOperationalStateCluster(
}
MTROperationalStateClusterErrorStateStruct * _Nonnull value;
value = [MTROperationalStateClusterErrorStateStruct new];
- value.errorStateID = [NSNumber numberWithUnsignedChar:chip::to_underlying(cppValue.errorStateID)];
- if (cppValue.errorStateLabel.IsNull()) {
+ value.errorStateID = [NSNumber numberWithUnsignedChar:cppValue.errorStateID];
+ if (cppValue.errorStateLabel.HasValue()) {
+ value.errorStateLabel = AsString(cppValue.errorStateLabel.Value());
+ if (value.errorStateLabel == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
value.errorStateLabel = nil;
+ }
+ if (cppValue.errorStateDetails.HasValue()) {
+ value.errorStateDetails = AsString(cppValue.errorStateDetails.Value());
+ if (value.errorStateDetails == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
+ value.errorStateDetails = nil;
+ }
+ return value;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ using TypeInfo = Attributes::GeneratedCommandList::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();
+ NSNumber * newElement_0;
+ newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+ [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::AcceptedCommandList::Id: {
+ using TypeInfo = Attributes::AcceptedCommandList::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();
+ NSNumber * newElement_0;
+ newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+ [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::EventList::Id: {
+ using TypeInfo = Attributes::EventList::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();
+ NSNumber * newElement_0;
+ newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+ [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::AttributeList::Id: {
+ using TypeInfo = Attributes::AttributeList::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();
+ NSNumber * newElement_0;
+ newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+ [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::FeatureMap::Id: {
+ using TypeInfo = Attributes::FeatureMap::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithUnsignedInt:cppValue];
+ return value;
+ }
+ case Attributes::ClusterRevision::Id: {
+ using TypeInfo = Attributes::ClusterRevision::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithUnsignedShort:cppValue];
+ return value;
+ }
+ default: {
+ break;
+ }
+ }
+
+ *aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
+ return nil;
+}
+static id _Nullable DecodeAttributeValueForRoboticVacuumOperationalStateCluster(
+ AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::RoboticVacuumOperationalState;
+ switch (aAttributeId) {
+ case Attributes::PhaseList::Id: {
+ using TypeInfo = Attributes::PhaseList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSArray * _Nullable value;
+ if (cppValue.IsNull()) {
+ value = nil;
+ } else {
+ { // Scope for our temporary variables
+ auto * array_1 = [NSMutableArray new];
+ auto iter_1 = cppValue.Value().begin();
+ while (iter_1.Next()) {
+ auto & entry_1 = iter_1.GetValue();
+ NSString * newElement_1;
+ newElement_1 = AsString(entry_1);
+ if (newElement_1 == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ [array_1 addObject:newElement_1];
+ }
+ CHIP_ERROR err = iter_1.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ *aError = err;
+ return nil;
+ }
+ value = array_1;
+ }
+ }
+ return value;
+ }
+ case Attributes::CurrentPhase::Id: {
+ using TypeInfo = Attributes::CurrentPhase::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nullable value;
+ if (cppValue.IsNull()) {
+ value = nil;
+ } else {
+ value = [NSNumber numberWithUnsignedChar:cppValue.Value()];
+ }
+ return value;
+ }
+ case Attributes::CountdownTime::Id: {
+ using TypeInfo = Attributes::CountdownTime::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nullable value;
+ if (cppValue.IsNull()) {
+ value = nil;
} else {
+ value = [NSNumber numberWithUnsignedInt:cppValue.Value()];
+ }
+ return value;
+ }
+ case Attributes::OperationalStateList::Id: {
+ using TypeInfo = Attributes::OperationalStateList::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();
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * newElement_0;
+ newElement_0 = [MTRRoboticVacuumOperationalStateClusterOperationalStateStruct new];
+ newElement_0.operationalStateID = [NSNumber numberWithUnsignedChar:entry_0.operationalStateID];
+ if (entry_0.operationalStateLabel.HasValue()) {
+ newElement_0.operationalStateLabel = AsString(entry_0.operationalStateLabel.Value());
+ if (newElement_0.operationalStateLabel == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
+ newElement_0.operationalStateLabel = 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::OperationalState::Id: {
+ using TypeInfo = Attributes::OperationalState::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nonnull value;
+ value = [MTRRoboticVacuumOperationalStateClusterOperationalStateStruct new];
+ value.operationalStateID = [NSNumber numberWithUnsignedChar:cppValue.operationalStateID];
+ if (cppValue.operationalStateLabel.HasValue()) {
+ value.operationalStateLabel = AsString(cppValue.operationalStateLabel.Value());
+ if (value.operationalStateLabel == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return nil;
+ }
+ } else {
+ value.operationalStateLabel = nil;
+ }
+ return value;
+ }
+ case Attributes::OperationalError::Id: {
+ using TypeInfo = Attributes::OperationalError::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nonnull value;
+ value = [MTRRoboticVacuumOperationalStateClusterErrorStateStruct new];
+ value.errorStateID = [NSNumber numberWithUnsignedChar:cppValue.errorStateID];
+ if (cppValue.errorStateLabel.HasValue()) {
value.errorStateLabel = AsString(cppValue.errorStateLabel.Value());
if (value.errorStateLabel == nil) {
CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
*aError = err;
return nil;
}
+ } else {
+ value.errorStateLabel = nil;
}
if (cppValue.errorStateDetails.HasValue()) {
value.errorStateDetails = AsString(cppValue.errorStateDetails.Value());
@@ -24288,6 +24591,9 @@ id _Nullable MTRDecodeAttributeValue(const ConcreteAttributePath & aPath, TLV::T
case Clusters::OperationalState::Id: {
return DecodeAttributeValueForOperationalStateCluster(aPath.mAttributeId, aReader, aError);
}
+ case Clusters::RoboticVacuumOperationalState::Id: {
+ return DecodeAttributeValueForRoboticVacuumOperationalStateCluster(aPath.mAttributeId, aReader, aError);
+ }
case Clusters::HepaFilterMonitoring::Id: {
return DecodeAttributeValueForHEPAFilterMonitoringCluster(aPath.mAttributeId, aReader, aError);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index 599499f005e8a3..6a8ead093b0344 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -8736,6 +8736,220 @@ MTR_NEWLY_AVAILABLE
@end
+/**
+ * Cluster Robotic Vacuum Operational State
+ *
+ * This cluster supports remotely monitoring and, where supported, changing the operational state of a Robotic Vacuum.
+ */
+MTR_NEWLY_AVAILABLE
+@interface MTRBaseClusterRoboticVacuumOperationalState : MTRCluster
+
+- (instancetype _Nullable)initWithDevice:(MTRBaseDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER MTR_NEWLY_AVAILABLE;
+
+/**
+ * Command Pause
+ *
+ * Upon receipt, the device SHALL pause its operation if it is possible based on the current function of the server.
+ */
+- (void)pauseWithParams:(MTRRoboticVacuumOperationalStateClusterPauseParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)pauseWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+/**
+ * Command Stop
+ *
+ * Upon receipt, the device SHALL stop its operation if it is at a position where it is safe to do so and/or permitted.
+ */
+- (void)stopWithParams:(MTRRoboticVacuumOperationalStateClusterStopParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)stopWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+/**
+ * Command Start
+ *
+ * Upon receipt, the device SHALL start its operation if it is safe to do so and the device is in an operational state from which it
+ * can be started.
+ */
+- (void)startWithParams:(MTRRoboticVacuumOperationalStateClusterStartParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)startWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+/**
+ * Command Resume
+ *
+ * Upon receipt, the device SHALL resume its operation from the point it was at when it received the Pause command, or from the
+ * point when it was paused by means outside of this cluster (for example by manual button press).
+ */
+- (void)resumeWithParams:(MTRRoboticVacuumOperationalStateClusterResumeParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)resumeWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributePhaseListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributePhaseListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributePhaseListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeCurrentPhaseWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeCurrentPhaseWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeCurrentPhaseWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeCountdownTimeWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeCountdownTimeWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeCountdownTimeWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeOperationalStateListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeOperationalStateListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeOperationalStateListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeOperationalStateWithCompletion:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeOperationalStateWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)
+ readAttributeOperationalStateWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeOperationalErrorWithCompletion:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeOperationalErrorWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeOperationalErrorWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeGeneratedCommandListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeGeneratedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeAcceptedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeAcceptedCommandListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeAcceptedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeEventListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeEventListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeEventListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeAttributeListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeAttributeListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeAttributeListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeFeatureMapWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeFeatureMapWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeFeatureMapWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeClusterRevisionWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeClusterRevisionWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
/**
* Cluster HEPA Filter Monitoring
*
@@ -24439,6 +24653,23 @@ typedef NS_ENUM(uint8_t, MTROperationalState) {
MTROperationalStateError MTR_NEWLY_AVAILABLE = 0x03,
} MTR_NEWLY_AVAILABLE;
+typedef NS_ENUM(uint8_t, MTRRoboticVacuumOperationalStateErrorState) {
+ MTRRoboticVacuumOperationalStateErrorStateFailedToFindChargingDock MTR_NEWLY_AVAILABLE = 0x40,
+ MTRRoboticVacuumOperationalStateErrorStateStuck MTR_NEWLY_AVAILABLE = 0x41,
+ MTRRoboticVacuumOperationalStateErrorStateDustBinMissing MTR_NEWLY_AVAILABLE = 0x42,
+ MTRRoboticVacuumOperationalStateErrorStateDustBinFull MTR_NEWLY_AVAILABLE = 0x43,
+ MTRRoboticVacuumOperationalStateErrorStateWaterTankEmpty MTR_NEWLY_AVAILABLE = 0x44,
+ MTRRoboticVacuumOperationalStateErrorStateWaterTankMissing MTR_NEWLY_AVAILABLE = 0x45,
+ MTRRoboticVacuumOperationalStateErrorStateWaterTankLidOpen MTR_NEWLY_AVAILABLE = 0x46,
+ MTRRoboticVacuumOperationalStateErrorStateMopCleaningPadMissing MTR_NEWLY_AVAILABLE = 0x47,
+} MTR_NEWLY_AVAILABLE;
+
+typedef NS_ENUM(uint8_t, MTRRoboticVacuumOperationalStateOperationalState) {
+ MTRRoboticVacuumOperationalStateOperationalStateSeekingCharger MTR_NEWLY_AVAILABLE = 0x40,
+ MTRRoboticVacuumOperationalStateOperationalStateCharging MTR_NEWLY_AVAILABLE = 0x41,
+ MTRRoboticVacuumOperationalStateOperationalStateDocked MTR_NEWLY_AVAILABLE = 0x42,
+} MTR_NEWLY_AVAILABLE;
+
typedef NS_ENUM(uint8_t, MTRHEPAFilterMonitoringChangeIndication) {
MTRHEPAFilterMonitoringChangeIndicationOK MTR_NEWLY_AVAILABLE = 0x00,
MTRHEPAFilterMonitoringChangeIndicationWarning MTR_NEWLY_AVAILABLE = 0x01,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index cdf9f56791411a..087572b6978dba 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -50705,6 +50705,730 @@ + (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheC
@end
+@implementation MTRBaseClusterRoboticVacuumOperationalState
+
+- (instancetype)initWithDevice:(MTRBaseDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue
+{
+ if (self = [super initWithQueue:queue]) {
+ if (device == nil) {
+ return nil;
+ }
+
+ _device = device;
+ _endpoint = [endpointID unsignedShortValue];
+ }
+ return self;
+}
+
+- (void)pauseWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ [self pauseWithParams:nil completion:completion];
+}
+- (void)pauseWithParams:(MTRRoboticVacuumOperationalStateClusterPauseParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ auto * bridge = new MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackBridge(self.callbackQueue,
+ completion,
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session,
+ RoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackType successCb, MTRErrorCallback failureCb,
+ MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge
+ = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ RoboticVacuumOperationalState::Commands::Pause::Type request;
+ if (params != nil) {
+ if (params.timedInvokeTimeoutMs != nil) {
+ params.timedInvokeTimeoutMs = MTRClampedNumber(params.timedInvokeTimeoutMs, @(1), @(UINT16_MAX));
+ timedInvokeTimeoutMs.SetValue(params.timedInvokeTimeoutMs.unsignedShortValue);
+ }
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)stopWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ [self stopWithParams:nil completion:completion];
+}
+- (void)stopWithParams:(MTRRoboticVacuumOperationalStateClusterStopParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ auto * bridge = new MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackBridge(self.callbackQueue,
+ completion,
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session,
+ RoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackType successCb, MTRErrorCallback failureCb,
+ MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge
+ = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ RoboticVacuumOperationalState::Commands::Stop::Type request;
+ if (params != nil) {
+ if (params.timedInvokeTimeoutMs != nil) {
+ params.timedInvokeTimeoutMs = MTRClampedNumber(params.timedInvokeTimeoutMs, @(1), @(UINT16_MAX));
+ timedInvokeTimeoutMs.SetValue(params.timedInvokeTimeoutMs.unsignedShortValue);
+ }
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)startWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ [self startWithParams:nil completion:completion];
+}
+- (void)startWithParams:(MTRRoboticVacuumOperationalStateClusterStartParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ auto * bridge = new MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackBridge(self.callbackQueue,
+ completion,
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session,
+ RoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackType successCb, MTRErrorCallback failureCb,
+ MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge
+ = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ RoboticVacuumOperationalState::Commands::Start::Type request;
+ if (params != nil) {
+ if (params.timedInvokeTimeoutMs != nil) {
+ params.timedInvokeTimeoutMs = MTRClampedNumber(params.timedInvokeTimeoutMs, @(1), @(UINT16_MAX));
+ timedInvokeTimeoutMs.SetValue(params.timedInvokeTimeoutMs.unsignedShortValue);
+ }
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)resumeWithCompletion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ [self resumeWithParams:nil completion:completion];
+}
+- (void)resumeWithParams:(MTRRoboticVacuumOperationalStateClusterResumeParams * _Nullable)params
+ completion:(void (^)(MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseParams * _Nullable data,
+ NSError * _Nullable error))completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ auto * bridge = new MTRRoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackBridge(self.callbackQueue,
+ completion,
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session,
+ RoboticVacuumOperationalStateClusterOperationalCommandResponseCallbackType successCb, MTRErrorCallback failureCb,
+ MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge
+ = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ RoboticVacuumOperationalState::Commands::Resume::Type request;
+ if (params != nil) {
+ if (params.timedInvokeTimeoutMs != nil) {
+ params.timedInvokeTimeoutMs = MTRClampedNumber(params.timedInvokeTimeoutMs, @(1), @(UINT16_MAX));
+ timedInvokeTimeoutMs.SetValue(params.timedInvokeTimeoutMs.unsignedShortValue);
+ }
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)readAttributePhaseListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::PhaseList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributePhaseListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::PhaseList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributePhaseListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStatePhaseListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStatePhaseListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::PhaseList::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)readAttributeCurrentPhaseWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CurrentPhase::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeCurrentPhaseWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CurrentPhase::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeCurrentPhaseWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRNullableInt8uAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(NullableInt8uAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CurrentPhase::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)readAttributeCountdownTimeWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CountdownTime::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeCountdownTimeWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CountdownTime::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeCountdownTimeWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRNullableInt32uAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(NullableInt32uAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::CountdownTime::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)readAttributeOperationalStateListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalStateList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeOperationalStateListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalStateList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeOperationalStateListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateOperationalStateListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateOperationalStateListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalStateList::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)readAttributeOperationalStateWithCompletion:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalState::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeOperationalStateWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value,
+ NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalState::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished,
+ reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)
+ readAttributeOperationalStateWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterOperationalStateStruct * _Nullable value,
+ NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateOperationalStateStructAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateOperationalStateStructAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalState::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)readAttributeOperationalErrorWithCompletion:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalError::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeOperationalErrorWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value,
+ NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalError::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished,
+ reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeOperationalErrorWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(
+ MTRRoboticVacuumOperationalStateClusterErrorStateStruct * _Nullable value,
+ NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateOperationalErrorStructAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateOperationalErrorStructAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::OperationalError::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];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::GeneratedCommandList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeGeneratedCommandListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::GeneratedCommandList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeGeneratedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateGeneratedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateGeneratedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::GeneratedCommandList::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)readAttributeAcceptedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AcceptedCommandList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeAcceptedCommandListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AcceptedCommandList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeAcceptedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateAcceptedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateAcceptedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AcceptedCommandList::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)readAttributeEventListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::EventList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeEventListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::EventList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeEventListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateEventListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateEventListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::EventList::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)readAttributeAttributeListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AttributeList::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeAttributeListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AttributeList::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeAttributeListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRRoboticVacuumOperationalStateAttributeListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(RoboticVacuumOperationalStateAttributeListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = RoboticVacuumOperationalState::Attributes::AttributeList::TypeInfo;
+ path.mEndpointId = static_cast([endpoint unsignedShortValue]);
+ path.mClusterId = TypeInfo::GetClusterId();
+ path.mAttributeId = TypeInfo::GetAttributeId();
+ TypeInfo::DecodableType value;
+ CHIP_ERROR err = clusterStateCacheContainer.cppClusterStateCache->Get