diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
index 9d76c360803f43..e5c88e10a5e5e3 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
@@ -2361,6 +2361,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -2375,6 +2376,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -2466,6 +2468,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -2654,6 +2657,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
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 32a2bc72417bcf..256f2299e2c686 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
@@ -2091,6 +2091,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -2105,6 +2106,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -2196,6 +2198,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -2384,6 +2387,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
index 7b8f60cf3d3c8d..fc73fb38ad1729 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
@@ -1231,6 +1231,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -1245,6 +1246,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -1336,6 +1338,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -1524,6 +1527,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
diff --git a/examples/lock-app/genio/src/LockManager.cpp b/examples/lock-app/genio/src/LockManager.cpp
index f558bb1de96070..aa934e3042506a 100644
--- a/examples/lock-app/genio/src/LockManager.cpp
+++ b/examples/lock-app/genio/src/LockManager.cpp
@@ -640,6 +640,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/lock-app/infineon/cyw30739/src/LockManager.cpp b/examples/lock-app/infineon/cyw30739/src/LockManager.cpp
index 3e868f503a84c5..30d680d96500ca 100644
--- a/examples/lock-app/infineon/cyw30739/src/LockManager.cpp
+++ b/examples/lock-app/infineon/cyw30739/src/LockManager.cpp
@@ -650,6 +650,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/lock-app/infineon/psoc6/src/LockManager.cpp b/examples/lock-app/infineon/psoc6/src/LockManager.cpp
index 764ee16ee61c56..4fed23346571dc 100644
--- a/examples/lock-app/infineon/psoc6/src/LockManager.cpp
+++ b/examples/lock-app/infineon/psoc6/src/LockManager.cpp
@@ -649,6 +649,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter
index 43d0b253a9d1c5..6711806aa657cf 100644
--- a/examples/lock-app/lock-common/lock-app.matter
+++ b/examples/lock-app/lock-common/lock-app.matter
@@ -1678,6 +1678,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -1692,6 +1693,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -1783,6 +1785,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -1971,6 +1974,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
diff --git a/examples/lock-app/lock-common/src/LockEndpoint.cpp b/examples/lock-app/lock-common/src/LockEndpoint.cpp
index db1fde79b9b4dc..eaa24aa1d6f07a 100644
--- a/examples/lock-app/lock-common/src/LockEndpoint.cpp
+++ b/examples/lock-app/lock-common/src/LockEndpoint.cpp
@@ -547,6 +547,8 @@ const char * LockEndpoint::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter
index cbe34d3abc1db1..a68dac1f00fab9 100644
--- a/examples/lock-app/nxp/zap/lock-app.matter
+++ b/examples/lock-app/nxp/zap/lock-app.matter
@@ -981,6 +981,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -995,6 +996,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -1086,6 +1088,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -1274,6 +1277,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter
index 51ec266cee8595..9bad58cf0a9894 100644
--- a/examples/lock-app/qpg/zap/lock.matter
+++ b/examples/lock-app/qpg/zap/lock.matter
@@ -1290,6 +1290,7 @@ server cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -1304,6 +1305,7 @@ server cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -1395,6 +1397,7 @@ server cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -1583,6 +1586,7 @@ server cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
diff --git a/examples/lock-app/silabs/SiWx917/src/LockManager.cpp b/examples/lock-app/silabs/SiWx917/src/LockManager.cpp
index b9a8f9db2f515c..c1a5b2ae627067 100644
--- a/examples/lock-app/silabs/SiWx917/src/LockManager.cpp
+++ b/examples/lock-app/silabs/SiWx917/src/LockManager.cpp
@@ -650,6 +650,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/lock-app/silabs/efr32/src/LockManager.cpp b/examples/lock-app/silabs/efr32/src/LockManager.cpp
index c0f0797e7e6eed..b66fca8ec874e6 100644
--- a/examples/lock-app/silabs/efr32/src/LockManager.cpp
+++ b/examples/lock-app/silabs/efr32/src/LockManager.cpp
@@ -650,6 +650,8 @@ const char * LockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/examples/platform/esp32/lock/BoltLockManager.cpp b/examples/platform/esp32/lock/BoltLockManager.cpp
index dd9b1df2ac08b0..262a5991ff0be9 100644
--- a/examples/platform/esp32/lock/BoltLockManager.cpp
+++ b/examples/platform/esp32/lock/BoltLockManager.cpp
@@ -691,6 +691,8 @@ const char * BoltLockManager::lockStateToString(DlLockState lockState) const
return "Locked";
case DlLockState::kUnlocked:
return "Unlocked";
+ case DlLockState::kUnlatched:
+ return "Unlatched";
case DlLockState::kUnknownEnumValue:
break;
}
diff --git a/src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml
index 9902fe74d2dd79..b32136aa30394b 100644
--- a/src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml
@@ -37,6 +37,7 @@ limitations under the License.
+
true
true
@@ -57,6 +58,7 @@ limitations under the License.
false
true
true
+ true
+
+
@@ -531,6 +538,7 @@ limitations under the License.
+
@@ -594,6 +602,7 @@ limitations under the License.
+
@@ -610,6 +619,7 @@ limitations under the License.
+
@@ -758,6 +768,7 @@ limitations under the License.
+
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 5a960777719c68..b05b5821804791 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -3048,6 +3048,7 @@ client cluster DoorLock = 257 {
kNotFullyLocked = 0;
kLocked = 1;
kUnlocked = 2;
+ kUnlatched = 3;
}
enum DlLockType : ENUM8 {
@@ -3062,6 +3063,7 @@ client cluster DoorLock = 257 {
kInterconnectedLock = 8;
kDeadLatch = 9;
kDoorFurniture = 10;
+ kEurocylinder = 11;
}
enum DlStatus : ENUM8 {
@@ -3153,6 +3155,7 @@ client cluster DoorLock = 257 {
kUnlock = 1;
kNonAccessUserEvent = 2;
kForcedUserEvent = 3;
+ kUnlatch = 4;
}
enum OperatingModeEnum : ENUM8 {
@@ -3341,6 +3344,7 @@ client cluster DoorLock = 257 {
kNotification = 0x200;
kYearDayAccessSchedules = 0x400;
kHolidaySchedules = 0x800;
+ kUnbolt = 0x1000;
}
struct CredentialStruct {
@@ -3582,6 +3586,10 @@ client cluster DoorLock = 257 {
nullable CredentialStruct credential = 0;
}
+ request struct UnboltDoorRequest {
+ optional OCTET_STRING PINCode = 0;
+ }
+
/** This command causes the lock device to lock the door. */
timed command LockDoor(LockDoorRequest): DefaultSuccess = 0;
/** This command causes the lock device to unlock the door. */
@@ -3618,6 +3626,8 @@ client cluster DoorLock = 257 {
command access(invoke: administer) GetCredentialStatus(GetCredentialStatusRequest): GetCredentialStatusResponse = 36;
/** Clear one, one type, or all credentials except ProgrammingPIN credential. */
timed command access(invoke: administer) ClearCredential(ClearCredentialRequest): DefaultSuccess = 38;
+ /** This command causes the lock device to unlock the door without pulling the latch. */
+ timed command UnboltDoor(UnboltDoorRequest): DefaultSuccess = 39;
}
/** Provides an interface for controlling and adjusting automatic window coverings. */
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index d1d1fd36d0450b..dbcc7d61ff8e64 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -18194,11 +18194,12 @@ class DlLockState(MatterIntEnum):
kNotFullyLocked = 0x00
kLocked = 0x01
kUnlocked = 0x02
+ kUnlatched = 0x03
# All received enum values that are not listed above will be mapped
# to kUnknownEnumValue. This is a helper enum value that should only
# be used by code to process how it handles receiving and unknown
# enum value. This specific should never be transmitted.
- kUnknownEnumValue = 3,
+ kUnknownEnumValue = 4,
class DlLockType(MatterIntEnum):
kDeadBolt = 0x00
@@ -18212,11 +18213,12 @@ class DlLockType(MatterIntEnum):
kInterconnectedLock = 0x08
kDeadLatch = 0x09
kDoorFurniture = 0x0A
+ kEurocylinder = 0x0B
# All received enum values that are not listed above will be mapped
# to kUnknownEnumValue. This is a helper enum value that should only
# be used by code to process how it handles receiving and unknown
# enum value. This specific should never be transmitted.
- kUnknownEnumValue = 11,
+ kUnknownEnumValue = 12,
class DlStatus(MatterIntEnum):
kSuccess = 0x00
@@ -18339,11 +18341,12 @@ class LockOperationTypeEnum(MatterIntEnum):
kUnlock = 0x01
kNonAccessUserEvent = 0x02
kForcedUserEvent = 0x03
+ kUnlatch = 0x04
# All received enum values that are not listed above will be mapped
# to kUnknownEnumValue. This is a helper enum value that should only
# be used by code to process how it handles receiving and unknown
# enum value. This specific should never be transmitted.
- kUnknownEnumValue = 4,
+ kUnknownEnumValue = 5,
class OperatingModeEnum(MatterIntEnum):
kNormal = 0x00
@@ -18538,6 +18541,7 @@ class DoorLockFeature(IntFlag):
kNotification = 0x200
kYearDayAccessSchedules = 0x400
kHolidaySchedules = 0x800
+ kUnbolt = 0x1000
class Structs:
@dataclass
@@ -19082,6 +19086,26 @@ def must_use_timed_invoke(cls) -> bool:
credential: 'typing.Union[Nullable, DoorLock.Structs.CredentialStruct]' = NullValue
+ @dataclass
+ class UnboltDoor(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x0101
+ command_id: typing.ClassVar[int] = 0x00000027
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="PINCode", Tag=0, Type=typing.Optional[bytes]),
+ ])
+
+ @ChipUtility.classproperty
+ def must_use_timed_invoke(cls) -> bool:
+ return True
+
+ PINCode: 'typing.Optional[bytes]' = None
+
class Attributes:
@dataclass
class LockState(ClusterAttributeDescriptor):
diff --git a/src/darwin/Framework/CHIP/templates/availability.yaml b/src/darwin/Framework/CHIP/templates/availability.yaml
index 3280cacba0e578..db1318330a792a 100644
--- a/src/darwin/Framework/CHIP/templates/availability.yaml
+++ b/src/darwin/Framework/CHIP/templates/availability.yaml
@@ -7562,6 +7562,11 @@
BridgedDeviceBasic:
- ProductFinishEnum
- ColorEnum
+ enum values:
+ # Unlatch was never present for the old operation type enum name.
+ DoorLock:
+ DlLockOperationType:
+ - Unlatch
renames:
attributes:
TimeSynchronization:
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index b6701eae3e480b..b91a2a0b8c45fb 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -9291,6 +9291,13 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
*/
- (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)params
completion:(MTRStatusCompletion)completion API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
+/**
+ * Command UnboltDoor
+ *
+ * This command causes the lock device to unlock the door without pulling the latch.
+ */
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _Nullable)params
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
- (void)readAttributeLockStateWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
@@ -22148,6 +22155,7 @@ typedef NS_ENUM(uint8_t, MTRDoorLockDlLockState) {
MTRDoorLockDlLockStateNotFullyLocked API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x00,
MTRDoorLockDlLockStateLocked API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x01,
MTRDoorLockDlLockStateUnlocked API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x02,
+ MTRDoorLockDlLockStateUnlatched MTR_NEWLY_AVAILABLE = 0x03,
} API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
typedef NS_ENUM(uint8_t, MTRDoorLockDlLockType) {
@@ -22162,6 +22170,7 @@ typedef NS_ENUM(uint8_t, MTRDoorLockDlLockType) {
MTRDoorLockDlLockTypeInterconnectedLock API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x08,
MTRDoorLockDlLockTypeDeadLatch API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x09,
MTRDoorLockDlLockTypeDoorFurniture API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x0A,
+ MTRDoorLockDlLockTypeEurocylinder MTR_NEWLY_AVAILABLE = 0x0B,
} API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
typedef NS_ENUM(uint8_t, MTRDoorLockDlStatus) {
@@ -22345,6 +22354,7 @@ typedef NS_ENUM(uint8_t, MTRDoorLockLockOperationType) {
MTRDoorLockLockOperationTypeUnlock API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x01,
MTRDoorLockLockOperationTypeNonAccessUserEvent API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x02,
MTRDoorLockLockOperationTypeForcedUserEvent API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x03,
+ MTRDoorLockLockOperationTypeUnlatch MTR_NEWLY_AVAILABLE = 0x04,
} API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
typedef NS_ENUM(uint8_t, MTRDoorLockDlLockOperationType) {
@@ -22739,6 +22749,7 @@ typedef NS_OPTIONS(uint32_t, MTRDoorLockFeature) {
macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4))
= 0x400,
MTRDoorLockFeatureHolidaySchedules API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) = 0x800,
+ MTRDoorLockFeatureUnbolt MTR_NEWLY_AVAILABLE = 0x1000,
} API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
typedef NS_ENUM(uint8_t, MTRWindowCoveringEndProductType) {
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index 69ec342a1f9180..4c84bb38308eea 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -52794,6 +52794,50 @@ - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)par
std::move(*bridge).DispatchAction(self.device);
}
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _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;
+ DoorLock::Commands::UnboltDoor::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 (!timedInvokeTimeoutMs.HasValue()) {
+ timedInvokeTimeoutMs.SetValue(10000);
+ }
+ if (params != nil) {
+ if (params.pinCode != nil) {
+ auto & definedValue_0 = request.PINCode.Emplace();
+ definedValue_0 = [self asByteSpan:params.pinCode];
+ }
+ }
+
+ return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, self->_endpoint,
+ timedInvokeTimeoutMs, invokeTimeout);
+ });
+ std::move(*bridge).DispatchAction(self.device);
+}
+
- (void)readAttributeLockStateWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
{
MTRReadParams * params = [[MTRReadParams alloc] init];
@@ -55425,6 +55469,11 @@ - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)par
{
[self clearCredentialWithParams:params completion:completionHandler];
}
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _Nullable)params
+ completionHandler:(MTRStatusCompletion)completionHandler
+{
+ [self unboltDoorWithParams:params completion:completionHandler];
+}
- (void)readAttributeLockStateWithCompletionHandler:(void (^)(
NSNumber * _Nullable value, NSError * _Nullable error))completionHandler
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
index cb390c88dc7b25..09180049b086b2 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
@@ -9125,6 +9125,7 @@ typedef NS_ENUM(uint32_t, MTRCommandIDType) {
= 0x00000025,
MTRCommandIDTypeClusterDoorLockCommandClearCredentialID API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
= 0x00000026,
+ MTRCommandIDTypeClusterDoorLockCommandUnboltDoorID MTR_NEWLY_AVAILABLE = 0x00000027,
// Cluster WindowCovering deprecated command id names
MTRClusterWindowCoveringCommandUpOrOpenID MTR_DEPRECATED("Please use MTRCommandIDTypeClusterWindowCoveringCommandUpOrOpenID",
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index ece7422921c04a..27597e8cc9d632 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -3355,6 +3355,10 @@ API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries
expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs
completion:(MTRStatusCompletion)completion API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4));
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _Nullable)params
+ expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries
+ expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs
+ completion:(MTRStatusCompletion)completion MTR_NEWLY_AVAILABLE;
- (NSDictionary *)readAttributeLockStateWithParams:(MTRReadParams * _Nullable)params
API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index 6bb2a75441c7d4..ef4792e1b86a0a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -16095,6 +16095,82 @@ - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)par
}
}
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _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) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandUnboltDoorID];
+ // 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;
+ DoorLock::Commands::UnboltDoor::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 (!timedInvokeTimeoutMs.HasValue()) {
+ timedInvokeTimeoutMs.SetValue(10000);
+ }
+ if (params != nil) {
+ if (params.pinCode != nil) {
+ auto & definedValue_0 = request.PINCode.Emplace();
+ definedValue_0 = [self asByteSpan:params.pinCode];
+ }
+ }
+
+ 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 *)readAttributeLockStateWithParams:(MTRReadParams * _Nullable)params
{
return [self.device readAttributeWithEndpointID:@(_endpoint)
@@ -16999,6 +17075,16 @@ - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)par
expectedValueInterval:expectedValueIntervalMs
completion:completionHandler];
}
+- (void)unboltDoorWithParams:(MTRDoorLockClusterUnboltDoorParams * _Nullable)params
+ expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries
+ expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs
+ completionHandler:(MTRStatusCompletion)completionHandler
+{
+ [self unboltDoorWithParams:params
+ expectedValues:expectedDataValueDictionaries
+ expectedValueInterval:expectedValueIntervalMs
+ completion:completionHandler];
+}
@end
@implementation MTRClusterWindowCovering
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
index 72c27e3beb05ab..56915dd4293c74 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
@@ -5304,6 +5304,36 @@ 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 MTRDoorLockClusterUnboltDoorParams : NSObject
+
+@property (nonatomic, copy) NSData * _Nullable pinCode 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
+
API_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1))
@interface MTRWindowCoveringClusterUpOrOpenParams : NSObject
/**
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
index a835915630ae25..9e7af8854b0c15 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
@@ -8251,6 +8251,37 @@ - (NSString *)description
return descriptionString;
}
+@end
+@implementation MTRDoorLockClusterUnboltDoorParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _pinCode = nil;
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRDoorLockClusterUnboltDoorParams alloc] init];
+
+ other.pinCode = self.pinCode;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString
+ stringWithFormat:@"<%@: pinCode:%@; >", NSStringFromClass([self class]), [_pinCode base64EncodedStringWithOptions:0]];
+ return descriptionString;
+}
+
@end
@implementation MTRWindowCoveringClusterUpOrOpenParams
- (instancetype)init
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 48fd55330a58fb..087234106a8474 100644
--- a/zzz_generated/app-common/app-common/zap-generated/callback.h
+++ b/zzz_generated/app-common/app-common/zap-generated/callback.h
@@ -7944,6 +7944,12 @@ bool emberAfDoorLockClusterGetCredentialStatusCallback(
bool emberAfDoorLockClusterClearCredentialCallback(
chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
const chip::app::Clusters::DoorLock::Commands::ClearCredential::DecodableType & commandData);
+/**
+ * @brief Door Lock Cluster UnboltDoor Command callback (from client)
+ */
+bool emberAfDoorLockClusterUnboltDoorCallback(
+ chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::DoorLock::Commands::UnboltDoor::DecodableType & commandData);
/**
* @brief Window Covering Cluster UpOrOpen Command callback (from client)
*/
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-enums-check.h b/zzz_generated/app-common/app-common/zap-generated/cluster-enums-check.h
index 36b1dba039ef38..0c719c6b360e1c 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-enums-check.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-enums-check.h
@@ -1682,9 +1682,10 @@ static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::DlLockState v
case EnumType::kNotFullyLocked:
case EnumType::kLocked:
case EnumType::kUnlocked:
+ case EnumType::kUnlatched:
return val;
default:
- return static_cast(3);
+ return static_cast(4);
}
}
static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::DlLockType val)
@@ -1703,9 +1704,10 @@ static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::DlLockType va
case EnumType::kInterconnectedLock:
case EnumType::kDeadLatch:
case EnumType::kDoorFurniture:
+ case EnumType::kEurocylinder:
return val;
default:
- return static_cast(11);
+ return static_cast(12);
}
}
static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::DlStatus val)
@@ -1857,9 +1859,10 @@ static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::LockOperation
case EnumType::kUnlock:
case EnumType::kNonAccessUserEvent:
case EnumType::kForcedUserEvent:
+ case EnumType::kUnlatch:
return val;
default:
- return static_cast(4);
+ return static_cast(5);
}
}
static auto __attribute__((unused)) EnsureKnownEnumValue(DoorLock::OperatingModeEnum val)
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 f84c4635d79d1a..246b5a69dbff80 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
@@ -2021,11 +2021,12 @@ enum class DlLockState : uint8_t
kNotFullyLocked = 0x00,
kLocked = 0x01,
kUnlocked = 0x02,
+ kUnlatched = 0x03,
// All received enum values that are not listed above will be mapped
// to kUnknownEnumValue. This is a helper enum value that should only
// be used by code to process how it handles receiving and unknown
// enum value. This specific should never be transmitted.
- kUnknownEnumValue = 3,
+ kUnknownEnumValue = 4,
};
// Enum for DlLockType
@@ -2042,11 +2043,12 @@ enum class DlLockType : uint8_t
kInterconnectedLock = 0x08,
kDeadLatch = 0x09,
kDoorFurniture = 0x0A,
+ kEurocylinder = 0x0B,
// All received enum values that are not listed above will be mapped
// to kUnknownEnumValue. This is a helper enum value that should only
// be used by code to process how it handles receiving and unknown
// enum value. This specific should never be transmitted.
- kUnknownEnumValue = 11,
+ kUnknownEnumValue = 12,
};
// Enum for DlStatus
@@ -2196,11 +2198,12 @@ enum class LockOperationTypeEnum : uint8_t
kUnlock = 0x01,
kNonAccessUserEvent = 0x02,
kForcedUserEvent = 0x03,
+ kUnlatch = 0x04,
// All received enum values that are not listed above will be mapped
// to kUnknownEnumValue. This is a helper enum value that should only
// be used by code to process how it handles receiving and unknown
// enum value. This specific should never be transmitted.
- kUnknownEnumValue = 4,
+ kUnknownEnumValue = 5,
};
// Enum for OperatingModeEnum
@@ -2454,6 +2457,7 @@ enum class DoorLockFeature : uint32_t
kNotification = 0x200,
kYearDayAccessSchedules = 0x400,
kHolidaySchedules = 0x800,
+ kUnbolt = 0x1000,
};
} // namespace DoorLock
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 75506b25fbd873..04d41b66fcd63e 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
@@ -13642,6 +13642,43 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader)
return CHIP_NO_ERROR;
}
} // namespace ClearCredential.
+namespace UnboltDoor {
+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::kPINCode), PINCode));
+ 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::kPINCode):
+ ReturnErrorOnFailure(DataModel::Decode(reader, PINCode));
+ break;
+ default:
+ break;
+ }
+ }
+
+ VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
+ ReturnErrorOnFailure(reader.ExitContainer(outer));
+ return CHIP_NO_ERROR;
+}
+} // namespace UnboltDoor.
} // namespace Commands
namespace Attributes {
@@ -23080,6 +23117,7 @@ bool CommandNeedsTimedInvoke(ClusterId aCluster, CommandId aCommand)
case Clusters::DoorLock::Commands::ClearUser::Id:
case Clusters::DoorLock::Commands::SetCredential::Id:
case Clusters::DoorLock::Commands::ClearCredential::Id:
+ case Clusters::DoorLock::Commands::UnboltDoor::Id:
return true;
default:
return false;
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 4549b4ff4b6873..627433159099d5 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
@@ -16263,6 +16263,11 @@ struct Type;
struct DecodableType;
} // namespace ClearCredential
+namespace UnboltDoor {
+struct Type;
+struct DecodableType;
+} // namespace UnboltDoor
+
} // namespace Commands
namespace Commands {
@@ -17208,6 +17213,38 @@ struct DecodableType
CHIP_ERROR Decode(TLV::TLVReader & reader);
};
}; // namespace ClearCredential
+namespace UnboltDoor {
+enum class Fields : uint8_t
+{
+ kPINCode = 0,
+};
+
+struct Type
+{
+public:
+ // Use GetCommandId instead of commandId directly to avoid naming conflict with CommandIdentification in ExecutionOfACommand
+ static constexpr CommandId GetCommandId() { return Commands::UnboltDoor::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::DoorLock::Id; }
+
+ Optional PINCode;
+
+ CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const;
+
+ using ResponseType = DataModel::NullObjectType;
+
+ static constexpr bool MustUseTimedInvoke() { return true; }
+};
+
+struct DecodableType
+{
+public:
+ static constexpr CommandId GetCommandId() { return Commands::UnboltDoor::Id; }
+ static constexpr ClusterId GetClusterId() { return Clusters::DoorLock::Id; }
+
+ Optional PINCode;
+ CHIP_ERROR Decode(TLV::TLVReader & reader);
+};
+}; // namespace UnboltDoor
} // 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 db687d7b7f512f..1d97415c764c37 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
@@ -860,6 +860,10 @@ namespace ClearCredential {
static constexpr CommandId Id = 0x00000026;
} // namespace ClearCredential
+namespace UnboltDoor {
+static constexpr CommandId Id = 0x00000027;
+} // namespace UnboltDoor
+
} // namespace Commands
} // namespace DoorLock
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
index d8513c0fbb762d..f6f8372534ef24 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
@@ -4687,6 +4687,7 @@ class TonerCartridgeMonitoringResetCondition : public ClusterCommand
| * SetCredential | 0x22 |
| * GetCredentialStatus | 0x24 |
| * ClearCredential | 0x26 |
+| * UnboltDoor | 0x27 |
|------------------------------------------------------------------------------|
| Attributes: | |
| * LockState | 0x0000 |
@@ -5325,6 +5326,36 @@ class DoorLockClearCredential : public ClusterCommand
mComplex_Credential;
};
+/*
+ * Command UnboltDoor
+ */
+class DoorLockUnboltDoor : public ClusterCommand
+{
+public:
+ DoorLockUnboltDoor(CredentialIssuerCommands * credsIssuerConfig) : ClusterCommand("unbolt-door", credsIssuerConfig)
+ {
+ AddArgument("PINCode", &mRequest.PINCode);
+ ClusterCommand::AddArguments();
+ }
+
+ CHIP_ERROR SendCommand(chip::DeviceProxy * device, std::vector endpointIds) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x00000101) command (0x00000027) on endpoint %u", endpointIds.at(0));
+
+ return ClusterCommand::SendCommand(device, endpointIds.at(0), 0x00000101, 0x00000027, mRequest);
+ }
+
+ CHIP_ERROR SendGroupCommand(chip::GroupId groupId, chip::FabricIndex fabricIndex) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x00000101) command (0x00000027) on Group %u", groupId);
+
+ return ClusterCommand::SendGroupCommand(groupId, fabricIndex, 0x00000101, 0x00000027, mRequest);
+ }
+
+private:
+ chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type mRequest;
+};
+
/*----------------------------------------------------------------------------*\
| Cluster WindowCovering | 0x0102 |
|------------------------------------------------------------------------------|
@@ -13744,6 +13775,7 @@ void registerClusterDoorLock(Commands & commands, CredentialIssuerCommands * cre
make_unique(credsIssuerConfig), //
make_unique(credsIssuerConfig), //
make_unique(credsIssuerConfig), //
+ make_unique(credsIssuerConfig), //
//
// Attributes
//
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 25faa4cbe1a955..7fa5e6a3d30808 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
@@ -46737,6 +46737,7 @@ class SubscribeAttributeTonerCartridgeMonitoringClusterRevision : public Subscri
| * SetCredential | 0x22 |
| * GetCredentialStatus | 0x24 |
| * ClearCredential | 0x26 |
+| * UnboltDoor | 0x27 |
|------------------------------------------------------------------------------|
| Attributes: | |
| * LockState | 0x0000 |
@@ -47715,6 +47716,54 @@ class DoorLockClearCredential : public ClusterCommand {
mComplex_Credential;
};
+/*
+ * Command UnboltDoor
+ */
+class DoorLockUnboltDoor : public ClusterCommand {
+public:
+ DoorLockUnboltDoor()
+ : ClusterCommand("unbolt-door")
+ {
+ AddArgument("PINCode", &mRequest.PINCode);
+ ClusterCommand::AddArguments();
+ }
+
+ CHIP_ERROR SendCommand(MTRBaseDevice * device, chip::EndpointId endpointId) override
+ {
+ ChipLogProgress(chipTool, "Sending cluster (0x00000101) command (0x00000027) on endpoint %u", endpointId);
+
+ dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.command", DISPATCH_QUEUE_SERIAL);
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(endpointId) queue:callbackQueue];
+ __auto_type * params = [[MTRDoorLockClusterUnboltDoorParams alloc] init];
+ params.timedInvokeTimeoutMs
+ = mTimedInteractionTimeoutMs.HasValue() ? [NSNumber numberWithUnsignedShort:mTimedInteractionTimeoutMs.Value()] : nil;
+ if (mRequest.PINCode.HasValue()) {
+ params.pinCode = [NSData dataWithBytes:mRequest.PINCode.Value().data() length:mRequest.PINCode.Value().size()];
+ } else {
+ params.pinCode = nil;
+ }
+ uint16_t repeatCount = mRepeatCount.ValueOr(1);
+ uint16_t __block responsesNeeded = repeatCount;
+ while (repeatCount--) {
+ [cluster unboltDoorWithParams:params
+ completion:^(NSError * _Nullable error) {
+ responsesNeeded--;
+ if (error != nil) {
+ mError = error;
+ LogNSError("Error", error);
+ }
+ if (responsesNeeded == 0) {
+ SetCommandExitStatus(mError);
+ }
+ }];
+ }
+ return CHIP_NO_ERROR;
+ }
+
+private:
+ chip::app::Clusters::DoorLock::Commands::UnboltDoor::Type mRequest;
+};
+
/*
* Attribute LockState
*/
@@ -108484,6 +108533,7 @@ void registerClusterDoorLock(Commands & commands)
make_unique(), //
make_unique(), //
make_unique(), //
+ make_unique(), //
make_unique(Id), //
make_unique(), //
make_unique(Id), //