diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
index 20a4b71b0fcd71..8a393f226e104b 100644
--- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
+++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
@@ -1270,9 +1270,13 @@ server cluster IcdManagement = 70 {
int32u ICDCounter = 0;
}
+ response struct StayActiveResponse = 4 {
+ int32u promisedActiveDuration = 0;
+ }
+
fabric command access(invoke: manage) RegisterClient(RegisterClientRequest): RegisterClientResponse = 0;
fabric command access(invoke: manage) UnregisterClient(UnregisterClientRequest): DefaultSuccess = 2;
- command access(invoke: manage) StayActiveRequest(): DefaultSuccess = 3;
+ command access(invoke: manage) StayActiveRequest(): StayActiveResponse = 3;
}
endpoint 0 {
@@ -1572,6 +1576,7 @@ endpoint 0 {
handle command RegisterClientResponse;
handle command UnregisterClient;
handle command StayActiveRequest;
+ handle command StayActiveResponse;
}
}
diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
index b51af3b5ee4e4c..21f90987583de4 100644
--- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
+++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
@@ -3364,6 +3364,14 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
+ },
+ {
+ "name": "StayActiveResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
}
],
"attributes": [
diff --git a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
index e9fb02dfd0c51e..38f42d6178b908 100644
--- a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
+++ b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
@@ -1643,7 +1643,7 @@ server cluster IcdManagement = 70 {
fabric command access(invoke: manage) RegisterClient(RegisterClientRequest): RegisterClientResponse = 0;
fabric command access(invoke: manage) UnregisterClient(UnregisterClientRequest): DefaultSuccess = 2;
- command access(invoke: manage) StayActiveRequest(): DefaultSuccess = 3;
+ command access(invoke: manage) StayActiveRequest(): StayActiveResponse = 3;
}
/** This cluster provides an interface for observing and managing the state of smoke and CO alarms. */
diff --git a/src/app/zap-templates/zcl/data-model/chip/icd-management-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/icd-management-cluster.xml
index 90a335b46b1988..26af706cd62b78 100644
--- a/src/app/zap-templates/zcl/data-model/chip/icd-management-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/icd-management-cluster.xml
@@ -81,7 +81,7 @@ limitations under the License.
UserActiveModeTriggerInstruction
- Register a client to the end device
+ Register a client to the end device
@@ -89,21 +89,26 @@ limitations under the License.
-
- RegisterClient response command
+
+ RegisterClient response command
- Unregister a client from an end device
+ Unregister a client from an end device
-
+
Request the end device to stay in Active Mode for an additional ActiveModeThreshold
+
+
+ StayActiveRequest response command
+
+
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 9cabb9e93f4676..a667562a0a4d91 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -2827,12 +2827,16 @@ client cluster IcdManagement = 70 {
optional octet_string<16> verificationKey = 1;
}
+ response struct StayActiveResponse = 4 {
+ int32u promisedActiveDuration = 0;
+ }
+
/** Register a client to the end device */
fabric command access(invoke: manage) RegisterClient(RegisterClientRequest): RegisterClientResponse = 0;
/** Unregister a client from an end device */
fabric command access(invoke: manage) UnregisterClient(UnregisterClientRequest): DefaultSuccess = 2;
/** Request the end device to stay in Active Mode for an additional ActiveModeThreshold */
- command access(invoke: manage) StayActiveRequest(): DefaultSuccess = 3;
+ command access(invoke: manage) StayActiveRequest(): StayActiveResponse = 3;
}
/** This cluster supports creating a simple timer functionality. */
diff --git a/src/controller/data_model/controller-clusters.zap b/src/controller/data_model/controller-clusters.zap
index bb019d9e11161c..d9ab05d301a4d3 100644
--- a/src/controller/data_model/controller-clusters.zap
+++ b/src/controller/data_model/controller-clusters.zap
@@ -1946,6 +1946,14 @@
"source": "client",
"isIncoming": 0,
"isEnabled": 1
+ },
+ {
+ "name": "StayActiveResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
}
],
"attributes": [
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
index 11aa449670f3a9..d6b5bf59646c13 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
@@ -19094,11 +19094,11 @@ public void onResponse(StructType invokeStructValue) {
}}, commandId, value, timedInvokeTimeoutMs);
}
- public void stayActiveRequest(DefaultClusterCallback callback) {
+ public void stayActiveRequest(StayActiveResponseCallback callback) {
stayActiveRequest(callback, 0);
}
- public void stayActiveRequest(DefaultClusterCallback callback, int timedInvokeTimeoutMs) {
+ public void stayActiveRequest(StayActiveResponseCallback callback, int timedInvokeTimeoutMs) {
final long commandId = 3L;
ArrayList elements = new ArrayList<>();
@@ -19106,7 +19106,17 @@ public void stayActiveRequest(DefaultClusterCallback callback, int timedInvokeTi
invoke(new InvokeCallbackImpl(callback) {
@Override
public void onResponse(StructType invokeStructValue) {
- callback.onSuccess();
+ final long promisedActiveDurationFieldID = 0L;
+ Long promisedActiveDuration = null;
+ for (StructElement element: invokeStructValue.value()) {
+ if (element.contextTagNum() == promisedActiveDurationFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ promisedActiveDuration = castingValue.value(Long.class);
+ }
+ }
+ }
+ callback.onSuccess(promisedActiveDuration);
}}, commandId, value, timedInvokeTimeoutMs);
}
@@ -19114,6 +19124,10 @@ public interface RegisterClientResponseCallback extends BaseClusterCallback {
void onSuccess(Long ICDCounter);
}
+ public interface StayActiveResponseCallback extends BaseClusterCallback {
+ void onSuccess(Long promisedActiveDuration);
+ }
+
public interface RegisteredClientsAttributeCallback extends BaseAttributeCallback {
void onSuccess(List value);
}
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
index d78e402dd39e9f..f536292566d6ec 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
@@ -6521,6 +6521,28 @@ public void onError(Exception error) {
callback.onFailure(error);
}
}
+
+ public static class DelegatedIcdManagementClusterStayActiveResponseCallback implements ChipClusters.IcdManagementCluster.StayActiveResponseCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(Long promisedActiveDuration) {
+ Map responseValues = new LinkedHashMap<>();
+
+ CommandResponseInfo promisedActiveDurationResponseValue = new CommandResponseInfo("promisedActiveDuration", "Long");
+ responseValues.put(promisedActiveDurationResponseValue, promisedActiveDuration);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception error) {
+ callback.onFailure(error);
+ }
+ }
public static class DelegatedIcdManagementClusterRegisteredClientsAttributeCallback implements ChipClusters.IcdManagementCluster.RegisteredClientsAttributeCallback, DelegatedClusterCallback {
private ClusterCommandCallback callback;
@Override
@@ -20597,12 +20619,12 @@ public Map> getCommandMap() {
InteractionInfo icdManagementstayActiveRequestInteractionInfo = new InteractionInfo(
(cluster, callback, commandArguments) -> {
((ChipClusters.IcdManagementCluster) cluster)
- .stayActiveRequest((DefaultClusterCallback) callback
- );
- },
- () -> new DelegatedDefaultClusterCallback(),
+ .stayActiveRequest((ChipClusters.IcdManagementCluster.StayActiveResponseCallback) callback
+ );
+ },
+ () -> new DelegatedIcdManagementClusterStayActiveResponseCallback(),
icdManagementstayActiveRequestCommandParams
- );
+ );
icdManagementClusterInteractionInfoMap.put("stayActiveRequest", icdManagementstayActiveRequestInteractionInfo);
commandMap.put("icdManagement", icdManagementClusterInteractionInfoMap);
diff --git a/src/controller/java/generated/java/matter/devicecontroller/cluster/clusters/IcdManagementCluster.kt b/src/controller/java/generated/java/matter/devicecontroller/cluster/clusters/IcdManagementCluster.kt
index 18ff22b9bdd66d..c70094f9e08ec9 100644
--- a/src/controller/java/generated/java/matter/devicecontroller/cluster/clusters/IcdManagementCluster.kt
+++ b/src/controller/java/generated/java/matter/devicecontroller/cluster/clusters/IcdManagementCluster.kt
@@ -26,6 +26,8 @@ class IcdManagementCluster(
) {
class RegisterClientResponse(val ICDCounter: UInt)
+ class StayActiveResponse(val promisedActiveDuration: UInt)
+
class RegisteredClientsAttribute(
val value: List?
)
@@ -68,7 +70,7 @@ class IcdManagementCluster(
}
}
- suspend fun stayActiveRequest(timedInvokeTimeoutMs: Int? = null) {
+ suspend fun stayActiveRequest(timedInvokeTimeoutMs: Int? = null): StayActiveResponse {
val commandId = 3L
if (timedInvokeTimeoutMs != null) {
diff --git a/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp b/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
index 965e31e1d1c841..918f36641e0ea3 100644
--- a/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPInvokeCallbacks.cpp
@@ -3043,6 +3043,68 @@ void CHIPIcdManagementClusterRegisterClientResponseCallback::CallbackFn(
env->CallVoidMethod(javaCallbackRef, javaMethod, ICDCounter);
}
+CHIPIcdManagementClusterStayActiveResponseCallback::CHIPIcdManagementClusterStayActiveResponseCallback(jobject javaCallback) :
+ Callback::Callback(CallbackFn, this)
+{
+ JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not create global reference for Java callback");
+ return;
+ }
+
+ javaCallbackRef = env->NewGlobalRef(javaCallback);
+ if (javaCallbackRef == nullptr)
+ {
+ ChipLogError(Zcl, "Could not create global reference for Java callback");
+ }
+}
+
+CHIPIcdManagementClusterStayActiveResponseCallback::~CHIPIcdManagementClusterStayActiveResponseCallback()
+{
+ JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ if (env == nullptr)
+ {
+ ChipLogError(Zcl, "Could not delete global reference for Java callback");
+ return;
+ }
+ env->DeleteGlobalRef(javaCallbackRef);
+};
+
+void CHIPIcdManagementClusterStayActiveResponseCallback::CallbackFn(
+ void * context, const chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType & dataResponse)
+{
+ chip::DeviceLayer::StackUnlock unlock;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ jobject javaCallbackRef;
+ jmethodID javaMethod;
+
+ VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Error invoking Java callback: no JNIEnv"));
+
+ std::unique_ptr
+ cppCallback(reinterpret_cast(context),
+ chip::Platform::Delete);
+ VerifyOrReturn(cppCallback != nullptr, ChipLogError(Zcl, "Error invoking Java callback: failed to cast native callback"));
+
+ javaCallbackRef = cppCallback->javaCallbackRef;
+ // Java callback is allowed to be null, exit early if this is the case.
+ VerifyOrReturn(javaCallbackRef != nullptr);
+
+ err = JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/lang/Long;)V", &javaMethod);
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Error invoking Java callback: %s", ErrorStr(err)));
+
+ jobject PromisedActiveDuration;
+ std::string PromisedActiveDurationClassName = "java/lang/Long";
+ std::string PromisedActiveDurationCtorSignature = "(J)V";
+ jlong jniPromisedActiveDuration = static_cast(dataResponse.promisedActiveDuration);
+ chip::JniReferences::GetInstance().CreateBoxedObject(PromisedActiveDurationClassName.c_str(),
+ PromisedActiveDurationCtorSignature.c_str(),
+ jniPromisedActiveDuration, PromisedActiveDuration);
+
+ env->CallVoidMethod(javaCallbackRef, javaMethod, PromisedActiveDuration);
+}
CHIPOvenModeClusterChangeToModeResponseCallback::CHIPOvenModeClusterChangeToModeResponseCallback(jobject javaCallback) :
Callback::Callback(CallbackFn, this)
{
diff --git a/src/controller/java/zap-generated/CHIPInvokeCallbacks.h b/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
index bef0c68702b238..10a51c524cda8b 100644
--- a/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
+++ b/src/controller/java/zap-generated/CHIPInvokeCallbacks.h
@@ -494,6 +494,21 @@ class CHIPIcdManagementClusterRegisterClientResponseCallback
jobject javaCallbackRef;
};
+class CHIPIcdManagementClusterStayActiveResponseCallback
+ : public Callback::Callback
+{
+public:
+ CHIPIcdManagementClusterStayActiveResponseCallback(jobject javaCallback);
+
+ ~CHIPIcdManagementClusterStayActiveResponseCallback();
+
+ static void CallbackFn(void * context,
+ const chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType & data);
+
+private:
+ jobject javaCallbackRef;
+};
+
class CHIPOvenModeClusterChangeToModeResponseCallback
: public Callback::Callback
{
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 0935dbce3985f3..5e72b1d2b0b1d4 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -14959,14 +14959,30 @@ class StayActiveRequest(ClusterCommand):
cluster_id: typing.ClassVar[int] = 0x00000046
command_id: typing.ClassVar[int] = 0x00000003
is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'StayActiveResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ])
+
+ @dataclass
+ class StayActiveResponse(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000046
+ command_id: typing.ClassVar[int] = 0x00000004
+ is_client: typing.ClassVar[bool] = False
response_type: typing.ClassVar[str] = None
@ChipUtility.classproperty
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields=[
+ ClusterObjectFieldDescriptor(Label="promisedActiveDuration", Tag=0, Type=uint),
])
+ promisedActiveDuration: 'uint' = 0
+
class Attributes:
@dataclass
class IdleModeDuration(ClusterAttributeDescriptor):
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index 7eb327b1923041..2a4bd8c2c054db 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -4653,8 +4653,8 @@ MTR_PROVISIONALLY_AVAILABLE
*
* Request the end device to stay in Active Mode for an additional ActiveModeThreshold
*/
-- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
-- (void)stayActiveRequestWithCompletion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)stayActiveRequestWithCompletion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
MTR_PROVISIONALLY_AVAILABLE;
- (void)readAttributeIdleModeDurationWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index 0690590d719cd1..fac31821cf159a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -38244,11 +38244,11 @@ - (void)unregisterClientWithParams:(MTRICDManagementClusterUnregisterClientParam
queue:self.callbackQueue
completion:responseHandler];
}
-- (void)stayActiveRequestWithCompletion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithCompletion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
{
[self stayActiveRequestWithParams:nil completion:completion];
}
-- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params completion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
{
if (params == nil) {
params = [[MTRICDManagementClusterStayActiveRequestParams
@@ -38256,7 +38256,7 @@ - (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestPar
}
auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
- completion(error);
+ completion(response, error);
};
auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
@@ -38268,7 +38268,7 @@ - (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestPar
commandPayload:params
timedInvokeTimeout:timedInvokeTimeoutMs
serverSideProcessingTimeout:params.serverSideProcessingTimeout
- responseClass:nil
+ responseClass:MTRICDManagementClusterStayActiveResponseParams.class
queue:self.callbackQueue
completion:responseHandler];
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
index ce1d1fcadc38b3..4d8b1bc810c398 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
@@ -6045,6 +6045,7 @@ typedef NS_ENUM(uint32_t, MTRCommandIDType) {
MTRCommandIDTypeClusterICDManagementCommandRegisterClientResponseID MTR_PROVISIONALLY_AVAILABLE = 0x00000001,
MTRCommandIDTypeClusterICDManagementCommandUnregisterClientID MTR_PROVISIONALLY_AVAILABLE = 0x00000002,
MTRCommandIDTypeClusterICDManagementCommandStayActiveRequestID MTR_PROVISIONALLY_AVAILABLE = 0x00000003,
+ MTRCommandIDTypeClusterICDManagementCommandStayActiveResponseID MTR_PROVISIONALLY_AVAILABLE = 0x00000004,
// Cluster Timer commands
MTRCommandIDTypeClusterTimerCommandSetTimerID MTR_PROVISIONALLY_AVAILABLE = 0x00000000,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index 3530cb1e7083a8..c3e726a93bf8fa 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -2150,8 +2150,8 @@ MTR_PROVISIONALLY_AVAILABLE
- (void)registerClientWithParams:(MTRICDManagementClusterRegisterClientParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRICDManagementClusterRegisterClientResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
- (void)unregisterClientWithParams:(MTRICDManagementClusterUnregisterClientParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
-- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
-- (void)stayActiveRequestWithExpectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)stayActiveRequestWithExpectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
MTR_PROVISIONALLY_AVAILABLE;
- (NSDictionary * _Nullable)readAttributeIdleModeDurationWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index c271972d2d02d3..ca5a184f3b50b3 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -6479,11 +6479,11 @@ - (void)unregisterClientWithParams:(MTRICDManagementClusterUnregisterClientParam
completion:responseHandler];
}
-- (void)stayActiveRequestWithExpectedValues:(NSArray *> *)expectedValues expectedValueInterval:(NSNumber *)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithExpectedValues:(NSArray *> *)expectedValues expectedValueInterval:(NSNumber *)expectedValueIntervalMs completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
{
[self stayActiveRequestWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion];
}
-- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+- (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestParams * _Nullable)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRICDManagementClusterStayActiveResponseParams * _Nullable data, NSError * _Nullable error))completion
{
if (params == nil) {
params = [[MTRICDManagementClusterStayActiveRequestParams
@@ -6491,7 +6491,7 @@ - (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestPar
}
auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
- completion(error);
+ completion(response, error);
};
auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
@@ -6505,7 +6505,7 @@ - (void)stayActiveRequestWithParams:(MTRICDManagementClusterStayActiveRequestPar
expectedValueInterval:expectedValueIntervalMs
timedInvokeTimeout:timedInvokeTimeoutMs
serverSideProcessingTimeout:params.serverSideProcessingTimeout
- responseClass:nil
+ responseClass:MTRICDManagementClusterStayActiveResponseParams.class
queue:self.callbackQueue
completion:responseHandler];
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
index c6f825ba4d4025..6acf413ead81d6 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
@@ -4489,6 +4489,25 @@ MTR_PROVISIONALLY_AVAILABLE
@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
@end
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRICDManagementClusterStayActiveResponseParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull promisedActiveDuration MTR_PROVISIONALLY_AVAILABLE;
+
+/**
+ * Initialize an MTRICDManagementClusterStayActiveResponseParams with a response-value dictionary
+ * of the sort that MTRDeviceResponseHandler would receive.
+ *
+ * Will return nil and hand out an error if the response-value dictionary is not
+ * a command data response or is not the right command response.
+ *
+ * Will return nil and hand out an error if the data response does not match the known
+ * schema for this command.
+ */
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error MTR_PROVISIONALLY_AVAILABLE;
+@end
+
MTR_PROVISIONALLY_AVAILABLE
@interface MTRTimerClusterSetTimerParams : NSObject
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
index 7336507f09484c..77b3a652762a38 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
@@ -12065,6 +12065,85 @@ - (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
}
@end
+@implementation MTRICDManagementClusterStayActiveResponseParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _promisedActiveDuration = @(0);
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRICDManagementClusterStayActiveResponseParams alloc] init];
+
+ other.promisedActiveDuration = self.promisedActiveDuration;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: promisedActiveDuration:%@; >", NSStringFromClass([self class]), _promisedActiveDuration];
+ return descriptionString;
+}
+
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error
+{
+ if (!(self = [super init])) {
+ return nil;
+ }
+
+ using DecodableType = chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType;
+ chip::System::PacketBufferHandle buffer = [MTRBaseDevice _responseDataForCommand:responseValue
+ clusterID:DecodableType::GetClusterId()
+ commandID:DecodableType::GetCommandId()
+ error:error];
+ if (buffer.IsNull()) {
+ return nil;
+ }
+
+ chip::TLV::TLVReader reader;
+ reader.Init(buffer->Start(), buffer->DataLength());
+
+ CHIP_ERROR err = reader.Next(chip::TLV::AnonymousTag());
+ if (err == CHIP_NO_ERROR) {
+ DecodableType decodedStruct;
+ err = chip::app::DataModel::Decode(reader, decodedStruct);
+ if (err == CHIP_NO_ERROR) {
+ err = [self _setFieldsFromDecodableStruct:decodedStruct];
+ if (err == CHIP_NO_ERROR) {
+ return self;
+ }
+ }
+ }
+
+ NSString * errorStr = [NSString stringWithFormat:@"Command payload decoding failed: %s", err.AsString()];
+ MTR_LOG_ERROR("%s", errorStr.UTF8String);
+ if (error != nil) {
+ NSDictionary * userInfo = @{ NSLocalizedFailureReasonErrorKey : NSLocalizedString(errorStr, nil) };
+ *error = [NSError errorWithDomain:MTRErrorDomain code:MTRErrorCodeSchemaMismatch userInfo:userInfo];
+ }
+ return nil;
+}
+
+@end
+
+@implementation MTRICDManagementClusterStayActiveResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType &)decodableStruct
+{
+ {
+ self.promisedActiveDuration = [NSNumber numberWithUnsignedInt:decodableStruct.promisedActiveDuration];
+ }
+ return CHIP_NO_ERROR;
+}
+
+@end
+
@implementation MTRTimerClusterSetTimerParams
- (instancetype)init
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
index d50b8661ca0e9a..93339e7d817021 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
@@ -748,6 +748,12 @@ NS_ASSUME_NONNULL_BEGIN
@end
+@interface MTRICDManagementClusterStayActiveResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType &)decodableStruct;
+
+@end
+
@interface MTRTimerClusterSetTimerParams (InternalMethods)
- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
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 44b5a91247cae1..3886bbcb25c7a9 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
@@ -10679,6 +10679,40 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
}
}
} // namespace StayActiveRequest.
+namespace StayActiveResponse {
+CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const
+{
+ DataModel::WrappedStructEncoder encoder{ aWriter, aTag };
+ encoder.Encode(to_underlying(Fields::kPromisedActiveDuration), promisedActiveDuration);
+ return encoder.Finalize();
+}
+
+CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
+{
+ detail::StructDecodeIterator __iterator(reader);
+ while (true)
+ {
+ auto __element = __iterator.Next();
+ if (std::holds_alternative(__element))
+ {
+ return std::get(__element);
+ }
+
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ const uint8_t __context_tag = std::get(__element);
+
+ if (__context_tag == to_underlying(Fields::kPromisedActiveDuration))
+ {
+ err = DataModel::Decode(reader, promisedActiveDuration);
+ }
+ else
+ {
+ }
+
+ ReturnErrorOnFailure(err);
+ }
+}
+} // namespace StayActiveResponse.
} // namespace Commands
namespace Attributes {
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 4f273e40fc482b..809e3b385209ac 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
@@ -14124,6 +14124,11 @@ struct Type;
struct DecodableType;
} // namespace StayActiveRequest
+namespace StayActiveResponse {
+struct Type;
+struct DecodableType;
+} // namespace StayActiveResponse
+
} // namespace Commands
namespace Commands {
@@ -14249,7 +14254,7 @@ struct Type
CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const;
- using ResponseType = DataModel::NullObjectType;
+ using ResponseType = Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType;
static constexpr bool MustUseTimedInvoke() { return false; }
};
@@ -14263,6 +14268,38 @@ struct DecodableType
CHIP_ERROR Decode(TLV::TLVReader & reader);
};
}; // namespace StayActiveRequest
+namespace StayActiveResponse {
+enum class Fields : uint8_t
+{
+ kPromisedActiveDuration = 0,
+};
+
+struct Type
+{
+public:
+ // Use GetCommandId instead of commandId directly to avoid naming conflict with CommandIdentification in ExecutionOfACommand
+ static constexpr CommandId GetCommandId() { return Commands::StayActiveResponse::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::IcdManagement::Id; }
+
+ uint32_t promisedActiveDuration = static_cast(0);
+
+ CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const;
+
+ using ResponseType = DataModel::NullObjectType;
+
+ static constexpr bool MustUseTimedInvoke() { return false; }
+};
+
+struct DecodableType
+{
+public:
+ static constexpr CommandId GetCommandId() { return Commands::StayActiveResponse::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::IcdManagement::Id; }
+
+ uint32_t promisedActiveDuration = static_cast(0);
+ CHIP_ERROR Decode(TLV::TLVReader & reader);
+};
+}; // namespace StayActiveResponse
} // namespace Commands
namespace Attributes {
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 335618b7622aab..8b18795939a9ea 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
@@ -644,6 +644,10 @@ namespace StayActiveRequest {
static constexpr CommandId Id = 0x00000003;
} // namespace StayActiveRequest
+namespace StayActiveResponse {
+static constexpr CommandId Id = 0x00000004;
+} // namespace StayActiveResponse
+
} // namespace Commands
} // namespace IcdManagement
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
index 86c1081875f6f1..2bbe4f01f08c79 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
+++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp
@@ -5242,6 +5242,14 @@ CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
DataModelLogger::LogString(indent, "}");
return CHIP_NO_ERROR;
}
+CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
+ const IcdManagement::Commands::StayActiveResponse::DecodableType & value)
+{
+ DataModelLogger::LogString(label, indent, "{");
+ ReturnErrorOnFailure(DataModelLogger::LogValue("promisedActiveDuration", indent + 1, value.promisedActiveDuration));
+ DataModelLogger::LogString(indent, "}");
+ return CHIP_NO_ERROR;
+}
CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent,
const OvenMode::Commands::ChangeToModeResponse::DecodableType & value)
{
@@ -14795,6 +14803,11 @@ CHIP_ERROR DataModelLogger::LogCommand(const chip::app::ConcreteCommandPath & pa
ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value));
return DataModelLogger::LogValue("RegisterClientResponse", 1, value);
}
+ case IcdManagement::Commands::StayActiveResponse::Id: {
+ IcdManagement::Commands::StayActiveResponse::DecodableType value;
+ ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value));
+ return DataModelLogger::LogValue("StayActiveResponse", 1, value);
+ }
}
break;
}
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
index 6fcac4df641522..a120b9021f7b95 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h
@@ -530,6 +530,8 @@ LogValue(const char * label, size_t indent,
const chip::app::Clusters::GroupKeyManagement::Commands::KeySetReadAllIndicesResponse::DecodableType & value);
static CHIP_ERROR LogValue(const char * label, size_t indent,
const chip::app::Clusters::IcdManagement::Commands::RegisterClientResponse::DecodableType & value);
+static CHIP_ERROR LogValue(const char * label, size_t indent,
+ const chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::DecodableType & value);
static CHIP_ERROR LogValue(const char * label, size_t indent,
const chip::app::Clusters::OvenMode::Commands::ChangeToModeResponse::DecodableType & value);
static CHIP_ERROR LogValue(const char * label, size_t indent,
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
index cd1014bbb6636e..38a0c96534ab1a 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
@@ -49398,12 +49398,18 @@ class IcdManagementStayActiveRequest : public ClusterCommand {
uint16_t __block responsesNeeded = repeatCount;
while (repeatCount--) {
[cluster stayActiveRequestWithParams:params completion:
- ^(NSError * _Nullable error) {
+ ^(MTRICDManagementClusterStayActiveResponseParams * _Nullable values, NSError * _Nullable error) {
+ NSLog(@"Values: %@", values);
+ if (error == nil) {
+ constexpr chip::CommandId responseId = chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::Id;
+ RemoteDataModelLogger::LogCommandAsJSON(@(endpointId), @(clusterId), @(responseId), values);
+ }
responsesNeeded--;
if (error != nil) {
mError = error;
LogNSError("Error", error);
- RemoteDataModelLogger::LogCommandErrorAsJSON(@(endpointId), @(clusterId), @(commandId), error);
+ constexpr chip::CommandId responseId = chip::app::Clusters::IcdManagement::Commands::StayActiveResponse::Id;
+ RemoteDataModelLogger::LogCommandErrorAsJSON(@(endpointId), @(clusterId), @(responseId), error);
}
if (responsesNeeded == 0) {
SetCommandExitStatus(mError);