-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Door Lock management to all clusters app. (#16687)
- Loading branch information
Showing
4 changed files
with
99 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#include <app/clusters/door-lock-server/door-lock-server.h> | ||
#include <app/util/af.h> | ||
|
||
#include "LockManager.h" | ||
|
||
using namespace chip; | ||
using namespace chip::app::Clusters; | ||
using namespace chip::app::Clusters::DoorLock; | ||
// App handles physical aspects of locking but not locking logic. That is it | ||
// should wait for door to be locked on lock command and return success) but | ||
// door lock server should check pin before even calling the lock-door | ||
// callback. | ||
bool emberAfPluginDoorLockOnDoorLockCommand(chip::EndpointId endpointId, const Optional<ByteSpan> & pinCode, DlOperationError & err) | ||
{ | ||
return LockManager::Instance().Lock(endpointId, pinCode, err); | ||
} | ||
|
||
bool emberAfPluginDoorLockOnDoorUnlockCommand(chip::EndpointId endpointId, const Optional<ByteSpan> & pinCode, | ||
DlOperationError & err) | ||
{ | ||
return LockManager::Instance().Unlock(endpointId, pinCode, err); | ||
} | ||
|
||
bool emberAfPluginDoorLockGetUser(chip::EndpointId endpointId, uint16_t userIndex, EmberAfPluginDoorLockUserInfo & user) | ||
{ | ||
return LockManager::Instance().GetUser(endpointId, userIndex, user); | ||
} | ||
|
||
bool emberAfPluginDoorLockSetUser(chip::EndpointId endpointId, uint16_t userIndex, chip::FabricIndex creator, | ||
chip::FabricIndex modifier, const chip::CharSpan & userName, uint32_t uniqueId, | ||
DlUserStatus userStatus, DlUserType usertype, DlCredentialRule credentialRule, | ||
const DlCredential * credentials, size_t totalCredentials) | ||
{ | ||
|
||
return LockManager::Instance().SetUser(endpointId, userIndex, creator, modifier, userName, uniqueId, userStatus, usertype, | ||
credentialRule, credentials, totalCredentials); | ||
} | ||
|
||
bool emberAfPluginDoorLockGetCredential(chip::EndpointId endpointId, uint16_t credentialIndex, DlCredentialType credentialType, | ||
EmberAfPluginDoorLockCredentialInfo & credential) | ||
{ | ||
return LockManager::Instance().GetCredential(endpointId, credentialIndex, credentialType, credential); | ||
} | ||
|
||
bool emberAfPluginDoorLockSetCredential(chip::EndpointId endpointId, uint16_t credentialIndex, DlCredentialStatus credentialStatus, | ||
DlCredentialType credentialType, const chip::ByteSpan & credentialData) | ||
{ | ||
return LockManager::Instance().SetCredential(endpointId, credentialIndex, credentialStatus, credentialType, credentialData); | ||
} | ||
|
||
DlStatus emberAfPluginDoorLockGetSchedule(chip::EndpointId endpointId, uint8_t weekdayIndex, uint16_t userIndex, | ||
EmberAfPluginDoorLockWeekDaySchedule & schedule) | ||
{ | ||
return LockManager::Instance().GetSchedule(endpointId, weekdayIndex, userIndex, schedule); | ||
} | ||
|
||
DlStatus emberAfPluginDoorLockSetSchedule(chip::EndpointId endpointId, uint8_t weekdayIndex, uint16_t userIndex, | ||
DlScheduleStatus status, DlDaysMaskMap daysMask, uint8_t startHour, uint8_t startMinute, | ||
uint8_t endHour, uint8_t endMinute) | ||
{ | ||
return LockManager::Instance().SetSchedule(endpointId, weekdayIndex, userIndex, status, daysMask, startHour, startMinute, | ||
endHour, endMinute); | ||
} | ||
|
||
DlStatus emberAfPluginDoorLockSetSchedule(chip::EndpointId endpointId, uint8_t yearDayIndex, uint16_t userIndex, | ||
DlScheduleStatus status, uint32_t localStartTime, uint32_t localEndTime) | ||
{ | ||
return LockManager::Instance().SetSchedule(endpointId, yearDayIndex, userIndex, status, localStartTime, localEndTime); | ||
} | ||
|
||
DlStatus emberAfPluginDoorLockGetSchedule(chip::EndpointId endpointId, uint8_t yearDayIndex, uint16_t userIndex, | ||
EmberAfPluginDoorLockYearDaySchedule & schedule) | ||
{ | ||
return LockManager::Instance().GetSchedule(endpointId, yearDayIndex, userIndex, schedule); | ||
} | ||
|
||
void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & attributePath, uint8_t mask, uint8_t type, | ||
uint16_t size, uint8_t * value) | ||
{ | ||
// TODO: Watch for LockState, DoorState, Mode, etc changes and trigger appropriate action | ||
if (attributePath.mClusterId == DoorLock::Id) | ||
{ | ||
emberAfDoorLockClusterPrintln("Door Lock attribute changed"); | ||
} | ||
} | ||
|
||
void emberAfDoorLockClusterInitCallback(EndpointId endpoint) | ||
{ | ||
DoorLockServer::Instance().InitServer(endpoint); | ||
LockManager::Instance().InitEndpoint(endpoint); | ||
} |