29
29
30
30
#include < lib/core/CHIPError.h>
31
31
32
- using namespace ::chip;
32
+ namespace EFR32DoorLock {
33
+ namespace ResourceRanges {
34
+ // Used to size arrays
35
+ static constexpr uint16_t kMaxUsers = 10 ;
36
+ static constexpr uint8_t kMaxCredentialsPerUser = 10 ;
37
+ static constexpr uint8_t kMaxWeekdaySchedulesPerUser = 10 ;
38
+ static constexpr uint8_t kMaxYeardaySchedulesPerUser = 10 ;
39
+ static constexpr uint8_t kMaxHolidaySchedules = 10 ;
40
+ static constexpr uint8_t kMaxCredentialSize = 8 ;
41
+
42
+ // Indices received for user/credential/schedules are 1-indexed
43
+ static constexpr uint8_t kStartIndexValue = 1 ;
33
44
34
- // Currently up to 10 users are support on the EFR32 platform
35
- #define DOOR_LOCK_MAX_USERS 10
36
- #define DOOR_LOCK_MAX_CREDENTIAL_SIZE 8
37
- #define MININUM_USER_INDEX 1
38
- #define MINIMUM_CREDENTIAL_INDEX 1
39
- #define MAX_CREDENTIAL_PER_USER 10
40
- #define MAX_CREDENTIALS 50
45
+ static constexpr uint8_t kMaxCredentials = kMaxUsers * kMaxCredentialsPerUser ;
46
+ } // namespace ResourceRanges
41
47
42
- static constexpr size_t DOOR_LOCK_CREDENTIAL_INFO_MAX_DATA_SIZE = 20 ;
48
+ namespace LockInitParams {
49
+
50
+ struct LockParam
51
+ {
52
+ // Read from zap attributes
53
+ uint16_t numberOfUsers = 0 ;
54
+ uint8_t numberOfCredentialsPerUser = 0 ;
55
+ uint8_t numberOfWeekdaySchedulesPerUser = 0 ;
56
+ uint8_t numberOfYeardaySchedulesPerUser = 0 ;
57
+ uint8_t numberOfHolidaySchedules = 0 ;
58
+ };
59
+
60
+ class ParamBuilder
61
+ {
62
+ public:
63
+ ParamBuilder & SetNumberOfUsers (uint16_t numberOfUsers)
64
+ {
65
+ lockParam_.numberOfUsers = numberOfUsers;
66
+ return *this ;
67
+ }
68
+ ParamBuilder & SetNumberOfCredentialsPerUser (uint8_t numberOfCredentialsPerUser)
69
+ {
70
+ lockParam_.numberOfCredentialsPerUser = numberOfCredentialsPerUser;
71
+ return *this ;
72
+ }
73
+ ParamBuilder & SetNumberOfWeekdaySchedulesPerUser (uint8_t numberOfWeekdaySchedulesPerUser)
74
+ {
75
+ lockParam_.numberOfWeekdaySchedulesPerUser = numberOfWeekdaySchedulesPerUser;
76
+ return *this ;
77
+ }
78
+ ParamBuilder & SetNumberOfYeardaySchedulesPerUser (uint8_t numberOfYeardaySchedulesPerUser)
79
+ {
80
+ lockParam_.numberOfYeardaySchedulesPerUser = numberOfYeardaySchedulesPerUser;
81
+ return *this ;
82
+ }
83
+ ParamBuilder & SetNumberOfHolidaySchedules (uint8_t numberOfHolidaySchedules)
84
+ {
85
+ lockParam_.numberOfHolidaySchedules = numberOfHolidaySchedules;
86
+ return *this ;
87
+ }
88
+ LockParam GetLockParam () { return lockParam_; }
89
+
90
+ private:
91
+ LockParam lockParam_;
92
+ };
93
+
94
+ } // namespace LockInitParams
95
+ } // namespace EFR32DoorLock
96
+
97
+ using namespace ::chip;
98
+ using namespace EFR32DoorLock ::ResourceRanges;
43
99
44
100
class LockManager
45
101
{
@@ -61,7 +117,7 @@ class LockManager
61
117
} State;
62
118
63
119
CHIP_ERROR Init (chip::app::DataModel::Nullable<chip::app::Clusters::DoorLock::DlLockState> state,
64
- uint8_t maxNumberOfCredentialsPerUser, uint16_t numberOfSupportedUsers );
120
+ EFR32DoorLock::LockInitParams::LockParam lockParam );
65
121
bool NextState ();
66
122
bool IsActionInProgress ();
67
123
bool InitiateAction (int32_t aActor, Action_t aAction);
@@ -73,17 +129,40 @@ class LockManager
73
129
bool Lock (chip::EndpointId endpointId, const Optional<chip::ByteSpan> & pin, DlOperationError & err);
74
130
bool Unlock (chip::EndpointId endpointId, const Optional<chip::ByteSpan> & pin, DlOperationError & err);
75
131
76
- bool GetUser (chip::EndpointId endpointId, uint16_t userIndex, EmberAfPluginDoorLockUserInfo & user) const ;
132
+ bool GetUser (chip::EndpointId endpointId, uint16_t userIndex, EmberAfPluginDoorLockUserInfo & user);
77
133
bool SetUser (chip::EndpointId endpointId, uint16_t userIndex, chip::FabricIndex creator, chip::FabricIndex modifier,
78
134
const chip::CharSpan & userName, uint32_t uniqueId, DlUserStatus userStatus, DlUserType usertype,
79
135
DlCredentialRule credentialRule, const DlCredential * credentials, size_t totalCredentials);
80
136
81
137
bool GetCredential (chip::EndpointId endpointId, uint16_t credentialIndex, DlCredentialType credentialType,
82
- EmberAfPluginDoorLockCredentialInfo & credential) const ;
138
+ EmberAfPluginDoorLockCredentialInfo & credential);
83
139
84
140
bool SetCredential (chip::EndpointId endpointId, uint16_t credentialIndex, chip::FabricIndex creator, chip::FabricIndex modifier,
85
141
DlCredentialStatus credentialStatus, DlCredentialType credentialType, const chip::ByteSpan & credentialData);
86
142
143
+ DlStatus GetWeekdaySchedule (chip::EndpointId endpointId, uint8_t weekdayIndex, uint16_t userIndex,
144
+ EmberAfPluginDoorLockWeekDaySchedule & schedule);
145
+
146
+ DlStatus SetWeekdaySchedule (chip::EndpointId endpointId, uint8_t weekdayIndex, uint16_t userIndex, DlScheduleStatus status,
147
+ DlDaysMaskMap daysMask, uint8_t startHour, uint8_t startMinute, uint8_t endHour, uint8_t endMinute);
148
+
149
+ DlStatus GetYeardaySchedule (chip::EndpointId endpointId, uint8_t yearDayIndex, uint16_t userIndex,
150
+ EmberAfPluginDoorLockYearDaySchedule & schedule);
151
+
152
+ DlStatus SetYeardaySchedule (chip::EndpointId endpointId, uint8_t yearDayIndex, uint16_t userIndex, DlScheduleStatus status,
153
+ uint32_t localStartTime, uint32_t localEndTime);
154
+
155
+ DlStatus GetHolidaySchedule (chip::EndpointId endpointId, uint8_t holidayIndex, EmberAfPluginDoorLockHolidaySchedule & schedule);
156
+
157
+ DlStatus SetHolidaySchedule (chip::EndpointId endpointId, uint8_t holidayIndex, DlScheduleStatus status, uint32_t localStartTime,
158
+ uint32_t localEndTime, DlOperatingMode operatingMode);
159
+
160
+ bool IsValidUserIndex (uint16_t userIndex);
161
+ bool IsValidCredentialIndex (uint16_t credentialIndex, DlCredentialType type);
162
+ bool IsValidWeekdayScheduleIndex (uint8_t scheduleIndex);
163
+ bool IsValidYeardayScheduleIndex (uint8_t scheduleIndex);
164
+ bool IsValidHolidayScheduleIndex (uint8_t scheduleIndex);
165
+
87
166
bool setLockState (chip::EndpointId endpointId, DlLockState lockState, const Optional<chip::ByteSpan> & pin,
88
167
DlOperationError & err);
89
168
const char * lockStateToString (DlLockState lockState) const ;
@@ -105,17 +184,18 @@ class LockManager
105
184
static void AutoLockTimerEventHandler (AppEvent * aEvent);
106
185
static void ActuatorMovementTimerEventHandler (AppEvent * aEvent);
107
186
108
- EmberAfPluginDoorLockUserInfo mLockUsers [DOOR_LOCK_MAX_USERS ];
109
- EmberAfPluginDoorLockCredentialInfo mLockCredentials [MAX_CREDENTIALS ];
110
-
111
- uint8_t mMaxCredentialsPerUser ;
112
- uint16_t mMaxUsers ;
187
+ EmberAfPluginDoorLockUserInfo mLockUsers [kMaxUsers ];
188
+ EmberAfPluginDoorLockCredentialInfo mLockCredentials [kMaxCredentials ];
189
+ EmberAfPluginDoorLockWeekDaySchedule mWeekdaySchedule [ kMaxUsers ][ kMaxWeekdaySchedulesPerUser ];
190
+ EmberAfPluginDoorLockYearDaySchedule mYeardaySchedule [ kMaxUsers ][ kMaxYeardaySchedulesPerUser ] ;
191
+ EmberAfPluginDoorLockHolidaySchedule mHolidaySchedule [ kMaxHolidaySchedules ] ;
113
192
114
193
char mUserNames [ArraySize(mLockUsers )][DOOR_LOCK_MAX_USER_NAME_SIZE];
115
- uint8_t mCredentialData [MAX_CREDENTIALS][DOOR_LOCK_MAX_CREDENTIAL_SIZE ];
116
- chip::Platform::ScopedMemoryBuffer< DlCredential> mCredentials [MAX_CREDENTIAL_PER_USER ];
194
+ uint8_t mCredentialData [kMaxCredentials ][ kMaxCredentialSize ];
195
+ DlCredential mCredentials [kMaxUsers ][ kMaxCredentialsPerUser ];
117
196
118
197
static LockManager sLock ;
198
+ EFR32DoorLock::LockInitParams::LockParam LockParams;
119
199
};
120
200
121
201
inline LockManager & LockMgr ()
0 commit comments