@@ -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,10 +200,23 @@ 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
+ List<const LockOpCredentials> credentialList;
204
+ Nullable<List<const LockOpCredentials>> credentials;
205
+
206
+ if (!stateData->validatePINResult .IsNull ()) {
207
+ credentialList = { &stateData->validatePINResult .Value ().credential , 1 };
208
+ credentials = { credentialList };
209
+ }
210
+
211
+ if (!DoorLockServer::Instance ().SetLockState (kLockEndpointId , newLockState, stateData->source ,
212
+ stateData->validatePINResult .Value ().userId ,
213
+ credentials, stateData->fabricIdx ,
214
+ stateData->nodeId )) {
197
215
LOG_ERR (" Failed to update LockState attribute" );
198
216
}
199
217
}
218
+
219
+ Platform::Delete (stateData);
200
220
});
201
221
}
202
222
0 commit comments