diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 443b2940a7154a..02ee720b05f4d7 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -188,6 +188,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/wake-on-lan-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 \
src/app/zap-templates/zcl/data-model/chip/matter-devices.xml \
src/app/zap-templates/zcl/data-model/draft/barrier-control-cluster.xml \
src/app/zap-templates/zcl/data-model/draft/electrical-measurement-cluster.xml \
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
index 76a8a054103362..8ef273aec70477 100644
--- a/scripts/rules.matterlint
+++ b/scripts/rules.matterlint
@@ -71,6 +71,7 @@ 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/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";
load "../src/app/zap-templates/zcl/data-model/draft/barrier-control-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/draft/electrical-measurement-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/draft/input-output-value-clusters.xml";
diff --git a/src/app/zap-templates/zcl/data-model/all.xml b/src/app/zap-templates/zcl/data-model/all.xml
index 97c8e90e6ae692..62571d78e1c66a 100644
--- a/src/app/zap-templates/zcl/data-model/all.xml
+++ b/src/app/zap-templates/zcl/data-model/all.xml
@@ -73,6 +73,7 @@
+
diff --git a/src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml
new file mode 100644
index 00000000000000..684c8e25c43edb
--- /dev/null
+++ b/src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Temperature Control
+ Appliances
+ Attributes and commands for configuring the temperature control, and reporting temperature.
+ 0x0056
+ TEMPERATURE_CONTROL_CLUSTER
+ true
+ true
+ TemperatureSetpoint
+ MinTemperature
+ MaxTemperature
+ Step
+ CurrentTemperatureLevelIndex
+ SupportedTemperatureLevels
+
+
+ Set Temperature
+
+
+
+
+
+
+
+
+
+
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 05dae33147d379..397e35d5e7341f 100644
--- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json
+++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
@@ -78,6 +78,7 @@
"software-diagnostics-cluster.xml",
"switch-cluster.xml",
"target-navigator-cluster.xml",
+ "temperature-control-cluster.xml",
"temperature-measurement-cluster.xml",
"test-cluster.xml",
"thermostat-cluster.xml",
@@ -286,7 +287,8 @@
"DSTOffset",
"UTCTime",
"LocalTime"
- ]
+ ],
+ "Temperature Control": ["SupportedTemperatureLevels"]
},
"defaultReportingPolicy": "mandatory",
"ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json
index 9fd8c6caf9ec79..c91a3bd561731d 100644
--- a/src/app/zap-templates/zcl/zcl.json
+++ b/src/app/zap-templates/zcl/zcl.json
@@ -76,6 +76,7 @@
"software-diagnostics-cluster.xml",
"switch-cluster.xml",
"target-navigator-cluster.xml",
+ "temperature-control-cluster.xml",
"temperature-measurement-cluster.xml",
"test-cluster.xml",
"thermostat-cluster.xml",
@@ -284,7 +285,8 @@
"DSTOffset",
"UTCTime",
"LocalTime"
- ]
+ ],
+ "Temperature Control": ["SupportedTemperatureLevels"]
},
"defaultReportingPolicy": "mandatory",
"ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json
index d86183fb3e8a4b..a96d532425c1a7 100644
--- a/src/app/zap_cluster_list.json
+++ b/src/app/zap_cluster_list.json
@@ -97,6 +97,7 @@
"WATER_TANK_MONITORING_CLUSTER": [],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": [],
"WINDOW_COVERING_CLUSTER": [],
+ "TEMPERATURE_CONTROL_CLUSTER": [],
"ZEOLITE_FILTER_MONITORING_CLUSTER": [],
"ZLL_COMMISSIONING_CLUSTER": []
},
@@ -199,6 +200,7 @@
"WAKE_ON_LAN_CLUSTER": ["wake-on-lan-server"],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": ["wifi-network-diagnostics-server"],
"WINDOW_COVERING_CLUSTER": ["window-covering-server"],
+ "TEMPERATURE_CONTROL_CLUSTER": ["temperature-control-server"],
"ZLL_COMMISSIONING_CLUSTER": []
}
}
diff --git a/src/controller/data_model/BUILD.gn b/src/controller/data_model/BUILD.gn
index b4944bad11436c..549fd967716025 100644
--- a/src/controller/data_model/BUILD.gn
+++ b/src/controller/data_model/BUILD.gn
@@ -184,6 +184,8 @@ if (current_os == "android" || build_java_matter_controller) {
"jni/SwitchClient-ReadImpl.cpp",
"jni/TargetNavigatorClient-InvokeSubscribeImpl.cpp",
"jni/TargetNavigatorClient-ReadImpl.cpp",
+ "jni/TemperatureControlClient-InvokeSubscribeImpl.cpp",
+ "jni/TemperatureControlClient-ReadImpl.cpp",
"jni/TemperatureMeasurementClient-InvokeSubscribeImpl.cpp",
"jni/TemperatureMeasurementClient-ReadImpl.cpp",
"jni/ThermostatClient-InvokeSubscribeImpl.cpp",
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index f17dd261202ba4..f1f4eb2bdf4cca 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -2772,6 +2772,40 @@ client cluster ModeSelect = 80 {
command ChangeToMode(ChangeToModeRequest): DefaultSuccess = 0;
}
+/** Attributes and commands for configuring the temperature control, and reporting temperature. */
+client cluster TemperatureControl = 86 {
+ bitmap Feature : BITMAP32 {
+ kTemperatureNumber = 0x1;
+ kTemperatureLevel = 0x2;
+ }
+
+ struct TemperatureLevelStruct {
+ char_string<64> label = 0;
+ int8u tempLevel = 1;
+ }
+
+ readonly attribute optional int16s temperatureSetpoint = 0;
+ readonly attribute optional int16s minTemperature = 1;
+ readonly attribute optional int16s maxTemperature = 2;
+ readonly attribute optional int16s step = 3;
+ readonly attribute optional int8u currentTemperatureLevelIndex = 4;
+ readonly attribute optional TemperatureLevelStruct supportedTemperatureLevels[] = 5;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct SetTemperatureRequest {
+ optional INT16S targetTemperature = 0;
+ optional INT8U targetTemperatureLevel = 1;
+ }
+
+ /** Set Temperature */
+ command SetTemperature(SetTemperatureRequest): DefaultSuccess = 0;
+}
+
/** Attributes for reporting air quality classification */
client cluster AirQuality = 91 {
enum AirQualityEnum : ENUM8 {
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
index e9c9ad74118d7b..306e57c0abbcdf 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -7779,6 +7779,185 @@ private static Map readModeSelectInteractionInfo() {
return result;
}
+ private static Map readTemperatureControlInteractionInfo() {
+ Map result = new LinkedHashMap<>();
+ Map readTemperatureControlTemperatureSetpointCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlTemperatureSetpointAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readTemperatureSetpointAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlTemperatureSetpointCommandParams);
+ result.put(
+ "readTemperatureSetpointAttribute",
+ readTemperatureControlTemperatureSetpointAttributeInteractionInfo);
+ Map readTemperatureControlMinTemperatureCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlMinTemperatureAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readMinTemperatureAttribute((ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlMinTemperatureCommandParams);
+ result.put(
+ "readMinTemperatureAttribute",
+ readTemperatureControlMinTemperatureAttributeInteractionInfo);
+ Map readTemperatureControlMaxTemperatureCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlMaxTemperatureAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readMaxTemperatureAttribute((ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlMaxTemperatureCommandParams);
+ result.put(
+ "readMaxTemperatureAttribute",
+ readTemperatureControlMaxTemperatureAttributeInteractionInfo);
+ Map readTemperatureControlStepCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlStepAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readStepAttribute((ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlStepCommandParams);
+ result.put("readStepAttribute", readTemperatureControlStepAttributeInteractionInfo);
+ Map
+ readTemperatureControlCurrentTemperatureLevelIndexCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlCurrentTemperatureLevelIndexAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readCurrentTemperatureLevelIndexAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlCurrentTemperatureLevelIndexCommandParams);
+ result.put(
+ "readCurrentTemperatureLevelIndexAttribute",
+ readTemperatureControlCurrentTemperatureLevelIndexAttributeInteractionInfo);
+ Map
+ readTemperatureControlSupportedTemperatureLevelsCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlSupportedTemperatureLevelsAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readSupportedTemperatureLevelsAttribute(
+ (ChipClusters.TemperatureControlCluster
+ .SupportedTemperatureLevelsAttributeCallback)
+ callback);
+ },
+ () ->
+ new ClusterInfoMapping
+ .DelegatedTemperatureControlClusterSupportedTemperatureLevelsAttributeCallback(),
+ readTemperatureControlSupportedTemperatureLevelsCommandParams);
+ result.put(
+ "readSupportedTemperatureLevelsAttribute",
+ readTemperatureControlSupportedTemperatureLevelsAttributeInteractionInfo);
+ Map readTemperatureControlGeneratedCommandListCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlGeneratedCommandListAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readGeneratedCommandListAttribute(
+ (ChipClusters.TemperatureControlCluster.GeneratedCommandListAttributeCallback)
+ callback);
+ },
+ () ->
+ new ClusterInfoMapping
+ .DelegatedTemperatureControlClusterGeneratedCommandListAttributeCallback(),
+ readTemperatureControlGeneratedCommandListCommandParams);
+ result.put(
+ "readGeneratedCommandListAttribute",
+ readTemperatureControlGeneratedCommandListAttributeInteractionInfo);
+ Map readTemperatureControlAcceptedCommandListCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlAcceptedCommandListAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readAcceptedCommandListAttribute(
+ (ChipClusters.TemperatureControlCluster.AcceptedCommandListAttributeCallback)
+ callback);
+ },
+ () ->
+ new ClusterInfoMapping
+ .DelegatedTemperatureControlClusterAcceptedCommandListAttributeCallback(),
+ readTemperatureControlAcceptedCommandListCommandParams);
+ result.put(
+ "readAcceptedCommandListAttribute",
+ readTemperatureControlAcceptedCommandListAttributeInteractionInfo);
+ Map readTemperatureControlEventListCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlEventListAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readEventListAttribute(
+ (ChipClusters.TemperatureControlCluster.EventListAttributeCallback) callback);
+ },
+ () ->
+ new ClusterInfoMapping
+ .DelegatedTemperatureControlClusterEventListAttributeCallback(),
+ readTemperatureControlEventListCommandParams);
+ result.put("readEventListAttribute", readTemperatureControlEventListAttributeInteractionInfo);
+ Map readTemperatureControlAttributeListCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlAttributeListAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readAttributeListAttribute(
+ (ChipClusters.TemperatureControlCluster.AttributeListAttributeCallback)
+ callback);
+ },
+ () ->
+ new ClusterInfoMapping
+ .DelegatedTemperatureControlClusterAttributeListAttributeCallback(),
+ readTemperatureControlAttributeListCommandParams);
+ result.put(
+ "readAttributeListAttribute", readTemperatureControlAttributeListAttributeInteractionInfo);
+ Map readTemperatureControlFeatureMapCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlFeatureMapAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readFeatureMapAttribute((ChipClusters.LongAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedLongAttributeCallback(),
+ readTemperatureControlFeatureMapCommandParams);
+ result.put("readFeatureMapAttribute", readTemperatureControlFeatureMapAttributeInteractionInfo);
+ Map readTemperatureControlClusterRevisionCommandParams =
+ new LinkedHashMap();
+ InteractionInfo readTemperatureControlClusterRevisionAttributeInteractionInfo =
+ new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.TemperatureControlCluster) cluster)
+ .readClusterRevisionAttribute((ChipClusters.IntegerAttributeCallback) callback);
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readTemperatureControlClusterRevisionCommandParams);
+ result.put(
+ "readClusterRevisionAttribute",
+ readTemperatureControlClusterRevisionAttributeInteractionInfo);
+
+ return result;
+ }
+
private static Map readAirQualityInteractionInfo() {
Map result = new LinkedHashMap<>();
Map readAirQualityAirQualityCommandParams =
@@ -19524,6 +19703,7 @@ public Map> getReadAttributeMap() {
put("booleanState", readBooleanStateInteractionInfo());
put("icdManagement", readIcdManagementInteractionInfo());
put("modeSelect", readModeSelectInteractionInfo());
+ put("temperatureControl", readTemperatureControlInteractionInfo());
put("airQuality", readAirQualityInteractionInfo());
put("smokeCoAlarm", readSmokeCoAlarmInteractionInfo());
put("hepaFilterMonitoring", readHepaFilterMonitoringInteractionInfo());
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
index b81fdbe9e321fa..5dec09e00c8159 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
@@ -637,6 +637,8 @@ public Map> getWriteAttributeMap() {
writeModeSelectInteractionInfo.put(
"writeOnModeAttribute", writeModeSelectOnModeAttributeInteractionInfo);
writeAttributeMap.put("modeSelect", writeModeSelectInteractionInfo);
+ Map writeTemperatureControlInteractionInfo = new LinkedHashMap<>();
+ writeAttributeMap.put("temperatureControl", writeTemperatureControlInteractionInfo);
Map writeAirQualityInteractionInfo = new LinkedHashMap<>();
writeAttributeMap.put("airQuality", writeAirQualityInteractionInfo);
Map writeSmokeCoAlarmInteractionInfo = new LinkedHashMap<>();
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index bd2486993d2a2a..ca6bffdeeb7eeb 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -12174,6 +12174,265 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
}
break;
}
+ case app::Clusters::TemperatureControl::Id: {
+ using namespace app::Clusters::TemperatureControl;
+ switch (aPath.mAttributeId)
+ {
+ case Attributes::TemperatureSetpoint::Id: {
+ using TypeInfo = Attributes::TemperatureSetpoint::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::MinTemperature::Id: {
+ using TypeInfo = Attributes::MinTemperature::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::MaxTemperature::Id: {
+ using TypeInfo = Attributes::MaxTemperature::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::Step::Id: {
+ using TypeInfo = Attributes::Step::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::CurrentTemperatureLevelIndex::Id: {
+ using TypeInfo = Attributes::CurrentTemperatureLevelIndex::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::SupportedTemperatureLevels::Id: {
+ using TypeInfo = Attributes::SupportedTemperatureLevels::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ jobject newElement_0_label;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.label, newElement_0_label));
+ jobject newElement_0_tempLevel;
+ std::string newElement_0_tempLevelClassName = "java/lang/Integer";
+ std::string newElement_0_tempLevelCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_tempLevelClassName.c_str(),
+ newElement_0_tempLevelCtorSignature.c_str(),
+ entry_0.tempLevel, newElement_0_tempLevel);
+
+ jclass temperatureLevelStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$TemperatureControlClusterTemperatureLevelStruct",
+ temperatureLevelStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$TemperatureControlClusterTemperatureLevelStruct");
+ return nullptr;
+ }
+ jmethodID temperatureLevelStructStructCtor_1 =
+ env->GetMethodID(temperatureLevelStructStructClass_1, "", "(Ljava/lang/String;Ljava/lang/Integer;)V");
+ if (temperatureLevelStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$TemperatureControlClusterTemperatureLevelStruct constructor");
+ return nullptr;
+ }
+
+ newElement_0 = env->NewObject(temperatureLevelStructStructClass_1, temperatureLevelStructStructCtor_1,
+ newElement_0_label, newElement_0_tempLevel);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ 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::AirQuality::Id: {
using namespace app::Clusters::AirQuality;
switch (aPath.mAttributeId)
diff --git a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
index b1f2729ac86888..965fc7ecc5cabc 100644
--- a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
@@ -2422,6 +2422,16 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
}
break;
}
+ case app::Clusters::TemperatureControl::Id: {
+ using namespace app::Clusters::TemperatureControl;
+ switch (aPath.mEventId)
+ {
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::AirQuality::Id: {
using namespace app::Clusters::AirQuality;
switch (aPath.mEventId)
diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
index 9f174184eab969..4fb2f30cf7079e 100644
--- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
@@ -20232,6 +20232,388 @@ void CHIPModeSelectAttributeListAttributeCallback::CallbackFn(void * context,
env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
}
+CHIPTemperatureControlSupportedTemperatureLevelsAttributeCallback::
+ CHIPTemperatureControlSupportedTemperatureLevelsAttributeCallback(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");
+ }
+}
+
+CHIPTemperatureControlSupportedTemperatureLevelsAttributeCallback::
+ ~CHIPTemperatureControlSupportedTemperatureLevelsAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPTemperatureControlSupportedTemperatureLevelsAttributeCallback::CallbackFn(
+ void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType> & list)
+{
+ chip::DeviceLayer::StackUnlock unlock;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ jobject javaCallbackRef;
+
+ VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+ std::unique_ptr cppCallback(
+ reinterpret_cast(context), maybeDestroy);
+
+ // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
+ javaCallbackRef = cppCallback.get()->javaCallbackRef;
+ VerifyOrReturn(javaCallbackRef != nullptr,
+ ChipLogProgress(Zcl, "Early return from attribute callback since Java callback is null"));
+
+ jmethodID javaMethod;
+ err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/util/List;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess() method"));
+
+ jobject arrayListObj;
+ chip::JniReferences::GetInstance().CreateArrayList(arrayListObj);
+
+ auto iter_arrayListObj_0 = list.begin();
+ while (iter_arrayListObj_0.Next())
+ {
+ auto & entry_0 = iter_arrayListObj_0.GetValue();
+ jobject newElement_0;
+ jobject newElement_0_label;
+ LogErrorOnFailure(chip::JniReferences::GetInstance().CharToStringUTF(entry_0.label, newElement_0_label));
+ jobject newElement_0_tempLevel;
+ std::string newElement_0_tempLevelClassName = "java/lang/Integer";
+ std::string newElement_0_tempLevelCtorSignature = "(I)V";
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_tempLevelClassName.c_str(),
+ newElement_0_tempLevelCtorSignature.c_str(),
+ entry_0.tempLevel, newElement_0_tempLevel);
+
+ jclass temperatureLevelStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetClassRef(
+ env, "chip/devicecontroller/ChipStructs$TemperatureControlClusterTemperatureLevelStruct",
+ temperatureLevelStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$TemperatureControlClusterTemperatureLevelStruct");
+ return;
+ }
+ jmethodID temperatureLevelStructStructCtor_1 =
+ env->GetMethodID(temperatureLevelStructStructClass_1, "", "(Ljava/lang/String;Ljava/lang/Integer;)V");
+ if (temperatureLevelStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$TemperatureControlClusterTemperatureLevelStruct constructor");
+ return;
+ }
+
+ newElement_0 = env->NewObject(temperatureLevelStructStructClass_1, temperatureLevelStructStructCtor_1, newElement_0_label,
+ newElement_0_tempLevel);
+ chip::JniReferences::GetInstance().AddToList(arrayListObj, newElement_0);
+ }
+
+ env->ExceptionClear();
+ env->CallVoidMethod(javaCallbackRef, javaMethod, arrayListObj);
+}
+
+CHIPTemperatureControlGeneratedCommandListAttributeCallback::CHIPTemperatureControlGeneratedCommandListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPTemperatureControlGeneratedCommandListAttributeCallback::~CHIPTemperatureControlGeneratedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPTemperatureControlGeneratedCommandListAttributeCallback::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);
+}
+
+CHIPTemperatureControlAcceptedCommandListAttributeCallback::CHIPTemperatureControlAcceptedCommandListAttributeCallback(
+ 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");
+ }
+}
+
+CHIPTemperatureControlAcceptedCommandListAttributeCallback::~CHIPTemperatureControlAcceptedCommandListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPTemperatureControlAcceptedCommandListAttributeCallback::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);
+}
+
+CHIPTemperatureControlEventListAttributeCallback::CHIPTemperatureControlEventListAttributeCallback(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");
+ }
+}
+
+CHIPTemperatureControlEventListAttributeCallback::~CHIPTemperatureControlEventListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPTemperatureControlEventListAttributeCallback::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);
+}
+
+CHIPTemperatureControlAttributeListAttributeCallback::CHIPTemperatureControlAttributeListAttributeCallback(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");
+ }
+}
+
+CHIPTemperatureControlAttributeListAttributeCallback::~CHIPTemperatureControlAttributeListAttributeCallback()
+{
+ JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPTemperatureControlAttributeListAttributeCallback::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);
+}
+
CHIPAirQualityGeneratedCommandListAttributeCallback::CHIPAirQualityGeneratedCommandListAttributeCallback(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 783482906b22e0..1f28de5a0bb512 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -13883,6 +13883,251 @@ private native void subscribeClusterRevisionAttribute(
long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
}
+ public static class TemperatureControlCluster extends BaseChipCluster {
+ public static final long CLUSTER_ID = 86L;
+
+ public TemperatureControlCluster(long devicePtr, int endpointId) {
+ super(devicePtr, endpointId);
+ }
+
+ @Override
+ public native long initWithDevice(long devicePtr, int endpointId);
+
+ public interface SupportedTemperatureLevelsAttributeCallback {
+ void onSuccess(List valueList);
+
+ void onError(Exception ex);
+
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public interface GeneratedCommandListAttributeCallback {
+ void onSuccess(List valueList);
+
+ void onError(Exception ex);
+
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public interface AcceptedCommandListAttributeCallback {
+ void onSuccess(List valueList);
+
+ void onError(Exception ex);
+
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public interface EventListAttributeCallback {
+ void onSuccess(List valueList);
+
+ void onError(Exception ex);
+
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public interface AttributeListAttributeCallback {
+ void onSuccess(List valueList);
+
+ void onError(Exception ex);
+
+ default void onSubscriptionEstablished(long subscriptionId) {}
+ }
+
+ public void readTemperatureSetpointAttribute(IntegerAttributeCallback callback) {
+ readTemperatureSetpointAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeTemperatureSetpointAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeTemperatureSetpointAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readMinTemperatureAttribute(IntegerAttributeCallback callback) {
+ readMinTemperatureAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeMinTemperatureAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeMinTemperatureAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readMaxTemperatureAttribute(IntegerAttributeCallback callback) {
+ readMaxTemperatureAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeMaxTemperatureAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeMaxTemperatureAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readStepAttribute(IntegerAttributeCallback callback) {
+ readStepAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeStepAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeStepAttribute(chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readCurrentTemperatureLevelIndexAttribute(IntegerAttributeCallback callback) {
+ readCurrentTemperatureLevelIndexAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeCurrentTemperatureLevelIndexAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeCurrentTemperatureLevelIndexAttribute(
+ chipClusterPtr, callback, minInterval, maxInterval);
+ }
+
+ public void readSupportedTemperatureLevelsAttribute(
+ SupportedTemperatureLevelsAttributeCallback callback) {
+ readSupportedTemperatureLevelsAttribute(chipClusterPtr, callback);
+ }
+
+ public void subscribeSupportedTemperatureLevelsAttribute(
+ SupportedTemperatureLevelsAttributeCallback callback, int minInterval, int maxInterval) {
+ subscribeSupportedTemperatureLevelsAttribute(
+ 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 readTemperatureSetpointAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback);
+
+ private native void subscribeTemperatureSetpointAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
+
+ private native void readMinTemperatureAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback);
+
+ private native void subscribeMinTemperatureAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
+
+ private native void readMaxTemperatureAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback);
+
+ private native void subscribeMaxTemperatureAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
+
+ private native void readStepAttribute(long chipClusterPtr, IntegerAttributeCallback callback);
+
+ private native void subscribeStepAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
+
+ private native void readCurrentTemperatureLevelIndexAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback);
+
+ private native void subscribeCurrentTemperatureLevelIndexAttribute(
+ long chipClusterPtr, IntegerAttributeCallback callback, int minInterval, int maxInterval);
+
+ private native void readSupportedTemperatureLevelsAttribute(
+ long chipClusterPtr, SupportedTemperatureLevelsAttributeCallback callback);
+
+ private native void subscribeSupportedTemperatureLevelsAttribute(
+ long chipClusterPtr,
+ SupportedTemperatureLevelsAttributeCallback 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 AirQualityCluster extends BaseChipCluster {
public static final long CLUSTER_ID = 91L;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
index 436fd8eb0aac41..37fd144d52cfac 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipIdLookup.java
@@ -151,6 +151,9 @@ public static String clusterIdToName(long clusterId) {
if (clusterId == 80L) {
return "ModeSelect";
}
+ if (clusterId == 86L) {
+ return "TemperatureControl";
+ }
if (clusterId == 91L) {
return "AirQuality";
}
@@ -2031,6 +2034,45 @@ public static String attributeIdToName(long clusterId, long attributeId) {
}
return "";
}
+ if (clusterId == 86L) {
+ if (attributeId == 0L) {
+ return "TemperatureSetpoint";
+ }
+ if (attributeId == 1L) {
+ return "MinTemperature";
+ }
+ if (attributeId == 2L) {
+ return "MaxTemperature";
+ }
+ if (attributeId == 3L) {
+ return "Step";
+ }
+ if (attributeId == 4L) {
+ return "CurrentTemperatureLevelIndex";
+ }
+ if (attributeId == 5L) {
+ return "SupportedTemperatureLevels";
+ }
+ 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 == 91L) {
if (attributeId == 0L) {
return "AirQuality";
@@ -4886,6 +4928,9 @@ public static String eventIdToName(long clusterId, long eventId) {
if (clusterId == 80L) {
return "";
}
+ if (clusterId == 86L) {
+ return "";
+ }
if (clusterId == 91L) {
return "";
}
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
index 552977ba3dd20c..9b03b8e8d2b064 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java
@@ -1518,6 +1518,30 @@ public String toString() {
}
}
+ public static class TemperatureControlClusterTemperatureLevelStruct {
+ public String label;
+ public Integer tempLevel;
+
+ public TemperatureControlClusterTemperatureLevelStruct(String label, Integer tempLevel) {
+ this.label = label;
+ this.tempLevel = tempLevel;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("TemperatureControlClusterTemperatureLevelStruct {\n");
+ output.append("\tlabel: ");
+ output.append(label);
+ output.append("\n");
+ output.append("\ttempLevel: ");
+ output.append(tempLevel);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+ }
+
public static class DoorLockClusterCredentialStruct {
public Integer credentialType;
public Integer credentialIndex;
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
index c263cb7b870b97..6b5e710a42e614 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
@@ -7366,6 +7366,129 @@ public void onError(Exception ex) {
}
}
+ public static class DelegatedTemperatureControlClusterSupportedTemperatureLevelsAttributeCallback
+ implements ChipClusters.TemperatureControlCluster.SupportedTemperatureLevelsAttributeCallback,
+ 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 DelegatedTemperatureControlClusterGeneratedCommandListAttributeCallback
+ implements ChipClusters.TemperatureControlCluster.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 DelegatedTemperatureControlClusterAcceptedCommandListAttributeCallback
+ implements ChipClusters.TemperatureControlCluster.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 DelegatedTemperatureControlClusterEventListAttributeCallback
+ implements ChipClusters.TemperatureControlCluster.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 DelegatedTemperatureControlClusterAttributeListAttributeCallback
+ implements ChipClusters.TemperatureControlCluster.AttributeListAttributeCallback,
+ 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 DelegatedAirQualityClusterGeneratedCommandListAttributeCallback
implements ChipClusters.AirQualityCluster.GeneratedCommandListAttributeCallback,
DelegatedClusterCallback {
@@ -15546,6 +15669,11 @@ public Map initializeClusterMap() {
(ptr, endpointId) -> new ChipClusters.ModeSelectCluster(ptr, endpointId),
new HashMap<>());
clusterMap.put("modeSelect", modeSelectClusterInfo);
+ ClusterInfo temperatureControlClusterInfo =
+ new ClusterInfo(
+ (ptr, endpointId) -> new ChipClusters.TemperatureControlCluster(ptr, endpointId),
+ new HashMap<>());
+ clusterMap.put("temperatureControl", temperatureControlClusterInfo);
ClusterInfo airQualityClusterInfo =
new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.AirQualityCluster(ptr, endpointId),
@@ -15836,6 +15964,7 @@ public void combineCommand(
destination.get("booleanState").combineCommands(source.get("booleanState"));
destination.get("icdManagement").combineCommands(source.get("icdManagement"));
destination.get("modeSelect").combineCommands(source.get("modeSelect"));
+ destination.get("temperatureControl").combineCommands(source.get("temperatureControl"));
destination.get("airQuality").combineCommands(source.get("airQuality"));
destination.get("smokeCoAlarm").combineCommands(source.get("smokeCoAlarm"));
destination.get("hepaFilterMonitoring").combineCommands(source.get("hepaFilterMonitoring"));
@@ -17995,6 +18124,9 @@ public Map> getCommandMap() {
modeSelectchangeToModeCommandParams);
modeSelectClusterInteractionInfoMap.put("changeToMode", modeSelectchangeToModeInteractionInfo);
commandMap.put("modeSelect", modeSelectClusterInteractionInfoMap);
+ Map temperatureControlClusterInteractionInfoMap =
+ new LinkedHashMap<>();
+ commandMap.put("temperatureControl", temperatureControlClusterInteractionInfoMap);
Map airQualityClusterInteractionInfoMap = new LinkedHashMap<>();
commandMap.put("airQuality", airQualityClusterInteractionInfoMap);
Map smokeCoAlarmClusterInteractionInfoMap = new LinkedHashMap<>();
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 19eac70e7a158c..0b2a818f8ed959 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -15101,6 +15101,273 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
value: 'uint' = 0
+@dataclass
+class TemperatureControl(Cluster):
+ id: typing.ClassVar[int] = 0x0056
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="temperatureSetpoint", Tag=0x00000000, Type=typing.Optional[int]),
+ ClusterObjectFieldDescriptor(Label="minTemperature", Tag=0x00000001, Type=typing.Optional[int]),
+ ClusterObjectFieldDescriptor(Label="maxTemperature", Tag=0x00000002, Type=typing.Optional[int]),
+ ClusterObjectFieldDescriptor(Label="step", Tag=0x00000003, Type=typing.Optional[int]),
+ ClusterObjectFieldDescriptor(Label="currentTemperatureLevelIndex", Tag=0x00000004, Type=typing.Optional[uint]),
+ ClusterObjectFieldDescriptor(Label="supportedTemperatureLevels", Tag=0x00000005, Type=typing.Optional[typing.List[TemperatureControl.Structs.TemperatureLevelStruct]]),
+ 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),
+ ])
+
+ temperatureSetpoint: 'typing.Optional[int]' = None
+ minTemperature: 'typing.Optional[int]' = None
+ maxTemperature: 'typing.Optional[int]' = None
+ step: 'typing.Optional[int]' = None
+ currentTemperatureLevelIndex: 'typing.Optional[uint]' = None
+ supportedTemperatureLevels: 'typing.Optional[typing.List[TemperatureControl.Structs.TemperatureLevelStruct]]' = 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):
+ kTemperatureNumber = 0x1
+ kTemperatureLevel = 0x2
+
+ class Structs:
+ @dataclass
+ class TemperatureLevelStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="label", Tag=0, Type=str),
+ ClusterObjectFieldDescriptor(Label="tempLevel", Tag=1, Type=uint),
+ ])
+
+ label: 'str' = ""
+ tempLevel: 'uint' = 0
+
+ class Commands:
+ @dataclass
+ class SetTemperature(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0056
+ command_id: typing.ClassVar[int] = 0x00000000
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="targetTemperature", Tag=0, Type=typing.Optional[int]),
+ ClusterObjectFieldDescriptor(Label="targetTemperatureLevel", Tag=1, Type=typing.Optional[uint]),
+ ])
+
+ targetTemperature: 'typing.Optional[int]' = None
+ targetTemperatureLevel: 'typing.Optional[uint]' = None
+
+ class Attributes:
+ @dataclass
+ class TemperatureSetpoint(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000000
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
+
+ value: 'typing.Optional[int]' = None
+
+ @dataclass
+ class MinTemperature(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000001
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
+
+ value: 'typing.Optional[int]' = None
+
+ @dataclass
+ class MaxTemperature(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000002
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
+
+ value: 'typing.Optional[int]' = None
+
+ @dataclass
+ class Step(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000003
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
+
+ value: 'typing.Optional[int]' = None
+
+ @dataclass
+ class CurrentTemperatureLevelIndex(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000004
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
+
+ value: 'typing.Optional[uint]' = None
+
+ @dataclass
+ class SupportedTemperatureLevels(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000005
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[TemperatureControl.Structs.TemperatureLevelStruct]])
+
+ value: 'typing.Optional[typing.List[TemperatureControl.Structs.TemperatureLevelStruct]]' = None
+
+ @dataclass
+ class GeneratedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x0056
+
+ @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 0x0056
+
+ @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 0x0056
+
+ @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 0x0056
+
+ @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 0x0056
+
+ @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 0x0056
+
+ @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 AirQuality(Cluster):
id: typing.ClassVar[int] = 0x005B
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index ce3429d31760cd..aa98a43f38aa53 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -9022,6 +9022,230 @@ static id _Nullable DecodeAttributeValueForModeSelectCluster(
*aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
return nil;
}
+static id _Nullable DecodeAttributeValueForTemperatureControlCluster(
+ AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::TemperatureControl;
+ switch (aAttributeId) {
+ case Attributes::TemperatureSetpoint::Id: {
+ using TypeInfo = Attributes::TemperatureSetpoint::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithShort:cppValue];
+ return value;
+ }
+ case Attributes::MinTemperature::Id: {
+ using TypeInfo = Attributes::MinTemperature::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithShort:cppValue];
+ return value;
+ }
+ case Attributes::MaxTemperature::Id: {
+ using TypeInfo = Attributes::MaxTemperature::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithShort:cppValue];
+ return value;
+ }
+ case Attributes::Step::Id: {
+ using TypeInfo = Attributes::Step::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSNumber * _Nonnull value;
+ value = [NSNumber numberWithShort:cppValue];
+ return value;
+ }
+ case Attributes::CurrentTemperatureLevelIndex::Id: {
+ using TypeInfo = Attributes::CurrentTemperatureLevelIndex::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::SupportedTemperatureLevels::Id: {
+ using TypeInfo = Attributes::SupportedTemperatureLevels::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();
+ MTRTemperatureControlClusterTemperatureLevelStruct * newElement_0;
+ newElement_0 = [MTRTemperatureControlClusterTemperatureLevelStruct new];
+ newElement_0.label = [[NSString alloc] initWithBytes:entry_0.label.data()
+ length:entry_0.label.size()
+ encoding:NSUTF8StringEncoding];
+ newElement_0.tempLevel = [NSNumber numberWithUnsignedChar:entry_0.tempLevel];
+ [array_0 addObject:newElement_0];
+ }
+ CHIP_ERROR err = iter_0.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ *aError = err;
+ return nil;
+ }
+ value = array_0;
+ }
+ return value;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ using TypeInfo = Attributes::GeneratedCommandList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *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 DecodeAttributeValueForAirQualityCluster(
AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
@@ -22259,6 +22483,9 @@ id _Nullable MTRDecodeAttributeValue(const ConcreteAttributePath & aPath, TLV::T
case Clusters::ModeSelect::Id: {
return DecodeAttributeValueForModeSelectCluster(aPath.mAttributeId, aReader, aError);
}
+ case Clusters::TemperatureControl::Id: {
+ return DecodeAttributeValueForTemperatureControlCluster(aPath.mAttributeId, aReader, aError);
+ }
case Clusters::AirQuality::Id: {
return DecodeAttributeValueForAirQualityCluster(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 b7fadf7110dfcb..d5be57d1067fc0 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -7870,6 +7870,177 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@end
+/**
+ * Cluster Temperature Control
+ *
+ * Attributes and commands for configuring the temperature control, and reporting temperature.
+ */
+MTR_NEWLY_AVAILABLE
+@interface MTRBaseClusterTemperatureControl : MTRCluster
+
+- (instancetype _Nullable)initWithDevice:(MTRBaseDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER MTR_NEWLY_AVAILABLE;
+
+/**
+ * Command SetTemperature
+ *
+ * Set Temperature
+ */
+- (void)setTemperatureWithParams:(MTRTemperatureControlClusterSetTemperatureParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeTemperatureSetpointWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeTemperatureSetpointWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeTemperatureSetpointWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeMinTemperatureWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeMinTemperatureWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeMinTemperatureWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeMaxTemperatureWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeMaxTemperatureWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeMaxTemperatureWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeStepWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeStepWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+ MTR_NEWLY_AVAILABLE;
++ (void)readAttributeStepWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeCurrentTemperatureLevelIndexWithCompletion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeCurrentTemperatureLevelIndexWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:
+ (MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeCurrentTemperatureLevelIndexWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion
+ MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeSupportedTemperatureLevelsWithCompletion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+- (void)subscribeAttributeSupportedTemperatureLevelsWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))reportHandler MTR_NEWLY_AVAILABLE;
++ (void)readAttributeSupportedTemperatureLevelsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion MTR_NEWLY_AVAILABLE;
+
+- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+ 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 Air Quality
*
@@ -23024,6 +23195,11 @@ typedef NS_OPTIONS(uint32_t, MTRModeSelectFeature) {
MTRModeSelectFeatureDEPONOFF API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x1,
} API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
+typedef NS_OPTIONS(uint32_t, MTRTemperatureControlFeature) {
+ MTRTemperatureControlFeatureTemperatureNumber MTR_NEWLY_AVAILABLE = 0x1,
+ MTRTemperatureControlFeatureTemperatureLevel MTR_NEWLY_AVAILABLE = 0x2,
+} MTR_NEWLY_AVAILABLE;
+
typedef NS_ENUM(uint8_t, MTRAirQuality) {
MTRAirQualityUnknown MTR_NEWLY_AVAILABLE = 0x00,
MTRAirQualityGood MTR_NEWLY_AVAILABLE = 0x01,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index a87eb9f6355b88..c72f186934b01b 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -47806,6 +47806,600 @@ - (nullable instancetype)initWithDevice:(MTRBaseDevice *)device endpoint:(uint16
@end
+@implementation MTRBaseClusterTemperatureControl
+
+- (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)setTemperatureWithParams:(MTRTemperatureControlClusterSetTemperatureParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion
+{
+ // Make a copy of params before we go async.
+ params = [params copy];
+ auto * bridge = new MTRCommandSuccessCallbackBridge(
+ self.callbackQueue,
+ ^(id _Nullable value, NSError * _Nullable error) {
+ completion(error);
+ },
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb,
+ MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ TemperatureControl::Commands::SetTemperature::Type request;
+ if (params != nil) {
+ if (params.timedInvokeTimeoutMs != nil) {
+ params.timedInvokeTimeoutMs = MTRClampedNumber(params.timedInvokeTimeoutMs, @(1), @(UINT16_MAX));
+ timedInvokeTimeoutMs.SetValue(params.timedInvokeTimeoutMs.unsignedShortValue);
+ }
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+ if (params != nil) {
+ if (params.targetTemperature != nil) {
+ auto & definedValue_0 = request.targetTemperature.Emplace();
+ definedValue_0 = params.targetTemperature.shortValue;
+ }
+ if (params.targetTemperatureLevel != nil) {
+ auto & definedValue_0 = request.targetTemperatureLevel.Emplace();
+ definedValue_0 = params.targetTemperatureLevel.unsignedCharValue;
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
+- (void)readAttributeTemperatureSetpointWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::TemperatureSetpoint::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeTemperatureSetpointWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::TemperatureSetpoint::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeTemperatureSetpointWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:
+ (void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt16sAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int16sAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::Attributes::TemperatureSetpoint::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)readAttributeMinTemperatureWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::MinTemperature::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeMinTemperatureWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::MinTemperature::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeMinTemperatureWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt16sAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int16sAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::Attributes::MinTemperature::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)readAttributeMaxTemperatureWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::MaxTemperature::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeMaxTemperatureWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::MaxTemperature::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeMaxTemperatureWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt16sAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int16sAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::Attributes::MaxTemperature::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)readAttributeStepWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::Step::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeStepWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::Step::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeStepWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRInt16sAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(
+ clusterStateCacheContainer.baseDevice, ^(Int16sAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::Attributes::Step::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)readAttributeCurrentTemperatureLevelIndexWithCompletion:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::CurrentTemperatureLevelIndex::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeCurrentTemperatureLevelIndexWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:
+ (MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value,
+ NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::CurrentTemperatureLevelIndex::TypeInfo;
+ MTRSubscribeAttribute(params,
+ subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(),
+ TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeCurrentTemperatureLevelIndexWithClusterStateCache:(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 = TemperatureControl::Attributes::CurrentTemperatureLevelIndex::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)readAttributeSupportedTemperatureLevelsWithCompletion:(void (^)(
+ NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ MTRReadParams * params = [[MTRReadParams alloc] init];
+ using TypeInfo = TemperatureControl::Attributes::SupportedTemperatureLevels::TypeInfo;
+ return MTRReadAttribute(
+ params, completion, self.callbackQueue, self.device, self->_endpoint, TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
+- (void)subscribeAttributeSupportedTemperatureLevelsWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:
+ (void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = TemperatureControl::Attributes::SupportedTemperatureLevels::TypeInfo;
+ MTRSubscribeAttribute(params, subscriptionEstablished, reportHandler, self.callbackQueue, self.device, self->_endpoint,
+ TypeInfo::GetClusterId(), TypeInfo::GetAttributeId());
+}
+
++ (void)readAttributeSupportedTemperatureLevelsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer
+ endpoint:(NSNumber *)endpoint
+ queue:(dispatch_queue_t)queue
+ completion:(void (^)(NSArray * _Nullable value,
+ NSError * _Nullable error))completion
+{
+ auto * bridge = new MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(TemperatureControlSupportedTemperatureLevelsListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::Attributes::SupportedTemperatureLevels::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 = TemperatureControl::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 = TemperatureControl::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 MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(TemperatureControlGeneratedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(TemperatureControlAcceptedCommandListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 MTRTemperatureControlEventListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(TemperatureControlEventListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 MTRTemperatureControlAttributeListListAttributeCallbackBridge(queue, completion);
+ std::move(*bridge).DispatchLocalAction(clusterStateCacheContainer.baseDevice,
+ ^(TemperatureControlAttributeListListAttributeCallback successCb, MTRErrorCallback failureCb) {
+ if (clusterStateCacheContainer.cppClusterStateCache) {
+ chip::app::ConcreteAttributePath path;
+ using TypeInfo = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 = TemperatureControl::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 MTRBaseClusterAirQuality
- (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 56acf329bad4af..647703d98d0e62 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 MTRBaseClusterTemperatureControl ()
+@property (nonatomic, strong, readonly) MTRBaseDevice * device;
+@property (nonatomic, assign, readonly) chip::EndpointId endpoint;
+@end
+
@interface MTRBaseClusterAirQuality ()
@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 a614cacfb6f8f9..8500788f0d7e32 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.h
@@ -1095,6 +1095,18 @@ typedef void (*ModeSelectEventListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
typedef void (*ModeSelectAttributeListListAttributeCallback)(void * context,
const chip::app::DataModel::DecodableList & data);
+typedef void (*TemperatureControlSupportedTemperatureLevelsListAttributeCallback)(
+ void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType> & data);
+typedef void (*TemperatureControlGeneratedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*TemperatureControlAcceptedCommandListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
+typedef void (*TemperatureControlEventListListAttributeCallback)(void * context,
+ const chip::app::DataModel::DecodableList & data);
+typedef void (*TemperatureControlAttributeListListAttributeCallback)(
+ void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*AirQualityGeneratedCommandListListAttributeCallback)(
void * context, const chip::app::DataModel::DecodableList & data);
typedef void (*AirQualityAcceptedCommandListListAttributeCallback)(
@@ -8570,6 +8582,173 @@ class MTRModeSelectAttributeListListAttributeCallbackSubscriptionBridge
MTRSubscriptionEstablishedHandler mEstablishedHandler;
};
+class MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action) :
+ MTRCallbackBridge(queue, handler, action, OnSuccessFn){};
+
+ static void OnSuccessFn(void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType> & value);
+};
+
+class MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackSubscriptionBridge
+ : public MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge
+{
+public:
+ MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge(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 MTRTemperatureControlGeneratedCommandListListAttributeCallbackSubscriptionBridge
+ : public MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge
+{
+public:
+ MTRTemperatureControlGeneratedCommandListListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge(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 MTRTemperatureControlAcceptedCommandListListAttributeCallbackSubscriptionBridge
+ : public MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge
+{
+public:
+ MTRTemperatureControlAcceptedCommandListListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRTemperatureControlEventListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRTemperatureControlEventListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRTemperatureControlEventListListAttributeCallbackBridge(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 MTRTemperatureControlEventListListAttributeCallbackSubscriptionBridge
+ : public MTRTemperatureControlEventListListAttributeCallbackBridge
+{
+public:
+ MTRTemperatureControlEventListListAttributeCallbackSubscriptionBridge(dispatch_queue_t queue, ResponseHandler handler,
+ MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRTemperatureControlEventListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRTemperatureControlEventListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRTemperatureControlEventListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
+class MTRTemperatureControlAttributeListListAttributeCallbackBridge
+ : public MTRCallbackBridge
+{
+public:
+ MTRTemperatureControlAttributeListListAttributeCallbackBridge(dispatch_queue_t queue, ResponseHandler handler) :
+ MTRCallbackBridge(queue, handler, OnSuccessFn){};
+
+ MTRTemperatureControlAttributeListListAttributeCallbackBridge(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 MTRTemperatureControlAttributeListListAttributeCallbackSubscriptionBridge
+ : public MTRTemperatureControlAttributeListListAttributeCallbackBridge
+{
+public:
+ MTRTemperatureControlAttributeListListAttributeCallbackSubscriptionBridge(
+ dispatch_queue_t queue, ResponseHandler handler, MTRActionBlock action,
+ MTRSubscriptionEstablishedHandler establishedHandler) :
+ MTRTemperatureControlAttributeListListAttributeCallbackBridge(queue, handler, action),
+ mEstablishedHandler(establishedHandler)
+ {}
+
+ void OnSubscriptionEstablished();
+ using MTRTemperatureControlAttributeListListAttributeCallbackBridge::KeepAliveOnCallback;
+ using MTRTemperatureControlAttributeListListAttributeCallbackBridge::OnDone;
+
+private:
+ MTRSubscriptionEstablishedHandler mEstablishedHandler;
+};
+
class MTRAirQualityGeneratedCommandListListAttributeCallbackBridge
: public MTRCallbackBridge
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
index d5c3dc3b907a70..6d584e09edbd9d 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCallbackBridge.mm
@@ -8133,6 +8133,201 @@
}
}
+void MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackBridge::OnSuccessFn(void * context,
+ const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType> & 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();
+ MTRTemperatureControlClusterTemperatureLevelStruct * newElement_0;
+ newElement_0 = [MTRTemperatureControlClusterTemperatureLevelStruct new];
+ newElement_0.label = [[NSString alloc] initWithBytes:entry_0.label.data()
+ length:entry_0.label.size()
+ encoding:NSUTF8StringEncoding];
+ newElement_0.tempLevel = [NSNumber numberWithUnsignedChar:entry_0.tempLevel];
+ [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 MTRTemperatureControlSupportedTemperatureLevelsListAttributeCallbackSubscriptionBridge::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 MTRTemperatureControlGeneratedCommandListListAttributeCallbackBridge::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 MTRTemperatureControlGeneratedCommandListListAttributeCallbackSubscriptionBridge::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 MTRTemperatureControlAcceptedCommandListListAttributeCallbackBridge::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 MTRTemperatureControlAcceptedCommandListListAttributeCallbackSubscriptionBridge::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 MTRTemperatureControlEventListListAttributeCallbackBridge::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 MTRTemperatureControlEventListListAttributeCallbackSubscriptionBridge::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 MTRTemperatureControlAttributeListListAttributeCallbackBridge::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 MTRTemperatureControlAttributeListListAttributeCallbackSubscriptionBridge::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 MTRAirQualityGeneratedCommandListListAttributeCallbackBridge::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 17a23772033f74..e1d33a8d54b1d3 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,
+ MTRClusterIDTypeTemperatureControlID MTR_NEWLY_AVAILABLE = 0x00000056,
MTRClusterIDTypeAirQualityID MTR_NEWLY_AVAILABLE = 0x0000005B,
MTRClusterIDTypeSmokeCOAlarmID MTR_NEWLY_AVAILABLE = 0x0000005C,
MTRClusterIDTypeHEPAFilterMonitoringID MTR_NEWLY_AVAILABLE = 0x00000071,
@@ -3727,6 +3728,26 @@ typedef NS_ENUM(uint32_t, MTRAttributeIDType) {
MTRAttributeIDTypeClusterModeSelectAttributeClusterRevisionID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+ // Cluster TemperatureControl attributes
+ MTRAttributeIDTypeClusterTemperatureControlAttributeTemperatureSetpointID MTR_NEWLY_AVAILABLE = 0x00000000,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeMinTemperatureID MTR_NEWLY_AVAILABLE = 0x00000001,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeMaxTemperatureID MTR_NEWLY_AVAILABLE = 0x00000002,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeStepID MTR_NEWLY_AVAILABLE = 0x00000003,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeCurrentTemperatureLevelIndexID MTR_NEWLY_AVAILABLE = 0x00000004,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeSupportedTemperatureLevelsID MTR_NEWLY_AVAILABLE = 0x00000005,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeGeneratedCommandListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeGeneratedCommandListID,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeAcceptedCommandListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeAcceptedCommandListID,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeEventListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeEventListID,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeAttributeListID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeAttributeListID,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeFeatureMapID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeFeatureMapID,
+ MTRAttributeIDTypeClusterTemperatureControlAttributeClusterRevisionID MTR_NEWLY_AVAILABLE
+ = MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+
// Cluster AirQuality attributes
MTRAttributeIDTypeClusterAirQualityAttributeAirQualityID MTR_NEWLY_AVAILABLE = 0x00000000,
MTRAttributeIDTypeClusterAirQualityAttributeGeneratedCommandListID MTR_NEWLY_AVAILABLE
@@ -9107,6 +9128,9 @@ typedef NS_ENUM(uint32_t, MTRCommandIDType) {
MTRCommandIDTypeClusterModeSelectCommandChangeToModeID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= 0x00000000,
+ // Cluster TemperatureControl commands
+ MTRCommandIDTypeClusterTemperatureControlCommandSetTemperatureID MTR_NEWLY_AVAILABLE = 0x00000000,
+
// Cluster SmokeCOAlarm commands
MTRCommandIDTypeClusterSmokeCOAlarmCommandSelfTestRequestID MTR_NEWLY_AVAILABLE = 0x00000000,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index dbc7122434dd99..e6bc0cf251ca08 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -2794,6 +2794,53 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@end
+/**
+ * Cluster Temperature Control
+ * Attributes and commands for configuring the temperature control, and reporting temperature.
+ */
+MTR_NEWLY_AVAILABLE
+@interface MTRClusterTemperatureControl : MTRCluster
+
+- (instancetype _Nullable)initWithDevice:(MTRDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER MTR_NEWLY_AVAILABLE;
+
+- (void)setTemperatureWithParams:(MTRTemperatureControlClusterSetTemperatureParams * _Nullable)params
+ expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries
+ expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeTemperatureSetpointWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeMinTemperatureWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeMaxTemperatureWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeStepWithParams:(MTRReadParams * _Nullable)params MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeCurrentTemperatureLevelIndexWithParams:(MTRReadParams * _Nullable)params
+ MTR_NEWLY_AVAILABLE;
+
+- (NSDictionary *)readAttributeSupportedTemperatureLevelsWithParams:(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 Air Quality
* Attributes for reporting air quality classification
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index 6c5d43f88aaa07..70c0811649afc8 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -12937,6 +12937,198 @@ - (void)changeToModeWithParams:(MTRModeSelectClusterChangeToModeParams *)params
}
@end
+@implementation MTRClusterTemperatureControl
+
+- (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;
+}
+
+- (void)setTemperatureWithParams:(MTRTemperatureControlClusterSetTemperatureParams * _Nullable)params
+ expectedValues:(NSArray *> *)expectedValues
+ expectedValueInterval:(NSNumber *)expectedValueIntervalMs
+ completion:(MTRStatusCompletion)completion
+{
+ NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex,
+ _endpoint, (unsigned int) MTRClusterIDTypeTemperatureControlID,
+ (unsigned int) MTRCommandIDTypeClusterTemperatureControlCommandSetTemperatureID];
+ // Make a copy of params before we go async.
+ params = [params copy];
+ NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs;
+ if (timedInvokeTimeoutMsParam) {
+ timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX));
+ }
+ MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue];
+ MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) {
+ MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue);
+ MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID
+ controller:self.device.deviceController];
+ auto * bridge = new MTRCommandSuccessCallbackBridge(
+ self.device.queue,
+ ^(id _Nullable value, NSError * _Nullable error) {
+ MTRClustersLogCompletion(logPrefix, value, error);
+ dispatch_async(self.callbackQueue, ^{
+ completion(error);
+ });
+ [workItem endWork];
+ },
+ ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb,
+ MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) {
+ auto * typedBridge = static_cast(bridge);
+ Optional timedInvokeTimeoutMs;
+ Optional invokeTimeout;
+ ListFreer listFreer;
+ TemperatureControl::Commands::SetTemperature::Type request;
+ if (timedInvokeTimeoutMsParam != nil) {
+ timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue);
+ }
+ if (params != nil) {
+ if (params.serverSideProcessingTimeout != nil) {
+ // Clamp to a number of seconds that will not overflow 32-bit
+ // int when converted to ms.
+ auto * serverSideProcessingTimeout
+ = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX));
+ invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue));
+ }
+ }
+ if (params != nil) {
+ if (params.targetTemperature != nil) {
+ auto & definedValue_0 = request.targetTemperature.Emplace();
+ definedValue_0 = params.targetTemperature.shortValue;
+ }
+ if (params.targetTemperatureLevel != nil) {
+ auto & definedValue_0 = request.targetTemperatureLevel.Emplace();
+ definedValue_0 = params.targetTemperatureLevel.unsignedCharValue;
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb,
+ self->_endpoint, timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(baseDevice);
+ };
+ workItem.readyHandler = readyHandler;
+ MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue);
+ [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem];
+
+ if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) {
+ expectedValues = nil;
+ } else {
+ expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX));
+ }
+ if (expectedValues) {
+ [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs];
+ }
+}
+
+- (NSDictionary *)readAttributeTemperatureSetpointWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeTemperatureSetpointID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeMinTemperatureWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeMinTemperatureID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeMaxTemperatureWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeMaxTemperatureID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeStepWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeStepID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeCurrentTemperatureLevelIndexWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device
+ readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeCurrentTemperatureLevelIndexID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeSupportedTemperatureLevelsWithParams:(MTRReadParams * _Nullable)params
+{
+ return
+ [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeSupportedTemperatureLevelsID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeGeneratedCommandListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeAcceptedCommandListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeEventListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeEventListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeAttributeListID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeFeatureMapID)
+ params:params];
+}
+
+- (NSDictionary *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:@(_endpoint)
+ clusterID:@(MTRClusterIDTypeTemperatureControlID)
+ attributeID:@(MTRAttributeIDTypeClusterTemperatureControlAttributeClusterRevisionID)
+ params:params];
+}
+
+@end
+
@implementation MTRClusterAirQuality
- (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters_Internal.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters_Internal.h
index d0cc71a08709c4..f67f51f2cf702a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters_Internal.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters_Internal.h
@@ -201,6 +201,11 @@
@property (nonatomic, readonly) MTRDevice * device;
@end
+@interface MTRClusterTemperatureControl ()
+@property (nonatomic, readonly) uint16_t endpoint;
+@property (nonatomic, readonly) MTRDevice * device;
+@end
+
@interface MTRClusterAirQuality ()
@property (nonatomic, readonly) uint16_t endpoint;
@property (nonatomic, readonly) MTRDevice * device;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
index 861bbc51fe8b42..342464bf28616a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
@@ -4077,6 +4077,38 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
@end
+MTR_NEWLY_AVAILABLE
+@interface MTRTemperatureControlClusterSetTemperatureParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nullable targetTemperature MTR_NEWLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable targetTemperatureLevel MTR_NEWLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
MTR_NEWLY_AVAILABLE
@interface MTRSmokeCOAlarmClusterSelfTestRequestParams : NSObject
/**
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
index daf32a359e364e..bd6f11686b7439 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
@@ -6458,6 +6458,40 @@ - (NSString *)description
return descriptionString;
}
+@end
+@implementation MTRTemperatureControlClusterSetTemperatureParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _targetTemperature = nil;
+
+ _targetTemperatureLevel = nil;
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRTemperatureControlClusterSetTemperatureParams alloc] init];
+
+ other.targetTemperature = self.targetTemperature;
+ other.targetTemperatureLevel = self.targetTemperatureLevel;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: targetTemperature:%@; targetTemperatureLevel:%@; >",
+ NSStringFromClass([self class]), _targetTemperature, _targetTemperatureLevel];
+ return descriptionString;
+}
+
@end
@implementation MTRSmokeCOAlarmClusterSelfTestRequestParams
- (instancetype)init
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
index 4453da496c6f90..f33a6a16b3300f 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
@@ -1551,6 +1551,18 @@ static id _Nullable DecodeEventPayloadForModeSelectCluster(EventId aEventId, TLV
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
return nil;
}
+static id _Nullable DecodeEventPayloadForTemperatureControlCluster(EventId aEventId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::TemperatureControl;
+ switch (aEventId) {
+ default: {
+ break;
+ }
+ }
+
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ return nil;
+}
static id _Nullable DecodeEventPayloadForAirQualityCluster(EventId aEventId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
using namespace Clusters::AirQuality;
@@ -2874,6 +2886,9 @@ id _Nullable MTRDecodeEventPayload(const ConcreteEventPath & aPath, TLV::TLVRead
case Clusters::ModeSelect::Id: {
return DecodeEventPayloadForModeSelectCluster(aPath.mEventId, aReader, aError);
}
+ case Clusters::TemperatureControl::Id: {
+ return DecodeEventPayloadForTemperatureControlCluster(aPath.mEventId, aReader, aError);
+ }
case Clusters::AirQuality::Id: {
return DecodeEventPayloadForAirQualityCluster(aPath.mEventId, aReader, aError);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
index 69f55412ecf92b..0bf123fda0b9c2 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
@@ -679,6 +679,12 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@property (nonatomic, copy) NSArray * _Nonnull semanticTags API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
@end
+MTR_NEWLY_AVAILABLE
+@interface MTRTemperatureControlClusterTemperatureLevelStruct : NSObject
+@property (nonatomic, copy) NSString * _Nonnull label MTR_NEWLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull tempLevel MTR_NEWLY_AVAILABLE;
+@end
+
MTR_NEWLY_AVAILABLE
@interface MTRSmokeCOAlarmClusterSmokeAlarmEvent : NSObject
@end
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
index bece6deb1aca31..2faddf53bcec91 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
@@ -2667,6 +2667,37 @@ - (NSString *)description
@end
+@implementation MTRTemperatureControlClusterTemperatureLevelStruct
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _label = @"";
+
+ _tempLevel = @(0);
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+ auto other = [[MTRTemperatureControlClusterTemperatureLevelStruct alloc] init];
+
+ other.label = self.label;
+ other.tempLevel = self.tempLevel;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString =
+ [NSString stringWithFormat:@"<%@: label:%@; tempLevel:%@; >", NSStringFromClass([self class]), _label, _tempLevel];
+ return descriptionString;
+}
+
+@end
+
@implementation MTRSmokeCOAlarmClusterSmokeAlarmEvent
- (instancetype)init
{
diff --git a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
index 157a420c1b486e..79e95533170e92 100644
--- a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
+++ b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
@@ -7210,6 +7210,229 @@ EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value)
} // namespace Attributes
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Attributes {
+
+namespace TemperatureSetpoint {
+
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT16S_ATTRIBUTE_TYPE);
+}
+
+} // namespace TemperatureSetpoint
+
+namespace MinTemperature {
+
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT16S_ATTRIBUTE_TYPE);
+}
+
+} // namespace MinTemperature
+
+namespace MaxTemperature {
+
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT16S_ATTRIBUTE_TYPE);
+}
+
+} // namespace MaxTemperature
+
+namespace Step {
+
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT16S_ATTRIBUTE_TYPE);
+}
+
+} // namespace Step
+
+namespace CurrentTemperatureLevelIndex {
+
+EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT8U_ATTRIBUTE_TYPE);
+}
+
+} // namespace CurrentTemperatureLevelIndex
+
+namespace FeatureMap {
+
+EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_BITMAP32_ATTRIBUTE_TYPE);
+}
+
+} // namespace FeatureMap
+
+namespace ClusterRevision {
+
+EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value)
+{
+ using Traits = NumericAttributeTraits;
+ Traits::StorageType temp;
+ uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp);
+ EmberAfStatus status = emberAfReadAttribute(endpoint, Clusters::TemperatureControl::Id, Id, readable, sizeof(temp));
+ VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, temp))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ *value = Traits::StorageToWorking(temp);
+ return status;
+}
+EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value)
+{
+ using Traits = NumericAttributeTraits;
+ if (!Traits::CanRepresentValue(/* isNullable = */ false, value))
+ {
+ return EMBER_ZCL_STATUS_CONSTRAINT_ERROR;
+ }
+ Traits::StorageType storageValue;
+ Traits::WorkingToStorage(value, storageValue);
+ uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue);
+ return emberAfWriteAttribute(endpoint, Clusters::TemperatureControl::Id, Id, writable, ZCL_INT16U_ATTRIBUTE_TYPE);
+}
+
+} // namespace ClusterRevision
+
+} // namespace Attributes
+} // namespace TemperatureControl
+
namespace AirQuality {
namespace Attributes {
diff --git a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h
index c2bd2cc2c5f3f2..869e7be078d6e7 100644
--- a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h
+++ b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h
@@ -1381,6 +1381,47 @@ EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
} // namespace Attributes
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Attributes {
+
+namespace TemperatureSetpoint {
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
+} // namespace TemperatureSetpoint
+
+namespace MinTemperature {
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
+} // namespace MinTemperature
+
+namespace MaxTemperature {
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
+} // namespace MaxTemperature
+
+namespace Step {
+EmberAfStatus Get(chip::EndpointId endpoint, int16_t * value); // int16s
+EmberAfStatus Set(chip::EndpointId endpoint, int16_t value);
+} // namespace Step
+
+namespace CurrentTemperatureLevelIndex {
+EmberAfStatus Get(chip::EndpointId endpoint, uint8_t * value); // int8u
+EmberAfStatus Set(chip::EndpointId endpoint, uint8_t value);
+} // namespace CurrentTemperatureLevelIndex
+
+namespace FeatureMap {
+EmberAfStatus Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32
+EmberAfStatus Set(chip::EndpointId endpoint, uint32_t value);
+} // namespace FeatureMap
+
+namespace ClusterRevision {
+EmberAfStatus Get(chip::EndpointId endpoint, uint16_t * value); // int16u
+EmberAfStatus Set(chip::EndpointId endpoint, uint16_t value);
+} // namespace ClusterRevision
+
+} // namespace Attributes
+} // namespace TemperatureControl
+
namespace AirQuality {
namespace Attributes {
diff --git a/zzz_generated/app-common/app-common/zap-generated/callback.h b/zzz_generated/app-common/app-common/zap-generated/callback.h
index 60867c798cb930..692af229ae6141 100644
--- a/zzz_generated/app-common/app-common/zap-generated/callback.h
+++ b/zzz_generated/app-common/app-common/zap-generated/callback.h
@@ -369,6 +369,14 @@ void emberAfIcdManagementClusterInitCallback(chip::EndpointId endpoint);
*/
void emberAfModeSelectClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Temperature Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfTemperatureControlClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief Air Quality Cluster Init
*
* Cluster Init
@@ -3960,6 +3968,82 @@ void emberAfModeSelectClusterServerTickCallback(chip::EndpointId endpoint);
*/
void emberAfModeSelectClusterClientTickCallback(chip::EndpointId endpoint);
+//
+// Temperature Control Cluster
+//
+
+/** @brief Temperature Control Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfTemperatureControlClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Control Cluster Server Shutdown
+ *
+ * Server Shutdown
+ *
+ * @param endpoint Endpoint that is being shutdown
+ */
+void MatterTemperatureControlClusterServerShutdownCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfTemperatureControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Control Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param attributePath Concrete attribute path that changed
+ */
+void MatterTemperatureControlClusterServerAttributeChangedCallback(const chip::app::ConcreteAttributePath & attributePath);
+
+/** @brief Temperature Control Cluster Server Pre Attribute Changed
+ *
+ * Server Pre Attribute Changed
+ *
+ * @param attributePath Concrete attribute path to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+chip::Protocols::InteractionModel::Status MatterTemperatureControlClusterServerPreAttributeChangedCallback(
+ const chip::app::ConcreteAttributePath & attributePath, EmberAfAttributeType attributeType, uint16_t size, uint8_t * value);
+
+/** @brief Temperature Control Cluster Client Pre Attribute Changed
+ *
+ * Client Pre Attribute Changed
+ *
+ * @param attributePath Concrete attribute path to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+chip::Protocols::InteractionModel::Status MatterTemperatureControlClusterClientPreAttributeChangedCallback(
+ const chip::app::ConcreteAttributePath & attributePath, EmberAfAttributeType attributeType, uint16_t size, uint8_t * value);
+
+/** @brief Temperature Control Cluster Server Tick
+ *
+ * Server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfTemperatureControlClusterServerTickCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Control Cluster Client Tick
+ *
+ * Client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfTemperatureControlClusterClientTickCallback(chip::EndpointId endpoint);
+
//
// Air Quality Cluster
//
@@ -7850,6 +7934,12 @@ bool emberAfIcdManagementClusterStayActiveRequestCallback(
bool emberAfModeSelectClusterChangeToModeCallback(
chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
const chip::app::Clusters::ModeSelect::Commands::ChangeToMode::DecodableType & commandData);
+/**
+ * @brief Temperature Control Cluster SetTemperature Command callback (from client)
+ */
+bool emberAfTemperatureControlClusterSetTemperatureCallback(
+ chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::TemperatureControl::Commands::SetTemperature::DecodableType & commandData);
/**
* @brief Smoke CO Alarm Cluster SelfTestRequest Command callback (from client)
*/
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
index e442811a9d543e..baa6af449d6508 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
@@ -1504,6 +1504,16 @@ enum class ModeSelectFeature : uint32_t
};
} // namespace ModeSelect
+namespace TemperatureControl {
+
+// Bitmap for Feature
+enum class Feature : uint32_t
+{
+ kTemperatureNumber = 0x1,
+ kTemperatureLevel = 0x2,
+};
+} // namespace TemperatureControl
+
namespace AirQuality {
// Enum for AirQualityEnum
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
index dca74178b8717d..faea894cbc0cc9 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp
@@ -11424,6 +11424,150 @@ CHIP_ERROR TypeInfo::DecodableType::Decode(TLV::TLVReader & reader, const Concre
namespace Events {} // namespace Events
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Structs {
+namespace TemperatureLevelStruct {
+CHIP_ERROR Type::Encode(TLV::TLVWriter & writer, TLV::Tag tag) const
+{
+ TLV::TLVType outer;
+ ReturnErrorOnFailure(writer.StartContainer(tag, TLV::kTLVType_Structure, outer));
+ ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(Fields::kLabel), label));
+ ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(Fields::kTempLevel), tempLevel));
+ ReturnErrorOnFailure(writer.EndContainer(outer));
+ return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ TLV::TLVType outer;
+ VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
+ err = reader.EnterContainer(outer);
+ ReturnErrorOnFailure(err);
+ while ((err = reader.Next()) == CHIP_NO_ERROR)
+ {
+ if (!TLV::IsContextTag(reader.GetTag()))
+ {
+ continue;
+ }
+ switch (TLV::TagNumFromTag(reader.GetTag()))
+ {
+ case to_underlying(Fields::kLabel):
+ ReturnErrorOnFailure(DataModel::Decode(reader, label));
+ break;
+ case to_underlying(Fields::kTempLevel):
+ ReturnErrorOnFailure(DataModel::Decode(reader, tempLevel));
+ break;
+ default:
+ break;
+ }
+ }
+
+ VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
+ ReturnErrorOnFailure(reader.ExitContainer(outer));
+
+ return CHIP_NO_ERROR;
+}
+
+} // namespace TemperatureLevelStruct
+} // namespace Structs
+
+namespace Commands {
+namespace SetTemperature {
+CHIP_ERROR Type::Encode(TLV::TLVWriter & writer, TLV::Tag tag) const
+{
+ TLV::TLVType outer;
+ ReturnErrorOnFailure(writer.StartContainer(tag, TLV::kTLVType_Structure, outer));
+ ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(Fields::kTargetTemperature), targetTemperature));
+ ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(Fields::kTargetTemperatureLevel), targetTemperatureLevel));
+ ReturnErrorOnFailure(writer.EndContainer(outer));
+ return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ TLV::TLVType outer;
+ VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
+ ReturnErrorOnFailure(reader.EnterContainer(outer));
+ while ((err = reader.Next()) == CHIP_NO_ERROR)
+ {
+ if (!TLV::IsContextTag(reader.GetTag()))
+ {
+ continue;
+ }
+ switch (TLV::TagNumFromTag(reader.GetTag()))
+ {
+ case to_underlying(Fields::kTargetTemperature):
+ ReturnErrorOnFailure(DataModel::Decode(reader, targetTemperature));
+ break;
+ case to_underlying(Fields::kTargetTemperatureLevel):
+ ReturnErrorOnFailure(DataModel::Decode(reader, targetTemperatureLevel));
+ break;
+ default:
+ break;
+ }
+ }
+
+ VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
+ ReturnErrorOnFailure(reader.ExitContainer(outer));
+ return CHIP_NO_ERROR;
+}
+} // namespace SetTemperature.
+} // namespace Commands
+
+namespace Attributes {
+CHIP_ERROR TypeInfo::DecodableType::Decode(TLV::TLVReader & reader, const ConcreteAttributePath & path)
+{
+ switch (path.mAttributeId)
+ {
+ case Attributes::TemperatureSetpoint::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, temperatureSetpoint));
+ break;
+ case Attributes::MinTemperature::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, minTemperature));
+ break;
+ case Attributes::MaxTemperature::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, maxTemperature));
+ break;
+ case Attributes::Step::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, step));
+ break;
+ case Attributes::CurrentTemperatureLevelIndex::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, currentTemperatureLevelIndex));
+ break;
+ case Attributes::SupportedTemperatureLevels::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, supportedTemperatureLevels));
+ break;
+ case Attributes::GeneratedCommandList::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, generatedCommandList));
+ break;
+ case Attributes::AcceptedCommandList::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, acceptedCommandList));
+ break;
+ case Attributes::EventList::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, eventList));
+ break;
+ case Attributes::AttributeList::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, attributeList));
+ break;
+ case Attributes::FeatureMap::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, featureMap));
+ break;
+ case Attributes::ClusterRevision::TypeInfo::GetAttributeId():
+ ReturnErrorOnFailure(DataModel::Decode(reader, clusterRevision));
+ break;
+ default:
+ break;
+ }
+
+ return CHIP_NO_ERROR;
+}
+} // namespace Attributes
+
+namespace Events {} // namespace Events
+
+} // namespace TemperatureControl
namespace AirQuality {
namespace Commands {} // namespace Commands
@@ -23841,6 +23985,13 @@ bool CommandIsFabricScoped(ClusterId aCluster, CommandId aCommand)
return false;
}
}
+ case Clusters::TemperatureControl::Id: {
+ switch (aCommand)
+ {
+ default:
+ return false;
+ }
+ }
case Clusters::SmokeCoAlarm::Id: {
switch (aCommand)
{
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
index f5e8abac2dabcd..f712d1fc4df4e6 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
@@ -14214,6 +14214,218 @@ struct TypeInfo
};
} // namespace Attributes
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Structs {
+namespace TemperatureLevelStruct {
+enum class Fields : uint8_t
+{
+ kLabel = 0,
+ kTempLevel = 1,
+};
+
+struct Type
+{
+public:
+ chip::CharSpan label;
+ uint8_t tempLevel = static_cast(0);
+
+ CHIP_ERROR Decode(TLV::TLVReader & reader);
+
+ static constexpr bool kIsFabricScoped = false;
+
+ CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const;
+};
+
+using DecodableType = Type;
+
+} // namespace TemperatureLevelStruct
+} // namespace Structs
+
+namespace Commands {
+// Forward-declarations so we can reference these later.
+
+namespace SetTemperature {
+struct Type;
+struct DecodableType;
+} // namespace SetTemperature
+
+} // namespace Commands
+
+namespace Commands {
+namespace SetTemperature {
+enum class Fields : uint8_t
+{
+ kTargetTemperature = 0,
+ kTargetTemperatureLevel = 1,
+};
+
+struct Type
+{
+public:
+ // Use GetCommandId instead of commandId directly to avoid naming conflict with CommandIdentification in ExecutionOfACommand
+ static constexpr CommandId GetCommandId() { return Commands::SetTemperature::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+
+ Optional targetTemperature;
+ Optional targetTemperatureLevel;
+
+ CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const;
+
+ using ResponseType = DataModel::NullObjectType;
+
+ static constexpr bool MustUseTimedInvoke() { return false; }
+};
+
+struct DecodableType
+{
+public:
+ static constexpr CommandId GetCommandId() { return Commands::SetTemperature::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+
+ Optional targetTemperature;
+ Optional targetTemperatureLevel;
+ CHIP_ERROR Decode(TLV::TLVReader & reader);
+};
+}; // namespace SetTemperature
+} // namespace Commands
+
+namespace Attributes {
+
+namespace TemperatureSetpoint {
+struct TypeInfo
+{
+ using Type = int16_t;
+ using DecodableType = int16_t;
+ using DecodableArgType = int16_t;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::TemperatureSetpoint::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace TemperatureSetpoint
+namespace MinTemperature {
+struct TypeInfo
+{
+ using Type = int16_t;
+ using DecodableType = int16_t;
+ using DecodableArgType = int16_t;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::MinTemperature::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace MinTemperature
+namespace MaxTemperature {
+struct TypeInfo
+{
+ using Type = int16_t;
+ using DecodableType = int16_t;
+ using DecodableArgType = int16_t;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::MaxTemperature::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace MaxTemperature
+namespace Step {
+struct TypeInfo
+{
+ using Type = int16_t;
+ using DecodableType = int16_t;
+ using DecodableArgType = int16_t;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::Step::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace Step
+namespace CurrentTemperatureLevelIndex {
+struct TypeInfo
+{
+ using Type = uint8_t;
+ using DecodableType = uint8_t;
+ using DecodableArgType = uint8_t;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::CurrentTemperatureLevelIndex::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace CurrentTemperatureLevelIndex
+namespace SupportedTemperatureLevels {
+struct TypeInfo
+{
+ using Type = chip::app::DataModel::List;
+ using DecodableType = chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType>;
+ using DecodableArgType = const chip::app::DataModel::DecodableList<
+ chip::app::Clusters::TemperatureControl::Structs::TemperatureLevelStruct::DecodableType> &;
+
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+ static constexpr AttributeId GetAttributeId() { return Attributes::SupportedTemperatureLevels::Id; }
+ static constexpr bool MustUseTimedWrite() { return false; }
+};
+} // namespace SupportedTemperatureLevels
+namespace GeneratedCommandList {
+struct TypeInfo : public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace GeneratedCommandList
+namespace AcceptedCommandList {
+struct TypeInfo : public Clusters::Globals::Attributes::AcceptedCommandList::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace AcceptedCommandList
+namespace EventList {
+struct TypeInfo : public Clusters::Globals::Attributes::EventList::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace EventList
+namespace AttributeList {
+struct TypeInfo : public Clusters::Globals::Attributes::AttributeList::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace AttributeList
+namespace FeatureMap {
+struct TypeInfo : public Clusters::Globals::Attributes::FeatureMap::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace FeatureMap
+namespace ClusterRevision {
+struct TypeInfo : public Clusters::Globals::Attributes::ClusterRevision::TypeInfo
+{
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+};
+} // namespace ClusterRevision
+
+struct TypeInfo
+{
+ struct DecodableType
+ {
+ static constexpr ClusterId GetClusterId() { return Clusters::TemperatureControl::Id; }
+
+ CHIP_ERROR Decode(TLV::TLVReader & reader, const ConcreteAttributePath & path);
+
+ Attributes::TemperatureSetpoint::TypeInfo::DecodableType temperatureSetpoint = static_cast(0);
+ Attributes::MinTemperature::TypeInfo::DecodableType minTemperature = static_cast(0);
+ Attributes::MaxTemperature::TypeInfo::DecodableType maxTemperature = static_cast(0);
+ Attributes::Step::TypeInfo::DecodableType step = static_cast(0);
+ Attributes::CurrentTemperatureLevelIndex::TypeInfo::DecodableType currentTemperatureLevelIndex = static_cast(0);
+ Attributes::SupportedTemperatureLevels::TypeInfo::DecodableType supportedTemperatureLevels;
+ Attributes::GeneratedCommandList::TypeInfo::DecodableType generatedCommandList;
+ Attributes::AcceptedCommandList::TypeInfo::DecodableType acceptedCommandList;
+ Attributes::EventList::TypeInfo::DecodableType eventList;
+ Attributes::AttributeList::TypeInfo::DecodableType attributeList;
+ Attributes::FeatureMap::TypeInfo::DecodableType featureMap = static_cast(0);
+ Attributes::ClusterRevision::TypeInfo::DecodableType clusterRevision = static_cast(0);
+ };
+};
+} // namespace Attributes
+} // namespace TemperatureControl
namespace AirQuality {
namespace Attributes {
diff --git a/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h b/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
index 23195b27c6a2e5..8435a596e86b68 100644
--- a/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
+++ b/zzz_generated/app-common/app-common/zap-generated/ids/Attributes.h
@@ -2459,6 +2459,60 @@ static constexpr AttributeId Id = Globals::Attributes::ClusterRevision::Id;
} // namespace Attributes
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Attributes {
+
+namespace TemperatureSetpoint {
+static constexpr AttributeId Id = 0x00000000;
+} // namespace TemperatureSetpoint
+
+namespace MinTemperature {
+static constexpr AttributeId Id = 0x00000001;
+} // namespace MinTemperature
+
+namespace MaxTemperature {
+static constexpr AttributeId Id = 0x00000002;
+} // namespace MaxTemperature
+
+namespace Step {
+static constexpr AttributeId Id = 0x00000003;
+} // namespace Step
+
+namespace CurrentTemperatureLevelIndex {
+static constexpr AttributeId Id = 0x00000004;
+} // namespace CurrentTemperatureLevelIndex
+
+namespace SupportedTemperatureLevels {
+static constexpr AttributeId Id = 0x00000005;
+} // namespace SupportedTemperatureLevels
+
+namespace GeneratedCommandList {
+static constexpr AttributeId Id = Globals::Attributes::GeneratedCommandList::Id;
+} // namespace GeneratedCommandList
+
+namespace AcceptedCommandList {
+static constexpr AttributeId Id = Globals::Attributes::AcceptedCommandList::Id;
+} // namespace AcceptedCommandList
+
+namespace EventList {
+static constexpr AttributeId Id = Globals::Attributes::EventList::Id;
+} // namespace EventList
+
+namespace AttributeList {
+static constexpr AttributeId Id = Globals::Attributes::AttributeList::Id;
+} // namespace AttributeList
+
+namespace FeatureMap {
+static constexpr AttributeId Id = Globals::Attributes::FeatureMap::Id;
+} // namespace FeatureMap
+
+namespace ClusterRevision {
+static constexpr AttributeId Id = Globals::Attributes::ClusterRevision::Id;
+} // namespace ClusterRevision
+
+} // namespace Attributes
+} // namespace TemperatureControl
+
namespace AirQuality {
namespace Attributes {
diff --git a/zzz_generated/app-common/app-common/zap-generated/ids/Clusters.h b/zzz_generated/app-common/app-common/zap-generated/ids/Clusters.h
index 04e6bac99a7bb4..7f82d993004682 100644
--- a/zzz_generated/app-common/app-common/zap-generated/ids/Clusters.h
+++ b/zzz_generated/app-common/app-common/zap-generated/ids/Clusters.h
@@ -151,6 +151,9 @@ static constexpr ClusterId Id = 0x00000046;
namespace ModeSelect {
static constexpr ClusterId Id = 0x00000050;
} // namespace ModeSelect
+namespace TemperatureControl {
+static constexpr ClusterId Id = 0x00000056;
+} // namespace TemperatureControl
namespace AirQuality {
static constexpr ClusterId Id = 0x0000005B;
} // namespace AirQuality
diff --git a/zzz_generated/app-common/app-common/zap-generated/ids/Commands.h b/zzz_generated/app-common/app-common/zap-generated/ids/Commands.h
index 351e551af9b10a..3b616e048b5931 100644
--- a/zzz_generated/app-common/app-common/zap-generated/ids/Commands.h
+++ b/zzz_generated/app-common/app-common/zap-generated/ids/Commands.h
@@ -641,6 +641,16 @@ static constexpr CommandId Id = 0x00000000;
} // namespace Commands
} // namespace ModeSelect
+namespace TemperatureControl {
+namespace Commands {
+
+namespace SetTemperature {
+static constexpr CommandId Id = 0x00000000;
+} // namespace SetTemperature
+
+} // namespace Commands
+} // namespace TemperatureControl
+
namespace SmokeCoAlarm {
namespace Commands {
diff --git a/zzz_generated/app-common/app-common/zap-generated/print-cluster.h b/zzz_generated/app-common/app-common/zap-generated/print-cluster.h
index 76e325f4fb0c76..f0436094d5c021 100644
--- a/zzz_generated/app-common/app-common/zap-generated/print-cluster.h
+++ b/zzz_generated/app-common/app-common/zap-generated/print-cluster.h
@@ -292,6 +292,12 @@
#define CHIP_PRINTCLUSTER_MODE_SELECT_CLUSTER
#endif
+#if defined(ZCL_USING_TEMPERATURE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_TEMPERATURE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TEMPERATURE_CONTROL_CLUSTER { chip::app::Clusters::TemperatureControl::Id, "Temperature Control" },
+#else
+#define CHIP_PRINTCLUSTER_TEMPERATURE_CONTROL_CLUSTER
+#endif
+
#if defined(ZCL_USING_AIR_QUALITY_CLUSTER_SERVER) || defined(ZCL_USING_AIR_QUALITY_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_AIR_QUALITY_CLUSTER { chip::app::Clusters::AirQuality::Id, "Air Quality" },
#else
@@ -619,6 +625,7 @@
CHIP_PRINTCLUSTER_BOOLEAN_STATE_CLUSTER \
CHIP_PRINTCLUSTER_ICD_MANAGEMENT_CLUSTER \
CHIP_PRINTCLUSTER_MODE_SELECT_CLUSTER \
+ CHIP_PRINTCLUSTER_TEMPERATURE_CONTROL_CLUSTER \
CHIP_PRINTCLUSTER_AIR_QUALITY_CLUSTER \
CHIP_PRINTCLUSTER_SMOKE_CO_ALARM_CLUSTER \
CHIP_PRINTCLUSTER_HEPA_FILTER_MONITORING_CLUSTER \
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
index d341aa1b80aaca..728f0c8f4ab04a 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
@@ -74,6 +74,7 @@
| BooleanState | 0x0045 |
| IcdManagement | 0x0046 |
| ModeSelect | 0x0050 |
+| TemperatureControl | 0x0056 |
| AirQuality | 0x005B |
| SmokeCoAlarm | 0x005C |
| HepaFilterMonitoring | 0x0071 |
@@ -4037,6 +4038,61 @@ class ModeSelectChangeToMode : public ClusterCommand
chip::app::Clusters::ModeSelect::Commands::ChangeToMode::Type mRequest;
};
+/*----------------------------------------------------------------------------*\
+| Cluster TemperatureControl | 0x0056 |
+|------------------------------------------------------------------------------|
+| Commands: | |
+| * SetTemperature | 0x00 |
+|------------------------------------------------------------------------------|
+| Attributes: | |
+| * TemperatureSetpoint | 0x0000 |
+| * MinTemperature | 0x0001 |
+| * MaxTemperature | 0x0002 |
+| * Step | 0x0003 |
+| * CurrentTemperatureLevelIndex | 0x0004 |
+| * SupportedTemperatureLevels | 0x0005 |
+| * GeneratedCommandList | 0xFFF8 |
+| * AcceptedCommandList | 0xFFF9 |
+| * EventList | 0xFFFA |
+| * AttributeList | 0xFFFB |
+| * FeatureMap | 0xFFFC |
+| * ClusterRevision | 0xFFFD |
+|------------------------------------------------------------------------------|
+| Events: | |
+\*----------------------------------------------------------------------------*/
+
+/*
+ * Command SetTemperature
+ */
+class TemperatureControlSetTemperature : public ClusterCommand
+{
+public:
+ TemperatureControlSetTemperature(CredentialIssuerCommands * credsIssuerConfig) :
+ ClusterCommand("set-temperature", credsIssuerConfig)
+ {
+ AddArgument("TargetTemperature", INT16_MIN, INT16_MAX, &mRequest.targetTemperature);
+ AddArgument("TargetTemperatureLevel", 0, UINT8_MAX, &mRequest.targetTemperatureLevel);
+ ClusterCommand::AddArguments();
+ }
+
+ CHIP_ERROR SendCommand(chip::DeviceProxy * device, std::vector endpointIds) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x00000056) command (0x00000000) on endpoint %u", endpointIds.at(0));
+
+ return ClusterCommand::SendCommand(device, endpointIds.at(0), 0x00000056, 0x00000000, mRequest);
+ }
+
+ CHIP_ERROR SendGroupCommand(chip::GroupId groupId, chip::FabricIndex fabricIndex) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x00000056) command (0x00000000) on Group %u", groupId);
+
+ return ClusterCommand::SendGroupCommand(groupId, fabricIndex, 0x00000056, 0x00000000, mRequest);
+ }
+
+private:
+ chip::app::Clusters::TemperatureControl::Commands::SetTemperature::Type mRequest;
+};
+
/*----------------------------------------------------------------------------*\
| Cluster AirQuality | 0x005B |
|------------------------------------------------------------------------------|
@@ -12922,6 +12978,89 @@ void registerClusterModeSelect(Commands & commands, CredentialIssuerCommands * c
commands.Register(clusterName, clusterCommands);
}
+void registerClusterTemperatureControl(Commands & commands, CredentialIssuerCommands * credsIssuerConfig)
+{
+ using namespace chip::app::Clusters::TemperatureControl;
+
+ const char * clusterName = "TemperatureControl";
+
+ commands_list clusterCommands = {
+ //
+ // Commands
+ //
+ make_unique(Id, credsIssuerConfig), //
+ make_unique(credsIssuerConfig), //
+ //
+ // Attributes
+ //
+ make_unique(Id, credsIssuerConfig), //
+ make_unique(Id, "temperature-setpoint", Attributes::TemperatureSetpoint::Id, credsIssuerConfig), //
+ make_unique(Id, "min-temperature", Attributes::MinTemperature::Id, credsIssuerConfig), //
+ make_unique(Id, "max-temperature", Attributes::MaxTemperature::Id, credsIssuerConfig), //
+ make_unique(Id, "step", Attributes::Step::Id, credsIssuerConfig), //
+ make_unique(Id, "current-temperature-level-index", Attributes::CurrentTemperatureLevelIndex::Id,
+ credsIssuerConfig), //
+ make_unique(Id, "supported-temperature-levels", Attributes::SupportedTemperatureLevels::Id,
+ credsIssuerConfig), //
+ make_unique(Id, "generated-command-list", Attributes::GeneratedCommandList::Id, credsIssuerConfig), //
+ make_unique(Id, "accepted-command-list", Attributes::AcceptedCommandList::Id, credsIssuerConfig), //
+ make_unique