@@ -130,9 +130,9 @@ void AppTask::SwitchTransportTriggerHandler(const SwitchButtonAction &action)
130
130
}
131
131
#endif
132
132
133
- void AppTask::LockStateChanged (BoltLockManager::State state, BoltLockManager::OperationSource source )
133
+ void AppTask::LockStateChanged (const BoltLockManager::StateData &stateData )
134
134
{
135
- switch (state) {
135
+ switch (stateData. state ) {
136
136
case BoltLockManager::State::kLockingInitiated :
137
137
LOG_INF (" Lock action initiated" );
138
138
Nrf::GetBoard ().GetLED (Nrf::DeviceLeds::LED2).Blink (50 , 50 );
@@ -164,26 +164,33 @@ void AppTask::LockStateChanged(BoltLockManager::State state, BoltLockManager::Op
164
164
}
165
165
166
166
/* Handle changing attribute state in the application */
167
- Instance ().UpdateClusterState (state, source );
167
+ Instance ().UpdateClusterState (stateData );
168
168
}
169
169
170
- void AppTask::UpdateClusterState (BoltLockManager::State state, BoltLockManager::OperationSource source )
170
+ void AppTask::UpdateClusterState (const BoltLockManager::StateData &stateData )
171
171
{
172
- DlLockState newLockState ;
172
+ BoltLockManager::StateData *stateDataCopy = Platform::New<BoltLockManager::StateData>(stateData) ;
173
173
174
- switch (state) {
175
- case BoltLockManager::State::kLockingCompleted :
176
- newLockState = DlLockState::kLocked ;
177
- break ;
178
- case BoltLockManager::State::kUnlockingCompleted :
179
- newLockState = DlLockState::kUnlocked ;
180
- break ;
181
- default :
182
- newLockState = DlLockState::kNotFullyLocked ;
183
- break ;
174
+ if (stateDataCopy == nullptr ) {
175
+ LOG_ERR (" Failed to allocate memory for BoltLockManager::StateData" );
176
+ return ;
184
177
}
185
178
186
- SystemLayer ().ScheduleLambda ([newLockState, source] {
179
+ SystemLayer ().ScheduleLambda ([stateData = stateDataCopy]() {
180
+ DlLockState newLockState;
181
+
182
+ switch (stateData->state ) {
183
+ case BoltLockManager::State::kLockingCompleted :
184
+ newLockState = DlLockState::kLocked ;
185
+ break ;
186
+ case BoltLockManager::State::kUnlockingCompleted :
187
+ newLockState = DlLockState::kUnlocked ;
188
+ break ;
189
+ default :
190
+ newLockState = DlLockState::kNotFullyLocked ;
191
+ break ;
192
+ }
193
+
187
194
chip::app::DataModel::Nullable<chip::app::Clusters::DoorLock::DlLockState> currentLockState;
188
195
chip::app::Clusters::DoorLock::Attributes::LockState::Get (kLockEndpointId , currentLockState);
189
196
@@ -193,19 +200,33 @@ void AppTask::UpdateClusterState(BoltLockManager::State state, BoltLockManager::
193
200
} else {
194
201
LOG_INF (" Updating LockState attribute" );
195
202
196
- if (!DoorLockServer::Instance ().SetLockState (kLockEndpointId , newLockState, source)) {
203
+ Nullable<uint16_t > userId;
204
+ Nullable<List<const LockOpCredentials>> credentials;
205
+ List<const LockOpCredentials> credentialList;
206
+
207
+ if (!stateData->validatePINResult .IsNull ()) {
208
+ userId = { stateData->validatePINResult .Value ().userId };
209
+ credentialList = { &stateData->validatePINResult .Value ().credential , 1 };
210
+ credentials = { credentialList };
211
+ }
212
+
213
+ if (!DoorLockServer::Instance ().SetLockState (kLockEndpointId , newLockState, stateData->source ,
214
+ userId, credentials, stateData->fabricIdx ,
215
+ stateData->nodeId )) {
197
216
LOG_ERR (" Failed to update LockState attribute" );
198
217
}
199
218
}
219
+
220
+ Platform::Delete (stateData);
200
221
});
201
222
}
202
223
203
224
#ifdef CONFIG_CHIP_NUS
204
225
void AppTask::NUSLockCallback (void *context)
205
226
{
206
227
LOG_DBG (" Received LOCK command from NUS" );
207
- if (BoltLockMgr ().mState == BoltLockManager::State::kLockingCompleted ||
208
- BoltLockMgr ().mState == BoltLockManager::State::kLockingInitiated ) {
228
+ if (BoltLockMgr ().GetState (). state == BoltLockManager::State::kLockingCompleted ||
229
+ BoltLockMgr ().GetState (). state == BoltLockManager::State::kLockingInitiated ) {
209
230
LOG_INF (" Device is already locked" );
210
231
} else {
211
232
Nrf::PostTask ([] { LockActionEventHandler (); });
@@ -215,8 +236,8 @@ void AppTask::NUSLockCallback(void *context)
215
236
void AppTask::NUSUnlockCallback (void *context)
216
237
{
217
238
LOG_DBG (" Received UNLOCK command from NUS" );
218
- if (BoltLockMgr ().mState == BoltLockManager::State::kUnlockingCompleted ||
219
- BoltLockMgr ().mState == BoltLockManager::State::kUnlockingInitiated ) {
239
+ if (BoltLockMgr ().GetState (). state == BoltLockManager::State::kUnlockingCompleted ||
240
+ BoltLockMgr ().GetState (). state == BoltLockManager::State::kUnlockingInitiated ) {
220
241
LOG_INF (" Device is already unlocked" );
221
242
} else {
222
243
Nrf::PostTask ([] { LockActionEventHandler (); });
0 commit comments