diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index ab4f3de15b9b35..14146339d5844b 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -194,6 +194,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/user-label-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/unit-localization-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/window-covering.xml \
src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml \
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
index ed3dc867e2756b..bb09a9a98e1500 100644
--- a/scripts/rules.matterlint
+++ b/scripts/rules.matterlint
@@ -76,6 +76,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/time-synchronization-cluster.
load "../src/app/zap-templates/zcl/data-model/chip/unit-localization-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/user-label-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/window-covering.xml";
load "../src/app/zap-templates/zcl/data-model/chip/temperature-control-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 d4d49c443acffa..849921d488c814 100644
--- a/src/app/zap-templates/zcl/data-model/all.xml
+++ b/src/app/zap-templates/zcl/data-model/all.xml
@@ -79,6 +79,7 @@
+
diff --git a/src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml
new file mode 100644
index 00000000000000..16ca9a02487e3b
--- /dev/null
+++ b/src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Appliances
+ Washer Controls
+ 0x0053
+ WASHER_CONTROLS_CLUSTER
+ true
+ true
+ This cluster supports remotely monitoring and controling the different typs of functionality available to a washing device, such as a washing machine.
+
+
+
+ SpinSpeeds
+ SpinSpeedCurrent
+ NumberOfRinses
+ MaxRinses
+
+
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 1ebbd0f4ced8cf..24be37cd01d7d1 100644
--- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json
+++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
@@ -98,6 +98,7 @@
"user-label-cluster.xml",
"unit-localization-cluster.xml",
"wake-on-lan-cluster.xml",
+ "washer-controls-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"window-covering.xml",
"matter-devices.xml",
diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json
index 1cbccecf893cd9..220ce3a3c9574f 100644
--- a/src/app/zap-templates/zcl/zcl.json
+++ b/src/app/zap-templates/zcl/zcl.json
@@ -96,6 +96,7 @@
"user-label-cluster.xml",
"unit-localization-cluster.xml",
"wake-on-lan-cluster.xml",
+ "washer-controls-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"window-covering.xml",
"matter-devices.xml",
diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json
index 82ded1f35ae02e..ae3c9ff51732e2 100644
--- a/src/app/zap_cluster_list.json
+++ b/src/app/zap_cluster_list.json
@@ -139,6 +139,7 @@
"UV_FILTER_MONITORING_CLUSTER": [],
"TVOC_CONCENTRATION_MEASUREMENT_CLUSTER": [],
"WAKE_ON_LAN_CLUSTER": [],
+ "WASHER_CONTROLS_CLUSTER": [],
"WATER_TANK_MONITORING_CLUSTER": [],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": [],
"WINDOW_COVERING_CLUSTER": [],
diff --git a/src/controller/data_model/BUILD.gn b/src/controller/data_model/BUILD.gn
index 8285034a4bbb43..88eee715a7f08f 100644
--- a/src/controller/data_model/BUILD.gn
+++ b/src/controller/data_model/BUILD.gn
@@ -296,6 +296,8 @@ if (current_os == "android" || matter_enable_java_compilation) {
"jni/UvFilterMonitoringClient-ReadImpl.cpp",
"jni/WakeOnLanClient-InvokeSubscribeImpl.cpp",
"jni/WakeOnLanClient-ReadImpl.cpp",
+ "jni/WasherControlsClient-InvokeSubscribeImpl.cpp",
+ "jni/WasherControlsClient-ReadImpl.cpp",
"jni/WaterTankMonitoringClient-InvokeSubscribeImpl.cpp",
"jni/WaterTankMonitoringClient-ReadImpl.cpp",
"jni/WiFiNetworkDiagnosticsClient-InvokeSubscribeImpl.cpp",
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 4558af906a6193..8515fe3b3d9d41 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -2943,6 +2943,25 @@ client cluster RefrigeratorAndTemperatureControlledCabinetModeSelect = 82 {
command ChangeToModeWithStatus(ChangeToModeWithStatusRequest): ChangeToModeResponse = 1;
}
+/** This cluster supports remotely monitoring and controling the different typs of functionality available to a washing device, such as a washing machine. */
+client cluster WasherControls = 83 {
+ bitmap Feature : BITMAP32 {
+ kSpin = 0x1;
+ kRinse = 0x2;
+ }
+
+ readonly attribute optional CHAR_STRING spinSpeeds[] = 0;
+ attribute optional nullable int8u spinSpeedCurrent = 1;
+ attribute optional nullable int8u numberOfRinses = 2;
+ readonly attribute optional int8u maxRinses = 3;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
/** This cluster is an alias of the Mode Select cluster which also defines a namespace for the running modes of the Robotic Vacuum Cleaner devices. */
client cluster RvcRunModeSelect = 84 {
enum ModeTag : ENUM16 {
diff --git a/src/controller/data_model/controller-clusters.zap b/src/controller/data_model/controller-clusters.zap
index 11d295f782cfa2..c393c9e320bc7f 100644
--- a/src/controller/data_model/controller-clusters.zap
+++ b/src/controller/data_model/controller-clusters.zap
@@ -10724,20 +10724,28 @@
]
},
{
- "name": "Refrigerator Alarm",
- "code": 87,
+ "name": "Laundry Washer Mode Select",
+ "code": 81,
"mfgCode": null,
- "define": "REFRIGERATOR_ALARM",
+ "define": "LAUNDRY_WASHER_MODE_SELECT_CLUSTER",
"side": "client",
"enabled": 1,
"commands": [
{
- "name": "Reset",
+ "name": "ChangeToMode",
"code": 0,
"mfgCode": null,
"source": "client",
"incoming": 0,
"outgoing": 1
+ },
+ {
+ "name": "ChangeToModeWithStatus",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
}
],
"attributes": [
@@ -10751,7 +10759,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "2",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -10776,56 +10784,98 @@
]
},
{
- "name": "Refrigerator Alarm",
- "code": 87,
+ "name": "Laundry Washer Mode Select",
+ "code": 81,
"mfgCode": null,
- "define": "REFRIGERATOR_ALARM",
+ "define": "LAUNDRY_WASHER_MODE_SELECT_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [
+ {
+ "name": "ChangeToModeResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
"attributes": [
{
- "name": "Mask",
+ "name": "Description",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "AlarmMap",
+ "type": "char_string",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "Latch",
- "code": 1,
+ "name": "SupportedModes",
+ "code": 2,
"mfgCode": null,
"side": "server",
- "type": "AlarmMap",
+ "type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "State",
- "code": 2,
+ "name": "CurrentMode",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "AlarmMap",
+ "type": "int8u",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "StartUpMode",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OnMode",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -10930,12 +10980,30 @@
]
},
{
- "name": "Air Quality",
- "code": 91,
+ "name": "Refrigerator And Temperature Controlled Cabinet Mode Select",
+ "code": 82,
"mfgCode": null,
- "define": "AIR_QUALITY_CLUSTER",
+ "define": "REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER",
"side": "client",
"enabled": 1,
+ "commands": [
+ {
+ "name": "ChangeToMode",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ChangeToModeWithStatus",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "FeatureMap",
@@ -10947,7 +11015,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "2",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -10972,24 +11040,98 @@
]
},
{
- "name": "Air Quality",
- "code": 91,
+ "name": "Refrigerator And Temperature Controlled Cabinet Mode Select",
+ "code": 82,
"mfgCode": null,
- "define": "AIR_QUALITY_CLUSTER",
+ "define": "REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [
+ {
+ "name": "ChangeToModeResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
"attributes": [
{
- "name": "AirQuality",
+ "name": "Description",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "AirQualityEnum",
+ "type": "char_string",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportedModes",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentMode",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "StartUpMode",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OnMode",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11094,22 +11236,12 @@
]
},
{
- "name": "Smoke CO Alarm",
- "code": 92,
+ "name": "Washer Controls",
+ "code": 83,
"mfgCode": null,
- "define": "SMOKE_CO_ALARM_CLUSTER",
+ "define": "WASHER_CONTROLS_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "SelfTestRequest",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -11117,7 +11249,7 @@
"mfgCode": null,
"side": "client",
"type": "bitmap32",
- "included": 0,
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11139,27 +11271,27 @@
"bounded": 0,
"defaultValue": "1",
"reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
+ "minInterval": 1,
+ "maxInterval": 65534,
"reportableChange": 0
}
]
},
{
- "name": "Smoke CO Alarm",
- "code": 92,
+ "name": "Washer Controls",
+ "code": 83,
"mfgCode": null,
- "define": "SMOKE_CO_ALARM_CLUSTER",
+ "define": "WASHER_CONTROLS_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
{
- "name": "ExpressedState",
+ "name": "SpinSpeeds",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "ExpressedStateEnum",
- "included": 1,
+ "type": "array",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11170,11 +11302,11 @@
"reportableChange": 0
},
{
- "name": "SmokeState",
+ "name": "SpinSpeedCurrent",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "AlarmStateEnum",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11186,11 +11318,11 @@
"reportableChange": 0
},
{
- "name": "COState",
+ "name": "NumberOfRinses",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "AlarmStateEnum",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11202,12 +11334,12 @@
"reportableChange": 0
},
{
- "name": "BatteryAlert",
+ "name": "MaxRinses",
"code": 3,
"mfgCode": null,
"side": "server",
- "type": "AlarmStateEnum",
- "included": 1,
+ "type": "int8u",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11218,12 +11350,12 @@
"reportableChange": 0
},
{
- "name": "DeviceMuted",
- "code": 4,
+ "name": "GeneratedCommandList",
+ "code": 65528,
"mfgCode": null,
"side": "server",
- "type": "MuteStateEnum",
- "included": 0,
+ "type": "array",
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11234,11 +11366,11 @@
"reportableChange": 0
},
{
- "name": "TestInProgress",
- "code": 5,
+ "name": "AcceptedCommandList",
+ "code": 65529,
"mfgCode": null,
"side": "server",
- "type": "boolean",
+ "type": "array",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -11250,11 +11382,11 @@
"reportableChange": 0
},
{
- "name": "HardwareFaultAlert",
- "code": 6,
+ "name": "EventList",
+ "code": 65530,
"mfgCode": null,
"side": "server",
- "type": "boolean",
+ "type": "array",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -11266,11 +11398,11 @@
"reportableChange": 0
},
{
- "name": "EndOfServiceAlert",
- "code": 7,
+ "name": "AttributeList",
+ "code": 65531,
"mfgCode": null,
"side": "server",
- "type": "EndOfServiceEnum",
+ "type": "array",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -11282,12 +11414,124 @@
"reportableChange": 0
},
{
- "name": "InterconnectSmokeAlarm",
- "code": 8,
+ "name": "FeatureMap",
+ "code": 65532,
"mfgCode": null,
"side": "server",
- "type": "AlarmStateEnum",
- "included": 0,
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "RVC Run Mode Select",
+ "code": 84,
+ "mfgCode": null,
+ "define": "RVC_RUN_MODE_SELECT_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ChangeToMode",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ChangeToModeWithStatus",
+ "code": 1,
+ "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": "2",
+ "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": "RVC Run Mode Select",
+ "code": 84,
+ "mfgCode": null,
+ "define": "RVC_RUN_MODE_SELECT_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ChangeToModeResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Description",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11298,12 +11542,28 @@
"reportableChange": 0
},
{
- "name": "InterconnectCOAlarm",
- "code": 9,
+ "name": "SupportedModes",
+ "code": 2,
"mfgCode": null,
"side": "server",
- "type": "AlarmStateEnum",
- "included": 0,
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentMode",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -11314,11 +11574,11 @@
"reportableChange": 0
},
{
- "name": "ContaminationState",
- "code": 10,
+ "name": "StartUpMode",
+ "code": 4,
"mfgCode": null,
"side": "server",
- "type": "ContaminationStateEnum",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11330,11 +11590,11 @@
"reportableChange": 0
},
{
- "name": "SensitivityLevel",
- "code": 11,
+ "name": "OnMode",
+ "code": 5,
"mfgCode": null,
"side": "server",
- "type": "SensitivityEnum",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11419,7 +11679,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11444,12 +11704,30 @@
]
},
{
- "name": "Operational State",
- "code": 96,
+ "name": "RVC Clean Mode Select",
+ "code": 85,
"mfgCode": null,
- "define": "OPERATIONAL_STATE_CLUSTER",
+ "define": "RVC_CLEAN_MODE_SELECT_CLUSTER",
"side": "client",
"enabled": 1,
+ "commands": [
+ {
+ "name": "ChangeToMode",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ChangeToModeWithStatus",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "FeatureMap",
@@ -11461,7 +11739,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "2",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11486,18 +11764,44 @@
]
},
{
- "name": "Operational State",
- "code": 96,
+ "name": "RVC Clean Mode Select",
+ "code": 85,
"mfgCode": null,
- "define": "OPERATIONAL_STATE_CLUSTER",
+ "define": "RVC_CLEAN_MODE_SELECT_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [
+ {
+ "name": "ChangeToModeResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
"attributes": [
{
- "name": "PhaseList",
+ "name": "Description",
"code": 0,
"mfgCode": null,
"side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportedModes",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
"type": "array",
"included": 1,
"storageOption": "External",
@@ -11510,8 +11814,8 @@
"reportableChange": 0
},
{
- "name": "CurrentPhase",
- "code": 1,
+ "name": "CurrentMode",
+ "code": 3,
"mfgCode": null,
"side": "server",
"type": "int8u",
@@ -11526,11 +11830,11 @@
"reportableChange": 0
},
{
- "name": "CountdownTime",
- "code": 2,
+ "name": "StartUpMode",
+ "code": 4,
"mfgCode": null,
"side": "server",
- "type": "elapsed_s",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11542,8 +11846,24 @@
"reportableChange": 0
},
{
- "name": "OperationalStateList",
- "code": 3,
+ "name": "OnMode",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
"mfgCode": null,
"side": "server",
"type": "array",
@@ -11558,32 +11878,190 @@
"reportableChange": 0
},
{
- "name": "OperationalState",
- "code": 4,
+ "name": "AcceptedCommandList",
+ "code": 65529,
"mfgCode": null,
"side": "server",
- "type": "OperationalStateStruct",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Refrigerator Alarm",
+ "code": 87,
+ "mfgCode": null,
+ "define": "REFRIGERATOR_ALARM",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Reset",
+ "code": 0,
+ "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": "Refrigerator Alarm",
+ "code": 87,
+ "mfgCode": null,
+ "define": "REFRIGERATOR_ALARM",
+ "side": "server",
+ "enabled": 0,
+ "attributes": [
+ {
+ "name": "Mask",
+ "code": 0,
+ "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": "Latch",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "AlarmMap",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OperationalError",
- "code": 5,
+ "name": "State",
+ "code": 2,
"mfgCode": null,
"side": "server",
- "type": "ErrorStateStruct",
+ "type": "AlarmMap",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11688,12 +12166,30 @@
]
},
{
- "name": "HEPA Filter Monitoring",
- "code": 113,
+ "name": "Dishwasher Mode Select",
+ "code": 89,
"mfgCode": null,
- "define": "HEPA_FILTER_MONITORING_CLUSTER",
+ "define": "DISHWASHER_MODE_SELECT_CLUSTER",
"side": "client",
"enabled": 1,
+ "commands": [
+ {
+ "name": "ChangeToMode",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ChangeToModeWithStatus",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "FeatureMap",
@@ -11705,7 +12201,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "2",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11730,19 +12226,29 @@
]
},
{
- "name": "HEPA Filter Monitoring",
- "code": 113,
+ "name": "Dishwasher Mode Select",
+ "code": 89,
"mfgCode": null,
- "define": "HEPA_FILTER_MONITORING_CLUSTER",
+ "define": "DISHWASHER_MODE_SELECT_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [
+ {
+ "name": "ChangeToModeResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
"attributes": [
{
- "name": "Condition",
+ "name": "Description",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "percent",
+ "type": "char_string",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -11754,13 +12260,13 @@
"reportableChange": 0
},
{
- "name": "DegradationDirection",
- "code": 1,
+ "name": "SupportedModes",
+ "code": 2,
"mfgCode": null,
"side": "server",
- "type": "DegradationDirectionEnum",
+ "type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11770,27 +12276,43 @@
"reportableChange": 0
},
{
- "name": "ChangeIndication",
- "code": 2,
+ "name": "CurrentMode",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "ChangeIndicationEnum",
+ "type": "int8u",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "InPlaceIndicator",
- "code": 3,
+ "name": "StartUpMode",
+ "code": 4,
"mfgCode": null,
"side": "server",
- "type": "boolean",
+ "type": "int8u",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OnMode",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -11900,10 +12422,10 @@
]
},
{
- "name": "Activated Carbon Filter Monitoring",
- "code": 114,
+ "name": "Air Quality",
+ "code": 91,
"mfgCode": null,
- "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER",
+ "define": "AIR_QUALITY_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -11942,51 +12464,19 @@
]
},
{
- "name": "Activated Carbon Filter Monitoring",
- "code": 114,
+ "name": "Air Quality",
+ "code": 91,
"mfgCode": null,
- "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER",
+ "define": "AIR_QUALITY_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
{
- "name": "Condition",
+ "name": "AirQuality",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "percent",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "DegradationDirection",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "DegradationDirectionEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ChangeIndication",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "ChangeIndicationEnum",
+ "type": "AirQualityEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -11997,22 +12487,6 @@
"maxInterval": 65534,
"reportableChange": 0
},
- {
- "name": "InPlaceIndicator",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -12112,12 +12586,22 @@
]
},
{
- "name": "Ceramic Filter Monitoring",
- "code": 115,
+ "name": "Smoke CO Alarm",
+ "code": 92,
"mfgCode": null,
- "define": "CERAMIC_FILTER_MONITORING_CLUSTER",
+ "define": "SMOKE_CO_ALARM_CLUSTER",
"side": "client",
"enabled": 1,
+ "commands": [
+ {
+ "name": "SelfTestRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "FeatureMap",
@@ -12125,7 +12609,7 @@
"mfgCode": null,
"side": "client",
"type": "bitmap32",
- "included": 1,
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -12141,98 +12625,34 @@
"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": "Ceramic Filter Monitoring",
- "code": 115,
- "mfgCode": null,
- "define": "CERAMIC_FILTER_MONITORING_CLUSTER",
- "side": "server",
- "enabled": 0,
- "attributes": [
- {
- "name": "Condition",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "percent",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "DegradationDirection",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "DegradationDirectionEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ChangeIndication",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "ChangeIndicationEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "InPlaceIndicator",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 0,
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "1",
"reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
+ "minInterval": 0,
+ "maxInterval": 65344,
"reportableChange": 0
- },
+ }
+ ]
+ },
+ {
+ "name": "Smoke CO Alarm",
+ "code": 92,
+ "mfgCode": null,
+ "define": "SMOKE_CO_ALARM_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "attributes": [
{
- "name": "GeneratedCommandList",
- "code": 65528,
+ "name": "ExpressedState",
+ "code": 0,
"mfgCode": null,
"side": "server",
- "type": "array",
+ "type": "ExpressedStateEnum",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -12242,13 +12662,13 @@
"reportableChange": 0
},
{
- "name": "AcceptedCommandList",
- "code": 65529,
+ "name": "SmokeState",
+ "code": 1,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
+ "type": "AlarmStateEnum",
+ "included": 0,
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -12258,13 +12678,13 @@
"reportableChange": 0
},
{
- "name": "EventList",
- "code": 65530,
+ "name": "COState",
+ "code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
+ "type": "AlarmStateEnum",
+ "included": 0,
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -12274,13 +12694,13 @@
"reportableChange": 0
},
{
- "name": "AttributeList",
- "code": 65531,
+ "name": "BatteryAlert",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "array",
+ "type": "AlarmStateEnum",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -12290,96 +12710,76 @@
"reportableChange": 0
},
{
- "name": "FeatureMap",
- "code": 65532,
+ "name": "DeviceMuted",
+ "code": 4,
"mfgCode": null,
"side": "server",
- "type": "bitmap32",
- "included": 1,
+ "type": "MuteStateEnum",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "ClusterRevision",
- "code": 65533,
+ "name": "TestInProgress",
+ "code": 5,
"mfgCode": null,
"side": "server",
- "type": "int16u",
+ "type": "boolean",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "Electrostatic Filter Monitoring",
- "code": 116,
- "mfgCode": null,
- "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER",
- "side": "client",
- "enabled": 1,
- "attributes": [
+ },
{
- "name": "FeatureMap",
- "code": 65532,
+ "name": "HardwareFaultAlert",
+ "code": 6,
"mfgCode": null,
- "side": "client",
- "type": "bitmap32",
+ "side": "server",
+ "type": "boolean",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "ClusterRevision",
- "code": 65533,
+ "name": "EndOfServiceAlert",
+ "code": 7,
"mfgCode": null,
- "side": "client",
- "type": "int16u",
+ "side": "server",
+ "type": "EndOfServiceEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "Electrostatic Filter Monitoring",
- "code": 116,
- "mfgCode": null,
- "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER",
- "side": "server",
- "enabled": 0,
- "attributes": [
+ },
{
- "name": "Condition",
- "code": 0,
+ "name": "InterconnectSmokeAlarm",
+ "code": 8,
"mfgCode": null,
"side": "server",
- "type": "percent",
- "included": 1,
+ "type": "AlarmStateEnum",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -12390,12 +12790,12 @@
"reportableChange": 0
},
{
- "name": "DegradationDirection",
- "code": 1,
+ "name": "InterconnectCOAlarm",
+ "code": 9,
"mfgCode": null,
"side": "server",
- "type": "DegradationDirectionEnum",
- "included": 1,
+ "type": "AlarmStateEnum",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -12406,27 +12806,27 @@
"reportableChange": 0
},
{
- "name": "ChangeIndication",
- "code": 2,
+ "name": "ContaminationState",
+ "code": 10,
"mfgCode": null,
"side": "server",
- "type": "ChangeIndicationEnum",
- "included": 1,
+ "type": "ContaminationStateEnum",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "InPlaceIndicator",
- "code": 3,
+ "name": "SensitivityLevel",
+ "code": 11,
"mfgCode": null,
"side": "server",
- "type": "boolean",
+ "type": "SensitivityEnum",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -12511,7 +12911,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "1",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -12536,10 +12936,10 @@
]
},
{
- "name": "UV Filter Monitoring",
- "code": 117,
+ "name": "Operational State",
+ "code": 96,
"mfgCode": null,
- "define": "UV_FILTER_MONITORING_CLUSTER",
+ "define": "OPERATIONAL_STATE_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -12578,21 +12978,21 @@
]
},
{
- "name": "UV Filter Monitoring",
- "code": 117,
+ "name": "Operational State",
+ "code": 96,
"mfgCode": null,
- "define": "UV_FILTER_MONITORING_CLUSTER",
+ "define": "OPERATIONAL_STATE_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
{
- "name": "Condition",
+ "name": "PhaseList",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "percent",
+ "type": "array",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -12602,11 +13002,11 @@
"reportableChange": 0
},
{
- "name": "DegradationDirection",
+ "name": "CurrentPhase",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "DegradationDirectionEnum",
+ "type": "int8u",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -12618,29 +13018,61 @@
"reportableChange": 0
},
{
- "name": "ChangeIndication",
+ "name": "CountdownTime",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "ChangeIndicationEnum",
- "included": 1,
+ "type": "elapsed_s",
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "InPlaceIndicator",
+ "name": "OperationalStateList",
"code": 3,
"mfgCode": null,
"side": "server",
- "type": "boolean",
- "included": 0,
- "storageOption": "RAM",
+ "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": "",
@@ -12748,10 +13180,10 @@
]
},
{
- "name": "Ionizing Filter Monitoring",
- "code": 118,
+ "name": "HEPA Filter Monitoring",
+ "code": 113,
"mfgCode": null,
- "define": "IONIZING_FILTER_MONITORING_CLUSTER",
+ "define": "HEPA_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -12790,10 +13222,10 @@
]
},
{
- "name": "Ionizing Filter Monitoring",
- "code": 118,
+ "name": "HEPA Filter Monitoring",
+ "code": 113,
"mfgCode": null,
- "define": "IONIZING_FILTER_MONITORING_CLUSTER",
+ "define": "HEPA_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -12960,10 +13392,10 @@
]
},
{
- "name": "Zeolite Filter Monitoring",
- "code": 119,
+ "name": "Activated Carbon Filter Monitoring",
+ "code": 114,
"mfgCode": null,
- "define": "ZEOLITE_FILTER_MONITORING_CLUSTER",
+ "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -13002,10 +13434,10 @@
]
},
{
- "name": "Zeolite Filter Monitoring",
- "code": 119,
+ "name": "Activated Carbon Filter Monitoring",
+ "code": 114,
"mfgCode": null,
- "define": "ZEOLITE_FILTER_MONITORING_CLUSTER",
+ "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -13172,10 +13604,10 @@
]
},
{
- "name": "Ozone Filter Monitoring",
- "code": 120,
+ "name": "Ceramic Filter Monitoring",
+ "code": 115,
"mfgCode": null,
- "define": "OZONE_FILTER_MONITORING_CLUSTER",
+ "define": "CERAMIC_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -13214,10 +13646,10 @@
]
},
{
- "name": "Ozone Filter Monitoring",
- "code": 120,
+ "name": "Ceramic Filter Monitoring",
+ "code": 115,
"mfgCode": null,
- "define": "OZONE_FILTER_MONITORING_CLUSTER",
+ "define": "CERAMIC_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -13384,10 +13816,10 @@
]
},
{
- "name": "Water Tank Monitoring",
- "code": 121,
+ "name": "Electrostatic Filter Monitoring",
+ "code": 116,
"mfgCode": null,
- "define": "WATER_TANK_MONITORING_CLUSTER",
+ "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -13426,10 +13858,10 @@
]
},
{
- "name": "Water Tank Monitoring",
- "code": 121,
+ "name": "Electrostatic Filter Monitoring",
+ "code": 116,
"mfgCode": null,
- "define": "WATER_TANK_MONITORING_CLUSTER",
+ "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -13596,10 +14028,10 @@
]
},
{
- "name": "Fuel Tank Monitoring",
- "code": 122,
+ "name": "UV Filter Monitoring",
+ "code": 117,
"mfgCode": null,
- "define": "FUEL_TANK_MONITORING_CLUSTER",
+ "define": "UV_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -13638,10 +14070,10 @@
]
},
{
- "name": "Fuel Tank Monitoring",
- "code": 122,
+ "name": "UV Filter Monitoring",
+ "code": 117,
"mfgCode": null,
- "define": "FUEL_TANK_MONITORING_CLUSTER",
+ "define": "UV_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -13808,10 +14240,10 @@
]
},
{
- "name": "Ink Cartridge Monitoring",
- "code": 123,
+ "name": "Ionizing Filter Monitoring",
+ "code": 118,
"mfgCode": null,
- "define": "INK_CARTRIDGE_MONITORING_CLUSTER",
+ "define": "IONIZING_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -13850,10 +14282,10 @@
]
},
{
- "name": "Ink Cartridge Monitoring",
- "code": 123,
+ "name": "Ionizing Filter Monitoring",
+ "code": 118,
"mfgCode": null,
- "define": "INK_CARTRIDGE_MONITORING_CLUSTER",
+ "define": "IONIZING_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -14020,10 +14452,10 @@
]
},
{
- "name": "Toner Cartridge Monitoring",
- "code": 124,
+ "name": "Zeolite Filter Monitoring",
+ "code": 119,
"mfgCode": null,
- "define": "TONER_CARTRIDGE_MONITORING_CLUSTER",
+ "define": "ZEOLITE_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
"attributes": [
@@ -14062,10 +14494,10 @@
]
},
{
- "name": "Toner Cartridge Monitoring",
- "code": 124,
+ "name": "Zeolite Filter Monitoring",
+ "code": 119,
"mfgCode": null,
- "define": "TONER_CARTRIDGE_MONITORING_CLUSTER",
+ "define": "ZEOLITE_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
"attributes": [
@@ -14232,30 +14664,12 @@
]
},
{
- "name": "Laundry Washer",
- "code": 81,
+ "name": "Ozone Filter Monitoring",
+ "code": 120,
"mfgCode": null,
- "define": "LAUNDRY_WASHER_MODE_SELECT_CLUSTER",
+ "define": "OZONE_FILTER_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "ChangeToMode",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ChangeToModeWithStatus",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -14267,7 +14681,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -14292,29 +14706,19 @@
]
},
{
- "name": "Laundry Washer",
- "code": 81,
+ "name": "Ozone Filter Monitoring",
+ "code": 120,
"mfgCode": null,
- "define": "LAUNDRY_WASHER_MODE_SELECT_CLUSTER",
+ "define": "OZONE_FILTER_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "ChangeToModeResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
- "name": "Description",
+ "name": "Condition",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "char_string",
+ "type": "percent",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14326,11 +14730,11 @@
"reportableChange": 0
},
{
- "name": "StandardNamespace",
+ "name": "DegradationDirection",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum16",
+ "type": "DegradationDirectionEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14342,59 +14746,27 @@
"reportableChange": 0
},
{
- "name": "SupportedModes",
+ "name": "ChangeIndication",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "CurrentMode",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
+ "type": "ChangeIndicationEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "StartUpMode",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OnMode",
- "code": 5,
+ "name": "InPlaceIndicator",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "boolean",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -14504,30 +14876,12 @@
]
},
{
- "name": "Refrigerator And Temperature Controlled Cabinet",
- "code": 82,
+ "name": "Water Tank Monitoring",
+ "code": 121,
"mfgCode": null,
- "define": "REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER",
+ "define": "WATER_TANK_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "ChangeToMode",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ChangeToModeWithStatus",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -14539,7 +14893,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -14564,29 +14918,19 @@
]
},
{
- "name": "Refrigerator And Temperature Controlled Cabinet",
- "code": 82,
+ "name": "Water Tank Monitoring",
+ "code": 121,
"mfgCode": null,
- "define": "REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER",
+ "define": "WATER_TANK_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "ChangeToModeResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
- "name": "Description",
+ "name": "Condition",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "char_string",
+ "type": "percent",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14598,11 +14942,11 @@
"reportableChange": 0
},
{
- "name": "StandardNamespace",
+ "name": "DegradationDirection",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum16",
+ "type": "DegradationDirectionEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14614,59 +14958,27 @@
"reportableChange": 0
},
{
- "name": "SupportedModes",
+ "name": "ChangeIndication",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "CurrentMode",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
+ "type": "ChangeIndicationEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "StartUpMode",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OnMode",
- "code": 5,
+ "name": "InPlaceIndicator",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "boolean",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -14776,30 +15088,12 @@
]
},
{
- "name": "RVC Run",
- "code": 84,
+ "name": "Fuel Tank Monitoring",
+ "code": 122,
"mfgCode": null,
- "define": "RVC_RUN_MODE_SELECT_CLUSTER",
+ "define": "FUEL_TANK_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "ChangeToMode",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ChangeToModeWithStatus",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -14811,7 +15105,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -14836,29 +15130,19 @@
]
},
{
- "name": "RVC Run",
- "code": 84,
+ "name": "Fuel Tank Monitoring",
+ "code": 122,
"mfgCode": null,
- "define": "RVC_RUN_MODE_SELECT_CLUSTER",
+ "define": "FUEL_TANK_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "ChangeToModeResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
- "name": "Description",
+ "name": "Condition",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "char_string",
+ "type": "percent",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14870,11 +15154,11 @@
"reportableChange": 0
},
{
- "name": "StandardNamespace",
+ "name": "DegradationDirection",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum16",
+ "type": "DegradationDirectionEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14886,59 +15170,27 @@
"reportableChange": 0
},
{
- "name": "SupportedModes",
+ "name": "ChangeIndication",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "CurrentMode",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
+ "type": "ChangeIndicationEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "StartUpMode",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OnMode",
- "code": 5,
+ "name": "InPlaceIndicator",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "boolean",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -15048,30 +15300,12 @@
]
},
{
- "name": "RVC Clean",
- "code": 85,
+ "name": "Ink Cartridge Monitoring",
+ "code": 123,
"mfgCode": null,
- "define": "RVC_CLEAN_MODE_SELECT_CLUSTER",
+ "define": "INK_CARTRIDGE_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "ChangeToMode",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ChangeToModeWithStatus",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -15083,7 +15317,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -15108,29 +15342,19 @@
]
},
{
- "name": "RVC Clean",
- "code": 85,
+ "name": "Ink Cartridge Monitoring",
+ "code": 123,
"mfgCode": null,
- "define": "RVC_CLEAN_MODE_SELECT_CLUSTER",
+ "define": "INK_CARTRIDGE_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "ChangeToModeResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
- "name": "Description",
+ "name": "Condition",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "char_string",
+ "type": "percent",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -15142,11 +15366,11 @@
"reportableChange": 0
},
{
- "name": "StandardNamespace",
+ "name": "DegradationDirection",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum16",
+ "type": "DegradationDirectionEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -15158,59 +15382,27 @@
"reportableChange": 0
},
{
- "name": "SupportedModes",
+ "name": "ChangeIndication",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "CurrentMode",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
+ "type": "ChangeIndicationEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "StartUpMode",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OnMode",
- "code": 5,
+ "name": "InPlaceIndicator",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "boolean",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -15320,30 +15512,12 @@
]
},
{
- "name": "Dishwasher Mode Select",
- "code": 89,
+ "name": "Toner Cartridge Monitoring",
+ "code": 124,
"mfgCode": null,
- "define": "DISHWASHER_MODE_SELECT_CLUSTER",
+ "define": "TONER_CARTRIDGE_MONITORING_CLUSTER",
"side": "client",
"enabled": 1,
- "commands": [
- {
- "name": "ChangeToMode",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ChangeToModeWithStatus",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "FeatureMap",
@@ -15355,7 +15529,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -15380,29 +15554,19 @@
]
},
{
- "name": "Dishwasher Mode Select",
- "code": 89,
+ "name": "Toner Cartridge Monitoring",
+ "code": 124,
"mfgCode": null,
- "define": "DISHWASHER_MODE_SELECT_CLUSTER",
+ "define": "TONER_CARTRIDGE_MONITORING_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "ChangeToModeResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
- "name": "Description",
+ "name": "Condition",
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "char_string",
+ "type": "percent",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -15414,11 +15578,11 @@
"reportableChange": 0
},
{
- "name": "StandardNamespace",
+ "name": "DegradationDirection",
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum16",
+ "type": "DegradationDirectionEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -15430,59 +15594,27 @@
"reportableChange": 0
},
{
- "name": "SupportedModes",
+ "name": "ChangeIndication",
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "CurrentMode",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
+ "type": "ChangeIndicationEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "StartUpMode",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 0,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
},
{
- "name": "OnMode",
- "code": 5,
+ "name": "InPlaceIndicator",
+ "code": 3,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "boolean",
"included": 0,
"storageOption": "RAM",
"singleton": 0,
@@ -38560,5 +38692,6 @@
"endpointVersion": 1,
"deviceIdentifier": 22
}
- ]
+ ],
+ "log": []
}
\ No newline at end of file
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
index 3aba2a39faee22..f95bd3e9867c45 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
@@ -160,6 +160,9 @@ public static BaseCluster getCluster(long clusterId) {
if (clusterId == RefrigeratorAndTemperatureControlledCabinetModeSelect.ID) {
return new RefrigeratorAndTemperatureControlledCabinetModeSelect();
}
+ if (clusterId == WasherControls.ID) {
+ return new WasherControls();
+ }
if (clusterId == RvcRunModeSelect.ID) {
return new RvcRunModeSelect();
}
@@ -6612,6 +6615,110 @@ public long getCommandID(String name) throws IllegalArgumentException {
return Command.valueOf(name).getID();
}
}
+ public static class WasherControls implements BaseCluster {
+ public static final long ID = 83L;
+ public long getID() {
+ return ID;
+ }
+
+ public enum Attribute {
+ SpinSpeeds(0L),
+ SpinSpeedCurrent(1L),
+ NumberOfRinses(2L),
+ MaxRinses(3L),
+ GeneratedCommandList(65528L),
+ AcceptedCommandList(65529L),
+ EventList(65530L),
+ AttributeList(65531L),
+ FeatureMap(65532L),
+ ClusterRevision(65533L),;
+ private final long id;
+ Attribute(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Attribute value(long id) throws NoSuchFieldError {
+ for (Attribute attribute : Attribute.values()) {
+ if (attribute.getID() == id) {
+ return attribute;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Event {;
+ private final long id;
+ Event(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Event value(long id) throws NoSuchFieldError {
+ for (Event event : Event.values()) {
+ if (event.getID() == id) {
+ return event;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Command {;
+ 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 RvcRunModeSelect implements BaseCluster {
public static final long ID = 84L;
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 d8c4a3b602e0a8..40a742a4b047ad 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -6306,6 +6306,120 @@ private static Map readRefrigeratorAndTemperatureContro
return result;
}
+ private static Map readWasherControlsInteractionInfo() {
+ Map result = new LinkedHashMap<>();Map readWasherControlsSpinSpeedsCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsSpinSpeedsAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readSpinSpeedsAttribute(
+ (ChipClusters.WasherControlsCluster.SpinSpeedsAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterSpinSpeedsAttributeCallback(),
+ readWasherControlsSpinSpeedsCommandParams
+ );
+ result.put("readSpinSpeedsAttribute", readWasherControlsSpinSpeedsAttributeInteractionInfo);
+ Map readWasherControlsSpinSpeedCurrentCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsSpinSpeedCurrentAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readSpinSpeedCurrentAttribute(
+ (ChipClusters.WasherControlsCluster.SpinSpeedCurrentAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterSpinSpeedCurrentAttributeCallback(),
+ readWasherControlsSpinSpeedCurrentCommandParams
+ );
+ result.put("readSpinSpeedCurrentAttribute", readWasherControlsSpinSpeedCurrentAttributeInteractionInfo);
+ Map readWasherControlsNumberOfRinsesCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsNumberOfRinsesAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readNumberOfRinsesAttribute(
+ (ChipClusters.WasherControlsCluster.NumberOfRinsesAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterNumberOfRinsesAttributeCallback(),
+ readWasherControlsNumberOfRinsesCommandParams
+ );
+ result.put("readNumberOfRinsesAttribute", readWasherControlsNumberOfRinsesAttributeInteractionInfo);
+ Map readWasherControlsMaxRinsesCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsMaxRinsesAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readMaxRinsesAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readWasherControlsMaxRinsesCommandParams
+ );
+ result.put("readMaxRinsesAttribute", readWasherControlsMaxRinsesAttributeInteractionInfo);
+ Map readWasherControlsGeneratedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readGeneratedCommandListAttribute(
+ (ChipClusters.WasherControlsCluster.GeneratedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterGeneratedCommandListAttributeCallback(),
+ readWasherControlsGeneratedCommandListCommandParams
+ );
+ result.put("readGeneratedCommandListAttribute", readWasherControlsGeneratedCommandListAttributeInteractionInfo);
+ Map readWasherControlsAcceptedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsAcceptedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readAcceptedCommandListAttribute(
+ (ChipClusters.WasherControlsCluster.AcceptedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterAcceptedCommandListAttributeCallback(),
+ readWasherControlsAcceptedCommandListCommandParams
+ );
+ result.put("readAcceptedCommandListAttribute", readWasherControlsAcceptedCommandListAttributeInteractionInfo);
+ Map readWasherControlsEventListCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsEventListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readEventListAttribute(
+ (ChipClusters.WasherControlsCluster.EventListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterEventListAttributeCallback(),
+ readWasherControlsEventListCommandParams
+ );
+ result.put("readEventListAttribute", readWasherControlsEventListAttributeInteractionInfo);
+ Map readWasherControlsAttributeListCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsAttributeListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readAttributeListAttribute(
+ (ChipClusters.WasherControlsCluster.AttributeListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWasherControlsClusterAttributeListAttributeCallback(),
+ readWasherControlsAttributeListCommandParams
+ );
+ result.put("readAttributeListAttribute", readWasherControlsAttributeListAttributeInteractionInfo);
+ Map readWasherControlsFeatureMapCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsFeatureMapAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readFeatureMapAttribute(
+ (ChipClusters.LongAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedLongAttributeCallback(),
+ readWasherControlsFeatureMapCommandParams
+ );
+ result.put("readFeatureMapAttribute", readWasherControlsFeatureMapAttributeInteractionInfo);
+ Map readWasherControlsClusterRevisionCommandParams = new LinkedHashMap();
+ InteractionInfo readWasherControlsClusterRevisionAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).readClusterRevisionAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readWasherControlsClusterRevisionCommandParams
+ );
+ result.put("readClusterRevisionAttribute", readWasherControlsClusterRevisionAttributeInteractionInfo);
+
+ return result;
+ }
private static Map readRvcRunModeSelectInteractionInfo() {
Map result = new LinkedHashMap<>();Map readRvcRunModeSelectDescriptionCommandParams = new LinkedHashMap();
InteractionInfo readRvcRunModeSelectDescriptionAttributeInteractionInfo = new InteractionInfo(
@@ -23099,6 +23213,7 @@ public Map> getReadAttributeMap() {
put("modeSelect", readModeSelectInteractionInfo());
put("laundryWasherModeSelect", readLaundryWasherModeSelectInteractionInfo());
put("refrigeratorAndTemperatureControlledCabinetModeSelect", readRefrigeratorAndTemperatureControlledCabinetModeSelectInteractionInfo());
+ put("washerControls", readWasherControlsInteractionInfo());
put("rvcRunModeSelect", readRvcRunModeSelectInteractionInfo());
put("rvcCleanModeSelect", readRvcCleanModeSelectInteractionInfo());
put("temperatureControl", readTemperatureControlInteractionInfo());
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
index 226e4b5ff522e1..3028e3525125f5 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
@@ -862,6 +862,52 @@ public Map> getWriteAttributeMap() {
);
writeRefrigeratorAndTemperatureControlledCabinetModeSelectInteractionInfo.put("writeOnModeAttribute", writeRefrigeratorAndTemperatureControlledCabinetModeSelectOnModeAttributeInteractionInfo);
writeAttributeMap.put("refrigeratorAndTemperatureControlledCabinetModeSelect", writeRefrigeratorAndTemperatureControlledCabinetModeSelectInteractionInfo);
+ Map writeWasherControlsInteractionInfo = new LinkedHashMap<>();
+ Map writeWasherControlsSpinSpeedCurrentCommandParams = new LinkedHashMap();
+ CommandParameterInfo washerControlsspinSpeedCurrentCommandParameterInfo =
+ new CommandParameterInfo(
+ "value",
+ Integer.class,
+ Integer.class
+ );
+ writeWasherControlsSpinSpeedCurrentCommandParams.put(
+ "value",
+ washerControlsspinSpeedCurrentCommandParameterInfo
+ );
+ InteractionInfo writeWasherControlsSpinSpeedCurrentAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).writeSpinSpeedCurrentAttribute(
+ (DefaultClusterCallback) callback,
+ (Integer) commandArguments.get("value")
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedDefaultClusterCallback(),
+ writeWasherControlsSpinSpeedCurrentCommandParams
+ );
+ writeWasherControlsInteractionInfo.put("writeSpinSpeedCurrentAttribute", writeWasherControlsSpinSpeedCurrentAttributeInteractionInfo);
+ Map writeWasherControlsNumberOfRinsesCommandParams = new LinkedHashMap();
+ CommandParameterInfo washerControlsnumberOfRinsesCommandParameterInfo =
+ new CommandParameterInfo(
+ "value",
+ Integer.class,
+ Integer.class
+ );
+ writeWasherControlsNumberOfRinsesCommandParams.put(
+ "value",
+ washerControlsnumberOfRinsesCommandParameterInfo
+ );
+ InteractionInfo writeWasherControlsNumberOfRinsesAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WasherControlsCluster) cluster).writeNumberOfRinsesAttribute(
+ (DefaultClusterCallback) callback,
+ (Integer) commandArguments.get("value")
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedDefaultClusterCallback(),
+ writeWasherControlsNumberOfRinsesCommandParams
+ );
+ writeWasherControlsInteractionInfo.put("writeNumberOfRinsesAttribute", writeWasherControlsNumberOfRinsesAttributeInteractionInfo);
+ writeAttributeMap.put("washerControls", writeWasherControlsInteractionInfo);
Map writeRvcRunModeSelectInteractionInfo = new LinkedHashMap<>();
Map writeRvcRunModeSelectStartUpModeCommandParams = new LinkedHashMap();
CommandParameterInfo rvcRunModeSelectstartUpModeCommandParameterInfo =
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index 47dff634f91e19..0248cc27172020 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -12880,6 +12880,222 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
}
break;
}
+ case app::Clusters::WasherControls::Id: {
+ using namespace app::Clusters::WasherControls;
+ switch (aPath.mAttributeId)
+ {
+ case Attributes::SpinSpeeds::Id: {
+ using TypeInfo = Attributes::SpinSpeeds::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;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0, newElement_0));
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::SpinSpeedCurrent::Id: {
+ using TypeInfo = Attributes::SpinSpeedCurrent::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::NumberOfRinses::Id: {
+ using TypeInfo = Attributes::NumberOfRinses::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::MaxRinses::Id: {
+ using TypeInfo = Attributes::MaxRinses::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;
+ }
+ 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::RvcRunModeSelect::Id: {
using namespace app::Clusters::RvcRunModeSelect;
switch (aPath.mAttributeId)
diff --git a/src/controller/java/zap-generated/CHIPClientCallbacks.h b/src/controller/java/zap-generated/CHIPClientCallbacks.h
index a5808161415452..b7537c2e38ad24 100644
--- a/src/controller/java/zap-generated/CHIPClientCallbacks.h
+++ b/src/controller/java/zap-generated/CHIPClientCallbacks.h
@@ -500,6 +500,16 @@ typedef void (*RefrigeratorAndTemperatureControlledCabinetModeSelectEventListLis
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*RefrigeratorAndTemperatureControlledCabinetModeSelectAttributeListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsSpinSpeedsListAttributeCallback)(void * context,
+ const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsGeneratedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsAcceptedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsEventListListAttributeCallback)(void * context,
+ const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsAttributeListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*RvcRunModeSelectSupportedModesListAttributeCallback)(
void * context,
const chip::app::DataModel::DecodableList &
diff --git a/src/controller/java/zap-generated/CHIPClustersWrite-JNI.cpp b/src/controller/java/zap-generated/CHIPClustersWrite-JNI.cpp
index ddd219dd1befaf..237ebacd4ac70c 100644
--- a/src/controller/java/zap-generated/CHIPClustersWrite-JNI.cpp
+++ b/src/controller/java/zap-generated/CHIPClustersWrite-JNI.cpp
@@ -2584,6 +2584,126 @@ JNI_METHOD(void, RefrigeratorAndTemperatureControlledCabinetModeSelectCluster, w
onFailure.release();
}
+JNI_METHOD(void, WasherControlsCluster, writeSpinSpeedCurrentAttribute)
+(JNIEnv * env, jobject self, jlong clusterPtr, jobject callback, jobject value, jobject timedWriteTimeoutMs)
+{
+ chip::DeviceLayer::StackLock lock;
+ ListFreer listFreer;
+ using TypeInfo = chip::app::Clusters::WasherControls::Attributes::SpinSpeedCurrent::TypeInfo;
+ TypeInfo::Type cppValue;
+
+ std::vector> cleanupByteArrays;
+ std::vector> cleanupStrings;
+
+ if (value == nullptr)
+ {
+ cppValue.SetNull();
+ }
+ else
+ {
+ auto & nonNullValue_0 = cppValue.SetNonNull();
+ nonNullValue_0 = static_cast>(
+ chip::JniReferences::GetInstance().IntegerToPrimitive(value));
+ }
+
+ std::unique_ptr onSuccess(
+ Platform::New(callback), Platform::Delete);
+ VerifyOrReturn(onSuccess.get() != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Error creating native success callback", CHIP_ERROR_NO_MEMORY));
+
+ std::unique_ptr onFailure(
+ Platform::New(callback), Platform::Delete);
+ VerifyOrReturn(onFailure.get() != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Error creating native failure callback", CHIP_ERROR_NO_MEMORY));
+
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ WasherControlsCluster * cppCluster = reinterpret_cast(clusterPtr);
+ VerifyOrReturn(cppCluster != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Could not get native cluster", CHIP_ERROR_INCORRECT_STATE));
+
+ auto successFn = chip::Callback::Callback::FromCancelable(onSuccess->Cancel());
+ auto failureFn = chip::Callback::Callback::FromCancelable(onFailure->Cancel());
+
+ if (timedWriteTimeoutMs == nullptr)
+ {
+ err = cppCluster->WriteAttribute(cppValue, onSuccess->mContext, successFn->mCall, failureFn->mCall);
+ }
+ else
+ {
+ err = cppCluster->WriteAttribute(cppValue, onSuccess->mContext, successFn->mCall, failureFn->mCall,
+ chip::JniReferences::GetInstance().IntegerToPrimitive(timedWriteTimeoutMs));
+ }
+ VerifyOrReturn(
+ err == CHIP_NO_ERROR,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(env, callback, "Error writing attribute", err));
+
+ onSuccess.release();
+ onFailure.release();
+}
+
+JNI_METHOD(void, WasherControlsCluster, writeNumberOfRinsesAttribute)
+(JNIEnv * env, jobject self, jlong clusterPtr, jobject callback, jobject value, jobject timedWriteTimeoutMs)
+{
+ chip::DeviceLayer::StackLock lock;
+ ListFreer listFreer;
+ using TypeInfo = chip::app::Clusters::WasherControls::Attributes::NumberOfRinses::TypeInfo;
+ TypeInfo::Type cppValue;
+
+ std::vector> cleanupByteArrays;
+ std::vector> cleanupStrings;
+
+ if (value == nullptr)
+ {
+ cppValue.SetNull();
+ }
+ else
+ {
+ auto & nonNullValue_0 = cppValue.SetNonNull();
+ nonNullValue_0 = static_cast>(
+ chip::JniReferences::GetInstance().IntegerToPrimitive(value));
+ }
+
+ std::unique_ptr onSuccess(
+ Platform::New(callback), Platform::Delete);
+ VerifyOrReturn(onSuccess.get() != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Error creating native success callback", CHIP_ERROR_NO_MEMORY));
+
+ std::unique_ptr onFailure(
+ Platform::New(callback), Platform::Delete);
+ VerifyOrReturn(onFailure.get() != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Error creating native failure callback", CHIP_ERROR_NO_MEMORY));
+
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ WasherControlsCluster * cppCluster = reinterpret_cast(clusterPtr);
+ VerifyOrReturn(cppCluster != nullptr,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(
+ env, callback, "Could not get native cluster", CHIP_ERROR_INCORRECT_STATE));
+
+ auto successFn = chip::Callback::Callback::FromCancelable(onSuccess->Cancel());
+ auto failureFn = chip::Callback::Callback::FromCancelable(onFailure->Cancel());
+
+ if (timedWriteTimeoutMs == nullptr)
+ {
+ err = cppCluster->WriteAttribute(cppValue, onSuccess->mContext, successFn->mCall, failureFn->mCall);
+ }
+ else
+ {
+ err = cppCluster->WriteAttribute(cppValue, onSuccess->mContext, successFn->mCall, failureFn->mCall,
+ chip::JniReferences::GetInstance().IntegerToPrimitive(timedWriteTimeoutMs));
+ }
+ VerifyOrReturn(
+ err == CHIP_NO_ERROR,
+ chip::AndroidClusterExceptions::GetInstance().ReturnIllegalStateException(env, callback, "Error writing attribute", err));
+
+ onSuccess.release();
+ onFailure.release();
+}
+
JNI_METHOD(void, RvcRunModeSelectCluster, writeStartUpModeAttribute)
(JNIEnv * env, jobject self, jlong clusterPtr, jobject callback, jobject value, jobject timedWriteTimeoutMs)
{
diff --git a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
index c5f32d16892b0f..03ebc2ef9083f4 100644
--- a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
@@ -2445,6 +2445,16 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
}
break;
}
+ case app::Clusters::WasherControls::Id: {
+ using namespace app::Clusters::WasherControls;
+ switch (aPath.mEventId)
+ {
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::RvcRunModeSelect::Id: {
using namespace app::Clusters::RvcRunModeSelect;
switch (aPath.mEventId)
diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
index 774cbf32c16040..23be9ec0902b8f 100644
--- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
@@ -21455,6 +21455,488 @@ void CHIPRefrigeratorAndTemperatureControlledCabinetModeSelectAttributeListAttri
env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
}
+CHIPWasherControlsSpinSpeedsAttributeCallback::CHIPWasherControlsSpinSpeedsAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsSpinSpeedsAttributeCallback::~CHIPWasherControlsSpinSpeedsAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsSpinSpeedsAttributeCallback::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;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0, newElement_0));
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPWasherControlsSpinSpeedCurrentAttributeCallback::CHIPWasherControlsSpinSpeedCurrentAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsSpinSpeedCurrentAttributeCallback::~CHIPWasherControlsSpinSpeedCurrentAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsSpinSpeedCurrentAttributeCallback::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);
+}
+
+CHIPWasherControlsNumberOfRinsesAttributeCallback::CHIPWasherControlsNumberOfRinsesAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsNumberOfRinsesAttributeCallback::~CHIPWasherControlsNumberOfRinsesAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsNumberOfRinsesAttributeCallback::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);
+}
+
+CHIPWasherControlsGeneratedCommandListAttributeCallback::CHIPWasherControlsGeneratedCommandListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPWasherControlsGeneratedCommandListAttributeCallback::~CHIPWasherControlsGeneratedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsGeneratedCommandListAttributeCallback::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);
+}
+
+CHIPWasherControlsAcceptedCommandListAttributeCallback::CHIPWasherControlsAcceptedCommandListAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsAcceptedCommandListAttributeCallback::~CHIPWasherControlsAcceptedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsAcceptedCommandListAttributeCallback::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);
+}
+
+CHIPWasherControlsEventListAttributeCallback::CHIPWasherControlsEventListAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsEventListAttributeCallback::~CHIPWasherControlsEventListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsEventListAttributeCallback::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);
+}
+
+CHIPWasherControlsAttributeListAttributeCallback::CHIPWasherControlsAttributeListAttributeCallback(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");
+ }
+}
+
+CHIPWasherControlsAttributeListAttributeCallback::~CHIPWasherControlsAttributeListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPWasherControlsAttributeListAttributeCallback::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);
+}
+
CHIPRvcRunModeSelectSupportedModesAttributeCallback::CHIPRvcRunModeSelectSupportedModesAttributeCallback(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 b62e96836d53b8..f9aca55fe803e6 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -14348,6 +14348,261 @@ private native void subscribeClusterRevisionAttribute(long chipClusterPtr,
, int minInterval, int maxInterval);
}
+ public static class WasherControlsCluster extends BaseChipCluster {
+ public static final long CLUSTER_ID = 83L;
+
+ public WasherControlsCluster(long devicePtr, int endpointId) {
+ super(devicePtr, endpointId);
+ }
+
+ @Override
+ public native long initWithDevice(long devicePtr, int endpointId);
+
+ public interface SpinSpeedsAttributeCallback {
+ void onSuccess( List valueList);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface SpinSpeedCurrentAttributeCallback {
+ void onSuccess(@Nullable Integer value);
+ void onError(Exception ex);
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+ public interface NumberOfRinsesAttributeCallback {
+ void onSuccess(@Nullable Integer value);
+ 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 readSpinSpeedsAttribute(
+ SpinSpeedsAttributeCallback callback
+ ) {
+ readSpinSpeedsAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeSpinSpeedsAttribute(
+ SpinSpeedsAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeSpinSpeedsAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readSpinSpeedCurrentAttribute(
+ SpinSpeedCurrentAttributeCallback callback
+ ) {
+ readSpinSpeedCurrentAttribute(chipClusterPtr, callback);
+ }
+ public void writeSpinSpeedCurrentAttribute(DefaultClusterCallback callback, Integer value) {
+ writeSpinSpeedCurrentAttribute(chipClusterPtr, callback, value, null);
+ }
+
+ public void writeSpinSpeedCurrentAttribute(DefaultClusterCallback callback, Integer value, int timedWriteTimeoutMs) {
+ writeSpinSpeedCurrentAttribute(chipClusterPtr, callback, value, timedWriteTimeoutMs);
+ }
+ public void subscribeSpinSpeedCurrentAttribute(
+ SpinSpeedCurrentAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeSpinSpeedCurrentAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readNumberOfRinsesAttribute(
+ NumberOfRinsesAttributeCallback callback
+ ) {
+ readNumberOfRinsesAttribute(chipClusterPtr, callback);
+ }
+ public void writeNumberOfRinsesAttribute(DefaultClusterCallback callback, Integer value) {
+ writeNumberOfRinsesAttribute(chipClusterPtr, callback, value, null);
+ }
+
+ public void writeNumberOfRinsesAttribute(DefaultClusterCallback callback, Integer value, int timedWriteTimeoutMs) {
+ writeNumberOfRinsesAttribute(chipClusterPtr, callback, value, timedWriteTimeoutMs);
+ }
+ public void subscribeNumberOfRinsesAttribute(
+ NumberOfRinsesAttributeCallback callback
+ ,
+ int minInterval, int maxInterval) {
+ subscribeNumberOfRinsesAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readMaxRinsesAttribute(
+ IntegerAttributeCallback callback
+ ) {
+ readMaxRinsesAttribute(chipClusterPtr, callback);
+ }
+ public void subscribeMaxRinsesAttribute(
+ IntegerAttributeCallback callback
+,
+ int minInterval, int maxInterval) {
+ subscribeMaxRinsesAttribute(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 readSpinSpeedsAttribute(long chipClusterPtr,
+ SpinSpeedsAttributeCallback callback
+ );
+ private native void subscribeSpinSpeedsAttribute(long chipClusterPtr,
+ SpinSpeedsAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readSpinSpeedCurrentAttribute(long chipClusterPtr,
+ SpinSpeedCurrentAttributeCallback callback
+ );
+
+ private native void writeSpinSpeedCurrentAttribute(long chipClusterPtr, DefaultClusterCallback callback, Integer value, @Nullable Integer timedWriteTimeoutMs);
+ private native void subscribeSpinSpeedCurrentAttribute(long chipClusterPtr,
+ SpinSpeedCurrentAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readNumberOfRinsesAttribute(long chipClusterPtr,
+ NumberOfRinsesAttributeCallback callback
+ );
+
+ private native void writeNumberOfRinsesAttribute(long chipClusterPtr, DefaultClusterCallback callback, Integer value, @Nullable Integer timedWriteTimeoutMs);
+ private native void subscribeNumberOfRinsesAttribute(long chipClusterPtr,
+ NumberOfRinsesAttributeCallback callback
+ , int minInterval, int maxInterval);
+
+ private native void readMaxRinsesAttribute(long chipClusterPtr,
+ IntegerAttributeCallback callback
+ );
+ private native void subscribeMaxRinsesAttribute(long chipClusterPtr,
+ IntegerAttributeCallback 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 RvcRunModeSelectCluster extends BaseChipCluster {
public static final long CLUSTER_ID = 84L;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
index 078e1d5d0d67c0..83e7e60c2e79ea 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
@@ -156,6 +156,9 @@ public static String clusterIdToName(long clusterId) {
if (clusterId == 82L) {
return "RefrigeratorAndTemperatureControlledCabinetModeSelect";
}
+ if (clusterId == 83L) {
+ return "WasherControls";
+ }
if (clusterId == 84L) {
return "RvcRunModeSelect";
}
@@ -2240,6 +2243,39 @@ public static String attributeIdToName(long clusterId, long attributeId) {
}
return "";
}
+ if (clusterId == 83L) {
+ if (attributeId == 0L) {
+ return "SpinSpeeds";
+ }
+ if (attributeId == 1L) {
+ return "SpinSpeedCurrent";
+ }
+ if (attributeId == 2L) {
+ return "NumberOfRinses";
+ }
+ if (attributeId == 3L) {
+ return "MaxRinses";
+ }
+ 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 == 84L) {
if (attributeId == 0L) {
return "Description";
@@ -7261,6 +7297,9 @@ public static String eventIdToName(long clusterId, long eventId) {
if (clusterId == 82L) {
return "";
}
+ if (clusterId == 83L) {
+ return "";
+ }
if (clusterId == 84L) {
return "";
}
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
index eebf23dccb47d3..92f7fa0d6f7645 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
@@ -6234,6 +6234,140 @@ 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 DelegatedWasherControlsClusterSpinSpeedsAttributeCallback implements ChipClusters.WasherControlsCluster.SpinSpeedsAttributeCallback, 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 DelegatedWasherControlsClusterSpinSpeedCurrentAttributeCallback implements ChipClusters.WasherControlsCluster.SpinSpeedCurrentAttributeCallback, 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 DelegatedWasherControlsClusterNumberOfRinsesAttributeCallback implements ChipClusters.WasherControlsCluster.NumberOfRinsesAttributeCallback, 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 DelegatedWasherControlsClusterGeneratedCommandListAttributeCallback implements ChipClusters.WasherControlsCluster.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 DelegatedWasherControlsClusterAcceptedCommandListAttributeCallback implements ChipClusters.WasherControlsCluster.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 DelegatedWasherControlsClusterEventListAttributeCallback implements ChipClusters.WasherControlsCluster.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 DelegatedWasherControlsClusterAttributeListAttributeCallback implements ChipClusters.WasherControlsCluster.AttributeListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
@Override
public void onSuccess( List valueList) {
Map responseValues = new LinkedHashMap<>();
@@ -19691,6 +19825,9 @@ public Map initializeClusterMap() {
ClusterInfo refrigeratorAndTemperatureControlledCabinetModeSelectClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.RefrigeratorAndTemperatureControlledCabinetModeSelectCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("refrigeratorAndTemperatureControlledCabinetModeSelect", refrigeratorAndTemperatureControlledCabinetModeSelectClusterInfo);
+ ClusterInfo washerControlsClusterInfo = new ClusterInfo(
+ (ptr, endpointId) -> new ChipClusters.WasherControlsCluster(ptr, endpointId), new HashMap<>());
+ clusterMap.put("washerControls", washerControlsClusterInfo);
ClusterInfo rvcRunModeSelectClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.RvcRunModeSelectCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("rvcRunModeSelect", rvcRunModeSelectClusterInfo);
@@ -19997,6 +20134,7 @@ public void combineCommand(Map destination, Map> getCommandMap() {
);
refrigeratorAndTemperatureControlledCabinetModeSelectClusterInteractionInfoMap.put("changeToModeWithStatus", refrigeratorAndTemperatureControlledCabinetModeSelectchangeToModeWithStatusInteractionInfo);
commandMap.put("refrigeratorAndTemperatureControlledCabinetModeSelect", refrigeratorAndTemperatureControlledCabinetModeSelectClusterInteractionInfoMap);
+ Map washerControlsClusterInteractionInfoMap = new LinkedHashMap<>();
+ commandMap.put("washerControls", washerControlsClusterInteractionInfoMap);
Map rvcRunModeSelectClusterInteractionInfoMap = new LinkedHashMap<>();
Map rvcRunModeSelectchangeToModeCommandParams = new LinkedHashMap();
CommandParameterInfo rvcRunModeSelectchangeToModenewModeCommandParameterInfo = new CommandParameterInfo("newMode", Integer.class, Integer.class);
diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py
index 9ad074bf2310bc..d65219839e0887 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.py
+++ b/src/controller/python/chip/clusters/CHIPClusters.py
@@ -4544,6 +4544,76 @@ class ChipClusters:
},
},
}
+ _WASHER_CONTROLS_CLUSTER_INFO = {
+ "clusterName": "WasherControls",
+ "clusterId": 0x00000053,
+ "commands": {
+ },
+ "attributes": {
+ 0x00000000: {
+ "attributeName": "SpinSpeeds",
+ "attributeId": 0x00000000,
+ "type": "str",
+ "reportable": True,
+ },
+ 0x00000001: {
+ "attributeName": "SpinSpeedCurrent",
+ "attributeId": 0x00000001,
+ "type": "int",
+ "reportable": True,
+ "writable": True,
+ },
+ 0x00000002: {
+ "attributeName": "NumberOfRinses",
+ "attributeId": 0x00000002,
+ "type": "int",
+ "reportable": True,
+ "writable": True,
+ },
+ 0x00000003: {
+ "attributeName": "MaxRinses",
+ "attributeId": 0x00000003,
+ "type": "int",
+ "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,
+ },
+ },
+ }
_RVC_RUN_MODE_SELECT_CLUSTER_INFO = {
"clusterName": "RvcRunModeSelect",
"clusterId": 0x00000054,
@@ -15512,6 +15582,7 @@ class ChipClusters:
0x00000050: _MODE_SELECT_CLUSTER_INFO,
0x00000051: _LAUNDRY_WASHER_MODE_SELECT_CLUSTER_INFO,
0x00000052: _REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER_INFO,
+ 0x00000053: _WASHER_CONTROLS_CLUSTER_INFO,
0x00000054: _RVC_RUN_MODE_SELECT_CLUSTER_INFO,
0x00000055: _RVC_CLEAN_MODE_SELECT_CLUSTER_INFO,
0x00000056: _TEMPERATURE_CONTROL_CLUSTER_INFO,
@@ -15645,6 +15716,7 @@ class ChipClusters:
"ModeSelect": _MODE_SELECT_CLUSTER_INFO,
"LaundryWasherModeSelect": _LAUNDRY_WASHER_MODE_SELECT_CLUSTER_INFO,
"RefrigeratorAndTemperatureControlledCabinetModeSelect": _REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_SELECT_CLUSTER_INFO,
+ "WasherControls": _WASHER_CONTROLS_CLUSTER_INFO,
"RvcRunModeSelect": _RVC_RUN_MODE_SELECT_CLUSTER_INFO,
"RvcCleanModeSelect": _RVC_CLEAN_MODE_SELECT_CLUSTER_INFO,
"TemperatureControl": _TEMPERATURE_CONTROL_CLUSTER_INFO,
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 84f8f747d62424..06be17d6c5a97d 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -15822,6 +15822,204 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
value: 'uint' = 0
+@dataclass
+class WasherControls(Cluster):
+ id: typing.ClassVar[int] = 0x0053
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="spinSpeeds", Tag=0x00000000, Type=typing.Optional[typing.List[str]]),
+ ClusterObjectFieldDescriptor(Label="spinSpeedCurrent", Tag=0x00000001, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="numberOfRinses", Tag=0x00000002, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="maxRinses", Tag=0x00000003, Type=typing.Optional[uint]),
+ 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),
+ ])
+
+ spinSpeeds: 'typing.Optional[typing.List[str]]' = None
+ spinSpeedCurrent: 'typing.Union[None, Nullable, uint]' = None
+ numberOfRinses: 'typing.Union[None, Nullable, uint]' = None
+ maxRinses: 'typing.Optional[uint]' = 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 Bitmaps:
+ class Feature(IntFlag):
+ kSpin = 0x1
+ kRinse = 0x2
+
+ class Attributes:
+ @dataclass
+ class SpinSpeeds(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0053
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000000
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[str]])
+
+ value: 'typing.Optional[typing.List[str]]' = None
+
+ @dataclass
+ class SpinSpeedCurrent(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0053
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000001
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
+
+ value: 'typing.Union[None, Nullable, uint]' = None
+
+ @dataclass
+ class NumberOfRinses(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0053
+
+ @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 MaxRinses(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0053
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000003
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
+
+ value: 'typing.Optional[uint]' = None
+
+ @dataclass
+ class GeneratedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0053
+
+ @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 0x0053
+
+ @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 0x0053
+
+ @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 0x0053
+
+ @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 0x0053
+
+ @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 0x0053
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFD
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=uint)
+
+ value: 'uint' = 0
+
+
@dataclass
class RvcRunModeSelect(Cluster):
id: typing.ClassVar[int] = 0x0054
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
index eda4dd98d6eb93..6b7b60fc89dfd0 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
@@ -1802,6 +1802,45 @@ static BOOL AttributeIsSpecifiedInModeSelectCluster(AttributeId aAttributeId)
}
}
}
+static BOOL AttributeIsSpecifiedInWasherControlsCluster(AttributeId aAttributeId)
+{
+ using namespace Clusters::WasherControls;
+ switch (aAttributeId) {
+ case Attributes::SpinSpeeds::Id: {
+ return YES;
+ }
+ case Attributes::SpinSpeedCurrent::Id: {
+ return YES;
+ }
+ case Attributes::NumberOfRinses::Id: {
+ return YES;
+ }
+ case Attributes::MaxRinses::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 AttributeIsSpecifiedInTemperatureControlCluster(AttributeId aAttributeId)
{
using namespace Clusters::TemperatureControl;
@@ -7035,6 +7074,9 @@ BOOL MTRAttributeIsSpecified(ClusterId aClusterId, AttributeId aAttributeId)
case Clusters::ModeSelect::Id: {
return AttributeIsSpecifiedInModeSelectCluster(aAttributeId);
}
+ case Clusters::WasherControls::Id: {
+ return AttributeIsSpecifiedInWasherControlsCluster(aAttributeId);
+ }
case Clusters::TemperatureControl::Id: {
return AttributeIsSpecifiedInTemperatureControlCluster(aAttributeId);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index 76285a79a0f3aa..4d0b099328cbb1 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -9254,6 +9254,217 @@ static id _Nullable DecodeAttributeValueForModeSelectCluster(
*aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
return nil;
}
+static id _Nullable DecodeAttributeValueForWasherControlsCluster(
+ AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::WasherControls;
+ switch (aAttributeId) {
+ case Attributes::SpinSpeeds::Id: {
+ using TypeInfo = Attributes::SpinSpeeds::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();
+ NSString * newElement_0;
+ newElement_0 = AsString(entry_0);
+ if (newElement_0 == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ *aError = err;
+ return 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::SpinSpeedCurrent::Id: {
+ using TypeInfo = Attributes::SpinSpeedCurrent::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::NumberOfRinses::Id: {
+ using TypeInfo = Attributes::NumberOfRinses::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::MaxRinses::Id: {
+ using TypeInfo = Attributes::MaxRinses::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithUnsignedChar:cppValue];
+ 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 DecodeAttributeValueForTemperatureControlCluster(
AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
@@ -33383,6 +33594,9 @@ id _Nullable MTRDecodeAttributeValue(const ConcreteAttributePath & aPath, TLV::T
case Clusters::ModeSelect::Id: {
return DecodeAttributeValueForModeSelectCluster(aPath.mAttributeId, aReader, aError);
}
+ case Clusters::WasherControls::Id: {
+ return DecodeAttributeValueForWasherControlsCluster(aPath.mAttributeId, aReader, aError);
+ }
case Clusters::TemperatureControl::Id: {
return DecodeAttributeValueForTemperatureControlCluster(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 ce0cb7cd8441fc..f5f668af05be77 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -7900,6 +7900,154 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@end
+/**
+ * Cluster Washer Controls
+ *
+ * This cluster supports remotely monitoring and controling the different typs of functionality available to a washing device, such
+ * as a washing machine.
+ */
+MTR_NEWLY_AVAILABLE
+@interface MTRBaseClusterWasherControls : MTRCluster
+
+- (instancetype _Nullable)initWithDevice:(MTRBaseDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeSpinSpeedsWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeSpinSpeedsWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeSpinSpeedsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeSpinSpeedCurrentWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSNumber * _Nullable)value
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSNumber * _Nullable)value
+ params:(MTRWriteParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeSpinSpeedCurrentWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeSpinSpeedCurrentWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeNumberOfRinsesWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeNumberOfRinsesWithValue:(NSNumber * _Nullable)value
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeNumberOfRinsesWithValue:(NSNumber * _Nullable)value
+ params:(MTRWriteParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeNumberOfRinsesWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeNumberOfRinsesWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeMaxRinsesWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeMaxRinsesWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeMaxRinsesWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _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 Temperature Control
*
@@ -31558,6 +31706,11 @@ typedef NS_OPTIONS(uint32_t, MTRModeSelectFeature) {
= 0x1,
} API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
+typedef NS_OPTIONS(uint32_t, MTRWasherControlsFeature) {
+ MTRWasherControlsFeatureSpin MTR_NEWLY_AVAILABLE = 0x1,
+ MTRWasherControlsFeatureRinse MTR_NEWLY_AVAILABLE = 0x2,
+} MTR_NEWLY_AVAILABLE;
+
typedef NS_OPTIONS(uint32_t, MTRTemperatureControlFeature) {
MTRTemperatureControlFeatureTemperatureNumber MTR_NEWLY_AVAILABLE = 0x1,
MTRTemperatureControlFeatureTemperatureLevel MTR_NEWLY_AVAILABLE = 0x2,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index 53576c0a8af98b..a4acf1dfc0071e 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -47834,6 +47834,543 @@ - (nullable instancetype)initWithDevice:(MTRBaseDevice *)device endpoint:(uint16
@end
+@implementation MTRBaseClusterWasherControls
+
+- (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)readAttributeSpinSpeedsWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::SpinSpeeds::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeSpinSpeedsWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::SpinSpeeds::TypeInfo;
+ MTRSubscribeAttribute(
+ params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeSpinSpeedsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRWasherControlsSpinSpeedsListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(WasherControlsSpinSpeedsListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::Attributes::SpinSpeeds::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)readAttributeSpinSpeedCurrentWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::SpinSpeedCurrent::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSNumber * _Nullable)value completion:(MTRStatusCompletion)completion
+{
+ [self writeAttributeSpinSpeedCurrentWithValue:(NSNumber * _Nullable) value params:nil completion:completion];
+}
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSNumber * _Nullable)value
+ params:(MTRWriteParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ value = [value copy];
+
+ auto * bridge = new MTRDefaultSuccessCallbackBridge(
+ self.callbackQueue,
+ ^(id _Nullable ignored, NSError * _Nullable error) {
+ completion(error);
+ },
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session, DefaultSuccessCallbackType successCb,
+ MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) {
+ chip::Optional timedWriteTimeout;
+ if (params != nil) {
+ if (params.timedWriteTimeout != nil) {
+ timedWriteTimeout.SetValue(params.timedWriteTimeout.unsignedShortValue);
+ }
+ }
+
+ ListFreer listFreer;
+ using TypeInfo = WasherControls::Attributes::SpinSpeedCurrent::TypeInfo;
+ TypeInfo::Type cppValue;
+ if (value == nil) {
+ cppValue.SetNull();
+ } else {
+ auto & nonNullValue_0 = cppValue.SetNonNull();
+ nonNullValue_0 = value.unsignedCharValue;
+ }
+
+ chip::Controller::ClusterBase cppCluster(exchangeManager, session, self->_endpoint);
+ return cppCluster.WriteAttribute(cppValue, bridge, successCb, failureCb, timedWriteTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)subscribeAttributeSpinSpeedCurrentWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::SpinSpeedCurrent::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeSpinSpeedCurrentWithClusterStateCache:(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 = WasherControls::Attributes::SpinSpeedCurrent::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)readAttributeNumberOfRinsesWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::NumberOfRinses::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)writeAttributeNumberOfRinsesWithValue:(NSNumber * _Nullable)value completion:(MTRStatusCompletion)completion
+{
+ [self writeAttributeNumberOfRinsesWithValue:(NSNumber * _Nullable) value params:nil completion:completion];
+}
+- (void)writeAttributeNumberOfRinsesWithValue:(NSNumber * _Nullable)value
+ params:(MTRWriteParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ value = [value copy];
+
+ auto * bridge = new MTRDefaultSuccessCallbackBridge(
+ self.callbackQueue,
+ ^(id _Nullable ignored, NSError * _Nullable error) {
+ completion(error);
+ },
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session, DefaultSuccessCallbackType successCb,
+ MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) {
+ chip::Optional timedWriteTimeout;
+ if (params != nil) {
+ if (params.timedWriteTimeout != nil) {
+ timedWriteTimeout.SetValue(params.timedWriteTimeout.unsignedShortValue);
+ }
+ }
+
+ ListFreer listFreer;
+ using TypeInfo = WasherControls::Attributes::NumberOfRinses::TypeInfo;
+ TypeInfo::Type cppValue;
+ if (value == nil) {
+ cppValue.SetNull();
+ } else {
+ auto & nonNullValue_0 = cppValue.SetNonNull();
+ nonNullValue_0 = value.unsignedCharValue;
+ }
+
+ chip::Controller::ClusterBase cppCluster(exchangeManager, session, self->_endpoint);
+ return cppCluster.WriteAttribute(cppValue, bridge, successCb, failureCb, timedWriteTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)subscribeAttributeNumberOfRinsesWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::NumberOfRinses::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeNumberOfRinsesWithClusterStateCache:(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 = WasherControls::Attributes::NumberOfRinses::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)readAttributeMaxRinsesWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::MaxRinses::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeMaxRinsesWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::MaxRinses::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeMaxRinsesWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt8uAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int8uAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::Attributes::MaxRinses::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 = WasherControls::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 = WasherControls::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 MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(WasherControlsGeneratedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::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 = WasherControls::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 = WasherControls::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 MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(WasherControlsAcceptedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::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 = WasherControls::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 = WasherControls::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 MTRWasherControlsEventListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(WasherControlsEventListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::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 = WasherControls::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 = WasherControls::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 MTRWasherControlsAttributeListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(WasherControlsAttributeListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::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(path, value);
+ if (err == CHIP_NO_ERROR) {
+ successCb(bridge, value);
+ }
+ return err;
+ }
+ return CHIP_ERROR_NOT_FOUND;
+ });
+}
+
+- (void)readAttributeFeatureMapWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::FeatureMap::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeFeatureMapWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::FeatureMap::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeFeatureMapWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt32uAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int32uAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::Attributes::FeatureMap::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)readAttributeClusterRevisionWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = WasherControls::Attributes::ClusterRevision::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeClusterRevisionWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WasherControls::Attributes::ClusterRevision::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt16uAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int16uAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = WasherControls::Attributes::ClusterRevision::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;
+ });
+}
+
+@end
+
@implementation MTRBaseClusterTemperatureControl
- (instancetype)initWithDevice:(MTRBaseDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters_Internal.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters_Internal.h
index a5397af42c3e46..890e9f718a2b5b 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters_Internal.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters_Internal.h
@@ -200,6 +200,11 @@
@property (nonatomic, assign, readonly) chip::EndpointId endpoint;
@end
+@interface MTRBaseClusterWasherControls ()
+@property (nonatomic, strong, readonly) MTRBaseDevice * device;
+@property (nonatomic, assign, readonly) chip::EndpointId endpoint;
+@end
+
@interface MTRBaseClusterTemperatureControl ()
@property (nonatomic, strong, readonly) MTRBaseDevice * device;
@property (nonatomic, assign, readonly) chip::EndpointId endpoint;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
index 9290286cb80aea..91f1dde245c6fe 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
@@ -1591,6 +1591,16 @@ typedef void (*ModeSelectEventListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
typedef void (*ModeSelectAttributeListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsSpinSpeedsListAttributeCallback)(void * context,
+ const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsGeneratedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsAcceptedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsEventListListAttributeCallback)(void * context,
+ const chip::app::DataModel::DecodableList & data);
+typedef void (*WasherControlsAttributeListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*TemperatureControlSupportedTemperatureLevelsListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*TemperatureControlGeneratedCommandListListAttributeCallback)(
@@ -9421,6 +9431,168 @@ class MTRModeSelectAttributeListListAttributeCallbackSubscriptionBridge
MTRSubscriptionEstablishedHandler mEstablishedHandler;
};
+class MTRWasherControlsSpinSpeedsListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRWasherControlsSpinSpeedsListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRWasherControlsSpinSpeedsListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context, const chip::app::DataModel::DecodableList & value);
+};
+
+class MTRWasherControlsSpinSpeedsListAttributeCallbackSubscriptionBridge
+ : public MTRWasherControlsSpinSpeedsListAttributeCallbackBridge
+{
+public:
+ MTRWasherControlsSpinSpeedsListAttributeCallbackSubscriptionBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRWasherControlsSpinSpeedsListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRWasherControlsSpinSpeedsListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRWasherControlsSpinSpeedsListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context, const chip::app::DataModel::DecodableList & value);
+};
+
+class MTRWasherControlsGeneratedCommandListListAttributeCallbackSubscriptionBridge
+ : public MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge
+{
+public:
+ MTRWasherControlsGeneratedCommandListListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context, const chip::app::DataModel::DecodableList & value);
+};
+
+class MTRWasherControlsAcceptedCommandListListAttributeCallbackSubscriptionBridge
+ : public MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge
+{
+public:
+ MTRWasherControlsAcceptedCommandListListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRWasherControlsEventListListAttributeCallbackBridge : public MTRCallbackBridge
+{
+public:
+ MTRWasherControlsEventListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRWasherControlsEventListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context, const chip::app::DataModel::DecodableList & value);
+};
+
+class MTRWasherControlsEventListListAttributeCallbackSubscriptionBridge
+ : public MTRWasherControlsEventListListAttributeCallbackBridge
+{
+public:
+ MTRWasherControlsEventListListAttributeCallbackSubscriptionBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRWasherControlsEventListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRWasherControlsEventListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRWasherControlsEventListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRWasherControlsAttributeListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRWasherControlsAttributeListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRWasherControlsAttributeListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context, const chip::app::DataModel::DecodableList & value);
+};
+
+class MTRWasherControlsAttributeListListAttributeCallbackSubscriptionBridge
+ : public MTRWasherControlsAttributeListListAttributeCallbackBridge
+{
+public:
+ MTRWasherControlsAttributeListListAttributeCallbackSubscriptionBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRWasherControlsAttributeListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRWasherControlsAttributeListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRWasherControlsAttributeListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
class MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge
: public MTRCallbackBridge
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
index b7d4894178aa92..c44398a8f6f64a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
@@ -8209,6 +8209,201 @@
}
}
+void MTRWasherControlsSpinSpeedsListAttributeCallbackBridge::OnSuccessFn(
+ void * context, const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ NSString * newElement_0;
+ newElement_0 = AsString(entry_0);
+ if (newElement_0 == nil) {
+ CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+ OnFailureFn(context, err);
+ return;
+ }
+ [array_0 addObject:newElement_0];
+ }
+ CHIP_ERROR err = iter_0.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRWasherControlsSpinSpeedsListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
+void MTRWasherControlsGeneratedCommandListListAttributeCallbackBridge::OnSuccessFn(
+ void * context, const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ 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) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRWasherControlsGeneratedCommandListListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
+void MTRWasherControlsAcceptedCommandListListAttributeCallbackBridge::OnSuccessFn(
+ void * context, const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ 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) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRWasherControlsAcceptedCommandListListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
+void MTRWasherControlsEventListListAttributeCallbackBridge::OnSuccessFn(
+ void * context, const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ 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) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRWasherControlsEventListListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
+void MTRWasherControlsAttributeListListAttributeCallbackBridge::OnSuccessFn(
+ void * context, const chip::app::DataModel::DecodableList & value)
+{
+ NSArray * _Nonnull objCValue;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = value.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ 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) {
+ OnFailureFn(context, err);
+ return;
+ }
+ objCValue = array_0;
+ }
+ DispatchSuccess(context, objCValue);
+};
+
+void MTRWasherControlsAttributeListListAttributeCallbackSubscriptionBridge::OnSubscriptionEstablished()
+{
+ if (!mQueue) {
+ return;
+ }
+
+ if (mEstablishedHandler != nil) {
+ dispatch_async(mQueue, mEstablishedHandler);
+ // On failure, mEstablishedHandler will be cleaned up by our destructor,
+ // but we can clean it up earlier on successful subscription
+ // establishment.
+ mEstablishedHandler = nil;
+ }
+}
+
void MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge::OnSuccessFn(
void * context, const chip::app::DataModel::DecodableList & value)
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
index 0db8b2fe00f114..a478ff5d4917d8 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
@@ -276,6 +276,7 @@ typedef NS_ENUM(uint32_t, MTRClusterIDType) {
MTRClusterIDTypeProxyValidID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x00000044,
MTRClusterIDTypeBooleanStateID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x00000045,
MTRClusterIDTypeModeSelectID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x00000050,
+ MTRClusterIDTypeWasherControlsID MTR_NEWLY_AVAILABLE = 0x00000053,
MTRClusterIDTypeTemperatureControlID MTR_NEWLY_AVAILABLE = 0x00000056,
MTRClusterIDTypeRefrigeratorAlarmID MTR_NEWLY_AVAILABLE = 0x00000057,
MTRClusterIDTypeAirQualityID MTR_NEWLY_AVAILABLE = 0x0000005B,
@@ -3768,6 +3769,23 @@ typedef NS_ENUM(uint32_t, MTRAttributeIDType) {
MTRAttributeIDTypeClusterModeSelectAttributeClusterRevisionID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+ // Cluster WasherControls attributes
+ MTRAttributeIDTypeClusterWasherControlsAttributeSpinSpeedsID MTR_NEWLY_AVAILABLE = 0x00000000,
+ MTRAttributeIDTypeClusterWasherControlsAttributeSpinSpeedCurrentID MTR_NEWLY_AVAILABLE = 0x00000001,
+ MTRAttributeIDTypeClusterWasherControlsAttributeNumberOfRinsesID MTR_NEWLY_AVAILABLE = 0x00000002,
+ MTRAttributeIDTypeClusterWasherControlsAttributeMaxRinsesID MTR_NEWLY_AVAILABLE = 0x00000003,
+ MTRAttributeIDTypeClusterWasherControlsAttributeGeneratedCommandListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeGeneratedCommandListID,
+ MTRAttributeIDTypeClusterWasherControlsAttributeAcceptedCommandListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeAcceptedCommandListID,
+ MTRAttributeIDTypeClusterWasherControlsAttributeEventListID MTR_NEWLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeEventListID,
+ MTRAttributeIDTypeClusterWasherControlsAttributeAttributeListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeAttributeListID,
+ MTRAttributeIDTypeClusterWasherControlsAttributeFeatureMapID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeFeatureMapID,
+ MTRAttributeIDTypeClusterWasherControlsAttributeClusterRevisionID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+
// Cluster TemperatureControl attributes
MTRAttributeIDTypeClusterTemperatureControlAttributeTemperatureSetpointID MTR_NEWLY_AVAILABLE = 0x00000000,
MTRAttributeIDTypeClusterTemperatureControlAttributeMinTemperatureID MTR_NEWLY_AVAILABLE = 0x00000001,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index c3b64ee6bb1f88..7cac750f6130bf 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -2803,6 +2803,53 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@end
+/**
+ * Cluster Washer Controls
+ * This cluster supports remotely monitoring and controling the different typs of functionality available to a washing device,
+ * such as a washing machine.
+ */
+MTR_NEWLY_AVAILABLE
+@interface MTRClusterWasherControls : MTRCluster
+
+- (instancetype _Nullable)initWithDevice:(MTRDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeSpinSpeedsWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeSpinSpeedCurrentWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+ params:(MTRWriteParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeNumberOfRinsesWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeNumberOfRinsesWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs MTR_NEWLY_AVAILABLE;
+- (void)writeAttributeNumberOfRinsesWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+ params:(MTRWriteParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeMaxRinsesWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeEventListWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
/**
* Cluster Temperature Control
* Attributes and commands for configuring the temperature control, and reporting temperature.
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index 2532c33aec2798..d0a2a2fa99e862 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -12894,6 +12894,141 @@ - (void)changeToModeWithParams:(MTRModeSelectClusterChangeToModeParams *)params
}
@end
+@implementation MTRClusterWasherControls
+
+- (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue
+{
+ if (self = [super initWithQueue:queue]) {
+ if (device == nil) {
+ return nil;
+ }
+
+ _endpoint = [endpointID unsignedShortValue];
+ _device = device;
+ }
+ return self;
+}
+
+- (NSDictionary *)readAttributeSpinSpeedsWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeSpinSpeedsID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeSpinSpeedCurrentWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeSpinSpeedCurrentID)
+ params:params];
+}
+
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+{
+ [self writeAttributeSpinSpeedCurrentWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil];
+}
+- (void)writeAttributeSpinSpeedCurrentWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+ params:(MTRWriteParams * _Nullable)params
+{
+ NSNumber * timedWriteTimeout = params.timedWriteTimeout;
+
+ [self.device writeAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeSpinSpeedCurrentID)
+ value:dataValueDictionary
+ expectedValueInterval:expectedValueIntervalMs
+ timedWriteTimeout:timedWriteTimeout];
+}
+
+- (NSDictionary *)readAttributeNumberOfRinsesWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeNumberOfRinsesID)
+ params:params];
+}
+
+- (void)writeAttributeNumberOfRinsesWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+{
+ [self writeAttributeNumberOfRinsesWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil];
+}
+- (void)writeAttributeNumberOfRinsesWithValue:(NSDictionary *)dataValueDictionary
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+ params:(MTRWriteParams * _Nullable)params
+{
+ NSNumber * timedWriteTimeout = params.timedWriteTimeout;
+
+ [self.device writeAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeNumberOfRinsesID)
+ value:dataValueDictionary
+ expectedValueInterval:expectedValueIntervalMs
+ timedWriteTimeout:timedWriteTimeout];
+}
+
+- (NSDictionary *)readAttributeMaxRinsesWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeMaxRinsesID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeGeneratedCommandListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeAcceptedCommandListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeEventListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeEventListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeAttributeListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeWasherControlsID)
+ attributeID:@(MTRAttributeIDTypeClusterWasherControlsAttributeFeatureMapID)
+ params:params];
+}
+
+- (NSDictionary