@@ -211,14 +211,14 @@ void BLWiFiDriver::ScanNetworks(ByteSpan ssid, WiFiDriver::ScanCallback * callba
211
211
{
212
212
if (callback != nullptr )
213
213
{
214
- ChipLogError (NetworkProvisioning, " ssid.data(): %s" , ssid.data ());
215
-
216
214
if (ssid.data ())
217
215
{
218
216
memset (mScanSSID , 0 , sizeof (mScanSSID ));
219
217
memcpy (mScanSSID , ssid.data (), ssid.size ());
220
218
mScanSpecific = true ;
221
219
}
220
+
221
+ mScanResponseNum = 0 ;
222
222
mpScanCallback = callback;
223
223
wifiInterface_startScan ();
224
224
}
@@ -229,81 +229,97 @@ void BLWiFiDriver::OnScanWiFiNetworkDone(void * opaque)
229
229
netbus_wifi_mgmr_msg_cmd_t * pkg_data = (netbus_wifi_mgmr_msg_cmd_t *) ((struct pkg_protocol *) opaque)->payload ;
230
230
netbus_fs_scan_ind_cmd_msg_t * pmsg = (netbus_fs_scan_ind_cmd_msg_t *) ((netbus_fs_scan_ind_cmd_msg_t *) pkg_data);
231
231
232
- size_t i = 0 , ap_num = 0 ;
232
+ size_t i = 0 , ap_num = 0 , ap_cnt = 0 ;
233
233
WiFiScanResponse *pScanResponse, *p;
234
234
235
- for (i = 0 ; i < pmsg->num ; i++)
236
- {
237
- ChipLogProgress (DeviceLayer, " OnScanWiFiNetworkDone %s " , pmsg-> records [i]. ssid );
238
- if ( mScanSpecific && ! strcmp ( mScanSSID , ( char *) ( pmsg->records [i]. ssid )) )
235
+ ChipLogProgress (DeviceLayer, " expected ssid %s. get %d in total, %d " , mScanSSID , pmsg->num , mScanSpecific );
236
+
237
+ if ( mScanSpecific ) {
238
+ for (i = 0 ; i < pmsg->num ; i++ )
239
239
{
240
- ap_num = 1 ;
241
- break ;
240
+ if (mScanSpecific && !strcmp (mScanSSID , (char *) (pmsg->records [i].ssid )))
241
+ {
242
+ ap_num = 1 ;
243
+ break ;
244
+ }
242
245
}
243
246
}
247
+ else {
248
+ ap_num = pmsg->num ;
249
+ }
244
250
245
- if (0 == pmsg-> num || ( mScanSpecific && 0 == ap_num) )
251
+ if (ap_num)
246
252
{
247
- ChipLogProgress (DeviceLayer, " No AP found" );
248
- if (mpScanCallback != nullptr )
253
+ p = mScanResponse = (WiFiScanResponse *) malloc (sizeof (WiFiScanResponse) * ap_num);
254
+ if (mScanResponse == nullptr ) {
255
+ return ;
256
+ }
257
+
258
+ for (i = 0 ; i < pmsg->num ; i++)
249
259
{
250
- mpScanCallback->OnFinished (Status::kSuccess , CharSpan (), nullptr );
251
- mpScanCallback = nullptr ;
260
+ if (mScanSpecific && strcmp (mScanSSID , (char *) (pmsg->records [i].ssid )))
261
+ {
262
+ continue ;
263
+ }
264
+
265
+ p->security .SetRaw (pmsg->records [i].auth_mode );
266
+ p->ssidLen = strlen ((char *) pmsg->records [i].ssid ) < chip::DeviceLayer::Internal::kMaxWiFiSSIDLength
267
+ ? strlen ((char *) pmsg->records [i].ssid )
268
+ : chip::DeviceLayer::Internal::kMaxWiFiSSIDLength ;
269
+ p->channel = pmsg->records [i].channel ;
270
+ p->wiFiBand = chip::DeviceLayer::NetworkCommissioning::WiFiBand::k2g4;
271
+ p->rssi = pmsg->records [i].rssi ;
272
+ memcpy (p->ssid , pmsg->records [i].ssid , p->ssidLen );
273
+ memcpy (p->bssid , pmsg->records [i].bssid , 6 );
274
+
275
+ p++;
276
+ ap_cnt ++;
277
+
278
+ if (ap_cnt >= ap_num) {
279
+ break ;
280
+ }
252
281
}
253
- return ;
254
282
}
255
283
256
- if (ap_num)
257
- {
258
- p = pScanResponse = (WiFiScanResponse *) malloc (sizeof (WiFiScanResponse) * ap_num);
259
- }
260
- else
261
- {
262
- p = pScanResponse = (WiFiScanResponse *) malloc (sizeof (WiFiScanResponse) * pmsg->num );
263
- ap_num = pmsg->num ;
264
- }
265
- for (i = 0 ; i < pmsg->num ; i++)
284
+ mScanResponseNum = ap_cnt;
285
+ }
286
+
287
+ void BLWiFiDriver::OnScanWiFiNetworkDone (void )
288
+ {
289
+ size_t ap_cnt = mScanResponseNum ;
290
+ WiFiScanResponse *pScanResponse = mScanResponse ;
291
+
292
+ if (mScanResponse )
266
293
{
267
- if (mScanSpecific && strcmp (mScanSSID , (char *) (pmsg->records [i].ssid )))
294
+ if (CHIP_NO_ERROR == DeviceLayer::SystemLayer ().ScheduleLambda ([ap_cnt, pScanResponse]() {
295
+ BLScanResponseIterator iter (ap_cnt, pScanResponse);
296
+ if (GetInstance ().mpScanCallback )
297
+ {
298
+ GetInstance ().mpScanCallback ->OnFinished (Status::kSuccess , CharSpan (), &iter);
299
+ GetInstance ().mpScanCallback = nullptr ;
300
+ }
301
+ else
302
+ {
303
+ ChipLogError (DeviceLayer, " can't find the ScanCallback function" );
304
+ }
305
+ }))
268
306
{
269
- continue ;
307
+ ChipLogProgress (DeviceLayer, " ScheduleLambda OK " ) ;
270
308
}
271
309
272
- p->security .SetRaw (pmsg->records [i].auth_mode );
273
- p->ssidLen = strlen ((char *) pmsg->records [i].ssid ) < chip::DeviceLayer::Internal::kMaxWiFiSSIDLength
274
- ? strlen ((char *) pmsg->records [i].ssid )
275
- : chip::DeviceLayer::Internal::kMaxWiFiSSIDLength ;
276
- p->channel = pmsg->records [i].channel ;
277
- p->wiFiBand = chip::DeviceLayer::NetworkCommissioning::WiFiBand::k2g4;
278
- p->rssi = pmsg->records [i].rssi ;
279
- memcpy (p->ssid , pmsg->records [i].ssid , p->ssidLen );
280
- memcpy (p->bssid , pmsg->records [i].bssid , 6 );
281
-
282
- if (mScanSpecific )
310
+ free (mScanResponse );
311
+ mScanResponse = nullptr ;
312
+ }
313
+ else {
314
+ ChipLogProgress (DeviceLayer, " No AP found" );
315
+ if (mpScanCallback != nullptr )
283
316
{
284
- break ;
317
+ mpScanCallback->OnFinished (Status::kSuccess , CharSpan (), nullptr );
318
+ mpScanCallback = nullptr ;
285
319
}
286
-
287
- p++;
288
- }
289
-
290
- if (CHIP_NO_ERROR == DeviceLayer::SystemLayer ().ScheduleLambda ([ap_num, pScanResponse]() {
291
- BLScanResponseIterator iter (ap_num, pScanResponse);
292
- if (GetInstance ().mpScanCallback )
293
- {
294
- GetInstance ().mpScanCallback ->OnFinished (Status::kSuccess , CharSpan (), &iter);
295
- GetInstance ().mpScanCallback = nullptr ;
296
- }
297
- else
298
- {
299
- ChipLogError (DeviceLayer, " can't find the ScanCallback function" );
300
- }
301
- }))
302
- {
303
- ChipLogProgress (DeviceLayer, " ScheduleLambda OK" );
304
320
}
305
321
306
- free (pScanResponse) ;
322
+ mScanResponseNum = 0 ;
307
323
}
308
324
309
325
CHIP_ERROR GetConfiguredNetwork (Network & network)
0 commit comments