@@ -188,6 +188,13 @@ CHIP_ERROR WiFiManager::Scan(const ByteSpan & ssid, ScanResultCallback resultCal
188
188
mWiFiState = WIFI_STATE_SCANNING;
189
189
mSsidFound = false ;
190
190
191
+ if ((ssid.size () > 0 ) && (!mInternalScan ))
192
+ {
193
+ mDirectScanNetwork .Erase ();
194
+ memcpy (mDirectScanNetwork .ssid , ssid.data (), ssid.size ());
195
+ mDirectScanNetwork .ssidLen = ssid.size ();
196
+ }
197
+
191
198
if (0 != net_mgmt (NET_REQUEST_WIFI_SCAN, mNetIf , NULL , 0 ))
192
199
{
193
200
ChipLogError (DeviceLayer, " Scan request failed" );
@@ -334,7 +341,14 @@ void WiFiManager::ScanResultHandler(Platform::UniquePtr<uint8_t> data)
334
341
335
342
if (Instance ().mScanResultCallback && !Instance ().mInternalScan )
336
343
{
337
- Instance ().mScanResultCallback (ToScanResponse (scanResult));
344
+ if (Instance ().mDirectScanNetwork .GetSsidSpan ().size () == 0 )
345
+ {
346
+ Instance ().mScanResultCallback (ToScanResponse (scanResult));
347
+ }
348
+ else if (Instance ().mDirectScanNetwork .GetSsidSpan ().data_equal (ByteSpan (scanResult->ssid , scanResult->ssid_length )))
349
+ {
350
+ Instance ().mScanResultCallback (ToScanResponse (scanResult));
351
+ }
338
352
}
339
353
}
340
354
@@ -345,6 +359,11 @@ void WiFiManager::ScanDoneHandler(Platform::UniquePtr<uint8_t> data)
345
359
uint8_t * rawData = safePtr.get ();
346
360
const wifi_status * status = reinterpret_cast <const wifi_status *>(rawData);
347
361
362
+ if (Instance ().mDirectScanNetwork .GetSsidSpan ().size () > 0 )
363
+ {
364
+ Instance ().mDirectScanNetwork .Erase ();
365
+ }
366
+
348
367
if (status->status )
349
368
{
350
369
ChipLogError (DeviceLayer, " Wi-Fi scan finalization failure (%d)" , status->status );
@@ -420,8 +439,8 @@ void WiFiManager::ConnectHandler(Platform::UniquePtr<uint8_t> data)
420
439
{
421
440
CHIP_ERROR err = SystemLayer ().ScheduleLambda ([capturedData = data.get ()] {
422
441
Platform::UniquePtr<uint8_t > safePtr (capturedData);
423
- uint8_t * rawData = safePtr.get ();
424
- const wifi_status * status = reinterpret_cast <const wifi_status *>(rawData);
442
+ uint8_t * rawData = safePtr.get ();
443
+ const wifi_status * status = reinterpret_cast <const wifi_status *>(rawData);
425
444
426
445
if (status->status )
427
446
{
0 commit comments