From 6d893f4d00d0a802508c30f6c4c546364af5c25c Mon Sep 17 00:00:00 2001 From: Marcin Kajor Date: Thu, 21 Mar 2024 10:36:37 +0100 Subject: [PATCH] [nrf noup] [nfconnet] Wi-FI directed scan implementation This patch implements directed scanning and single ssid scanning during commissioning. Signed-off-by: Marcin Kajor --- src/platform/nrfconnect/wifi/WiFiManager.cpp | 13 ++++++++++++- src/platform/nrfconnect/wifi/WiFiManager.h | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/platform/nrfconnect/wifi/WiFiManager.cpp b/src/platform/nrfconnect/wifi/WiFiManager.cpp index 6e3ff8e473..2232982110 100644 --- a/src/platform/nrfconnect/wifi/WiFiManager.cpp +++ b/src/platform/nrfconnect/wifi/WiFiManager.cpp @@ -188,7 +188,18 @@ CHIP_ERROR WiFiManager::Scan(const ByteSpan & ssid, ScanResultCallback resultCal mWiFiState = WIFI_STATE_SCANNING; mSsidFound = false; - if (0 != net_mgmt(NET_REQUEST_WIFI_SCAN, mNetIf, NULL, 0)) + wifi_scan_params * scanParamsFinal{ nullptr }; + + if (!ssid.empty()) + { + /* We must assume that the ssid is handled as a NULL-terminated string. + Note that the mScanSsidBuffer is initialized with zeros. */ + VerifyOrReturnError(ssid.size() < sizeof(mScanParams), CHIP_ERROR_INVALID_ARGUMENT); + memcpy(mScanSsidBuffer, ssid.data(), ssid.size()); + mScanParams.ssids[0] = mScanSsidBuffer; + scanParamsFinal = &mScanParams; + } + if (0 != net_mgmt(NET_REQUEST_WIFI_SCAN, mNetIf, scanParamsFinal, sizeof(*scanParamsFinal))) { ChipLogError(DeviceLayer, "Scan request failed"); return CHIP_ERROR_INTERNAL; diff --git a/src/platform/nrfconnect/wifi/WiFiManager.h b/src/platform/nrfconnect/wifi/WiFiManager.h index 2694b050ce..5e0dd97064 100644 --- a/src/platform/nrfconnect/wifi/WiFiManager.h +++ b/src/platform/nrfconnect/wifi/WiFiManager.h @@ -220,7 +220,9 @@ class WiFiManager net_if * mNetIf{ nullptr }; ConnectionParams mWiFiParams{}; - ConnectionHandling mHandling; + ConnectionHandling mHandling{}; + wifi_scan_params mScanParams{}; + char mScanSsidBuffer[DeviceLayer::Internal::kMaxWiFiSSIDLength + 1] = { 0 }; wifi_iface_state mWiFiState; wifi_iface_state mCachedWiFiState; net_mgmt_event_callback mWiFiMgmtClbk{};