diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter index 9b30603b156ee2..a261fb4070e0ed 100644 --- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter +++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter @@ -3464,6 +3464,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter index fc6ef7614fc562..36a7822ede2aa3 100644 --- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter +++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter @@ -2301,6 +2301,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter index 0b316c77592d7e..45e530bbff9449 100644 --- a/examples/lock-app/lock-common/lock-app.matter +++ b/examples/lock-app/lock-common/lock-app.matter @@ -2728,6 +2728,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter index 7c39ef0fe254eb..91e023d6607a6c 100644 --- a/examples/lock-app/nxp/zap/lock-app.matter +++ b/examples/lock-app/nxp/zap/lock-app.matter @@ -2304,6 +2304,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter index 303b079b910cac..1d367e9eaeb42b 100644 --- a/examples/lock-app/qpg/zap/lock.matter +++ b/examples/lock-app/qpg/zap/lock.matter @@ -2401,6 +2401,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter index de9603d2627962..6fcce30fe6b2a0 100644 --- a/examples/placeholder/linux/apps/app1/config.matter +++ b/examples/placeholder/linux/apps/app1/config.matter @@ -4098,6 +4098,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { @@ -4749,6 +4750,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter index 2b6528d55ad018..b2be5a5715779c 100644 --- a/examples/placeholder/linux/apps/app2/config.matter +++ b/examples/placeholder/linux/apps/app2/config.matter @@ -4055,6 +4055,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { @@ -4706,6 +4707,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter index 07baa25e19ebc3..eb7e56997ead55 100644 --- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter +++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter @@ -2939,6 +2939,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter index 1ba56719ab4549..6c7748e0898737 100644 --- a/src/controller/data_model/controller-clusters.matter +++ b/src/controller/data_model/controller-clusters.matter @@ -6263,6 +6263,7 @@ cluster DoorLock = 257 { nullable fabric_idx creatorFabricIndex = 2; nullable fabric_idx lastModifiedFabricIndex = 3; nullable int16u nextCredentialIndex = 4; + optional nullable octet_string credentialData = 5; } request struct ClearCredentialRequest { diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java index 2ce04c328ded6f..bb92218a4b4b59 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java @@ -35125,6 +35125,8 @@ public void onResponse(StructType invokeStructValue) { @Nullable Integer lastModifiedFabricIndex = null; final long nextCredentialIndexFieldID = 4L; @Nullable Integer nextCredentialIndex = null; + final long credentialDataFieldID = 5L; + @Nullable Optional credentialData = null; for (StructElement element: invokeStructValue.value()) { if (element.contextTagNum() == credentialExistsFieldID) { if (element.value(BaseTLVType.class).type() == TLVType.Boolean) { @@ -35151,9 +35153,14 @@ public void onResponse(StructType invokeStructValue) { UIntType castingValue = element.value(UIntType.class); nextCredentialIndex = castingValue.value(Integer.class); } + } else if (element.contextTagNum() == credentialDataFieldID) { + if (element.value(BaseTLVType.class).type() == TLVType.ByteArray) { + ByteArrayType castingValue = element.value(ByteArrayType.class); + credentialData = Optional.of(castingValue.value(byte[].class)); + } } } - callback.onSuccess(credentialExists, userIndex, creatorFabricIndex, lastModifiedFabricIndex, nextCredentialIndex); + callback.onSuccess(credentialExists, userIndex, creatorFabricIndex, lastModifiedFabricIndex, nextCredentialIndex, credentialData); }}, commandId, commandArgs, timedInvokeTimeoutMs); } @@ -35254,7 +35261,7 @@ public interface SetCredentialResponseCallback extends BaseClusterCallback { } public interface GetCredentialStatusResponseCallback extends BaseClusterCallback { - void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextCredentialIndex); + void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextCredentialIndex, @Nullable Optional credentialData); } public interface LockStateAttributeCallback extends BaseAttributeCallback { diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java index 40427e62794337..d10ce6b823d8d4 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java @@ -12382,7 +12382,7 @@ public void setCallbackDelegate(ClusterCommandCallback callback) { } @Override - public void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextCredentialIndex) { + public void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextCredentialIndex, @Nullable Optional credentialData) { Map responseValues = new LinkedHashMap<>(); CommandResponseInfo credentialExistsResponseValue = new CommandResponseInfo("credentialExists", "Boolean"); @@ -12395,6 +12395,8 @@ public void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nu responseValues.put(lastModifiedFabricIndexResponseValue, lastModifiedFabricIndex); CommandResponseInfo nextCredentialIndexResponseValue = new CommandResponseInfo("nextCredentialIndex", "Integer"); responseValues.put(nextCredentialIndexResponseValue, nextCredentialIndex); + CommandResponseInfo credentialDataResponseValue = new CommandResponseInfo("credentialData", "Optional"); + responseValues.put(credentialDataResponseValue, credentialData); callback.onSuccess(responseValues); } diff --git a/src/controller/java/generated/java/matter/controller/cluster/clusters/DoorLockCluster.kt b/src/controller/java/generated/java/matter/controller/cluster/clusters/DoorLockCluster.kt index ff0525a58d8c27..ad44768f35c71f 100644 --- a/src/controller/java/generated/java/matter/controller/cluster/clusters/DoorLockCluster.kt +++ b/src/controller/java/generated/java/matter/controller/cluster/clusters/DoorLockCluster.kt @@ -99,6 +99,7 @@ class DoorLockCluster(private val controller: MatterController, private val endp val creatorFabricIndex: UByte?, val lastModifiedFabricIndex: UByte?, val nextCredentialIndex: UShort?, + val credentialData: ByteArray?, ) class LockStateAttribute(val value: UByte?) @@ -1320,6 +1321,9 @@ class DoorLockCluster(private val controller: MatterController, private val endp val TAG_NEXT_CREDENTIAL_INDEX: Int = 4 var nextCredentialIndex_decoded: UShort? = null + val TAG_CREDENTIAL_DATA: Int = 5 + var credentialData_decoded: ByteArray? = null + while (!tlvReader.isEndOfContainer()) { val tag = tlvReader.peekElement().tag @@ -1385,6 +1389,25 @@ class DoorLockCluster(private val controller: MatterController, private val endp null } } + } + + if (tag == ContextSpecificTag(TAG_CREDENTIAL_DATA)) { + credentialData_decoded = + if (tlvReader.isNull()) { + tlvReader.getNull(tag) + null + } else { + if (!tlvReader.isNull()) { + if (tlvReader.isNextTag(tag)) { + tlvReader.getByteArray(tag) + } else { + null + } + } else { + tlvReader.getNull(tag) + null + } + } } else { tlvReader.skipElement() } @@ -1402,6 +1425,7 @@ class DoorLockCluster(private val controller: MatterController, private val endp creatorFabricIndex_decoded, lastModifiedFabricIndex_decoded, nextCredentialIndex_decoded, + credentialData_decoded, ) } diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index efefaf9059dd7f..6a9e0b8416fd5a 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -28861,6 +28861,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: ClusterObjectFieldDescriptor(Label="creatorFabricIndex", Tag=2, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="lastModifiedFabricIndex", Tag=3, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="nextCredentialIndex", Tag=4, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="credentialData", Tag=5, Type=typing.Union[None, Nullable, bytes]), ]) credentialExists: 'bool' = False @@ -28868,6 +28869,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: creatorFabricIndex: 'typing.Union[Nullable, uint]' = NullValue lastModifiedFabricIndex: 'typing.Union[Nullable, uint]' = NullValue nextCredentialIndex: 'typing.Union[Nullable, uint]' = NullValue + credentialData: 'typing.Union[None, Nullable, bytes]' = None @dataclass class ClearCredential(ClusterCommand): diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h index 48e7175fa2c58b..7135f3d88d8357 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h @@ -7212,6 +7212,8 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) @property (nonatomic, copy) NSNumber * _Nullable lastModifiedFabricIndex MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)); @property (nonatomic, copy) NSNumber * _Nullable nextCredentialIndex MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)); + +@property (nonatomic, copy) NSData * _Nullable credentialData MTR_PROVISIONALLY_AVAILABLE; /** * Controls whether the command is a timed command (using Timed Invoke). * diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm index ce78c58b074d32..ec90ce4d023543 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm @@ -20631,6 +20631,8 @@ - (instancetype)init _lastModifiedFabricIndex = nil; _nextCredentialIndex = nil; + + _credentialData = nil; _timedInvokeTimeoutMs = nil; } return self; @@ -20645,6 +20647,7 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; other.creatorFabricIndex = self.creatorFabricIndex; other.lastModifiedFabricIndex = self.lastModifiedFabricIndex; other.nextCredentialIndex = self.nextCredentialIndex; + other.credentialData = self.credentialData; other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs; return other; @@ -20652,7 +20655,7 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; - (NSString *)description { - NSString * descriptionString = [NSString stringWithFormat:@"<%@: credentialExists:%@; userIndex:%@; creatorFabricIndex:%@; lastModifiedFabricIndex:%@; nextCredentialIndex:%@; >", NSStringFromClass([self class]), _credentialExists, _userIndex, _creatorFabricIndex, _lastModifiedFabricIndex, _nextCredentialIndex]; + NSString * descriptionString = [NSString stringWithFormat:@"<%@: credentialExists:%@; userIndex:%@; creatorFabricIndex:%@; lastModifiedFabricIndex:%@; nextCredentialIndex:%@; credentialData:%@; >", NSStringFromClass([self class]), _credentialExists, _userIndex, _creatorFabricIndex, _lastModifiedFabricIndex, _nextCredentialIndex, [_credentialData base64EncodedStringWithOptions:0]]; return descriptionString; } @@ -20733,6 +20736,17 @@ - (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::DoorLock self.nextCredentialIndex = [NSNumber numberWithUnsignedShort:decodableStruct.nextCredentialIndex.Value()]; } } + { + if (decodableStruct.credentialData.HasValue()) { + if (decodableStruct.credentialData.Value().IsNull()) { + self.credentialData = nil; + } else { + self.credentialData = AsData(decodableStruct.credentialData.Value().Value()); + } + } else { + self.credentialData = nil; + } + } return CHIP_NO_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 00e32012cb3be6..3029e317897ca2 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 @@ -19400,6 +19400,7 @@ CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const encoder.Encode(to_underlying(Fields::kCreatorFabricIndex), creatorFabricIndex); encoder.Encode(to_underlying(Fields::kLastModifiedFabricIndex), lastModifiedFabricIndex); encoder.Encode(to_underlying(Fields::kNextCredentialIndex), nextCredentialIndex); + encoder.Encode(to_underlying(Fields::kCredentialData), credentialData); return encoder.Finalize(); } @@ -19437,6 +19438,10 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) { err = DataModel::Decode(reader, nextCredentialIndex); } + else if (__context_tag == to_underlying(Fields::kCredentialData)) + { + err = DataModel::Decode(reader, credentialData); + } else { } 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 f8847a3f1a0b51..16042f9eeb562f 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 @@ -26208,6 +26208,7 @@ enum class Fields : uint8_t kCreatorFabricIndex = 2, kLastModifiedFabricIndex = 3, kNextCredentialIndex = 4, + kCredentialData = 5, }; struct Type @@ -26222,6 +26223,7 @@ struct Type DataModel::Nullable creatorFabricIndex; DataModel::Nullable lastModifiedFabricIndex; DataModel::Nullable nextCredentialIndex; + Optional> credentialData; CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const; @@ -26241,6 +26243,7 @@ struct DecodableType DataModel::Nullable creatorFabricIndex; DataModel::Nullable lastModifiedFabricIndex; DataModel::Nullable nextCredentialIndex; + Optional> credentialData; CHIP_ERROR Decode(TLV::TLVReader & reader); }; }; // namespace GetCredentialStatusResponse 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 e51e3eaa80e166..05c103395826c0 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp +++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp @@ -8560,6 +8560,7 @@ CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, ReturnErrorOnFailure(DataModelLogger::LogValue("creatorFabricIndex", indent + 1, value.creatorFabricIndex)); ReturnErrorOnFailure(DataModelLogger::LogValue("lastModifiedFabricIndex", indent + 1, value.lastModifiedFabricIndex)); ReturnErrorOnFailure(DataModelLogger::LogValue("nextCredentialIndex", indent + 1, value.nextCredentialIndex)); + ReturnErrorOnFailure(DataModelLogger::LogValue("credentialData", indent + 1, value.credentialData)); DataModelLogger::LogString(indent, "}"); return CHIP_NO_ERROR; }