Skip to content

Commit 177a9f6

Browse files
committed
[nrf noup] [nrfconnect] Minor Wi-Fi refinements
* error code handling unification * added GetWantedNetwork getter and use it when handling network status change * minor refactoring Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>
1 parent 7653e6c commit 177a9f6

File tree

4 files changed

+48
-30
lines changed

4 files changed

+48
-30
lines changed

src/platform/nrfconnect/wifi/NrfWiFiDriver.cpp

+25-10
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ CHIP_ERROR NrfWiFiDriver::Init(NetworkStatusChangeCallback * networkStatusChange
103103

104104
if (mStagingNetwork.IsConfigured())
105105
{
106-
WiFiManager::ConnectionHandling handling{ [](int connStatus) { Instance().OnNetworkStatusChanged(connStatus); },
106+
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
107+
Instance().OnNetworkConnStatusChanged(connStatus);
108+
},
107109
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };
108110
ReturnErrorOnFailure(
109111
WiFiManager::Instance().Connect(mStagingNetwork.GetSsidSpan(), mStagingNetwork.GetPassSpan(), handling));
@@ -112,8 +114,9 @@ CHIP_ERROR NrfWiFiDriver::Init(NetworkStatusChangeCallback * networkStatusChange
112114
return CHIP_NO_ERROR;
113115
}
114116

115-
void NrfWiFiDriver::OnNetworkStatusChanged(int connStatus)
117+
void NrfWiFiDriver::OnNetworkConnStatusChanged(const wifi_conn_status & connStatus)
116118
{
119+
// TODO: check if we can report more accurate errors
117120
Status status = connStatus ? Status::kUnknownError : Status::kSuccess;
118121

119122
if (status == Status::kSuccess)
@@ -127,8 +130,17 @@ void NrfWiFiDriver::OnNetworkStatusChanged(int connStatus)
127130

128131
if (CHIP_NO_ERROR == WiFiManager::Instance().GetWiFiInfo(wifiInfo))
129132
{
130-
mpNetworkStatusChangeCallback->OnNetworkingStatusChange(status,
131-
MakeOptional(ByteSpan(wifiInfo.mSsid, wifiInfo.mSsidLen)),
133+
mpNetworkStatusChangeCallback->OnNetworkingStatusChange(
134+
status, MakeOptional(ByteSpan(wifiInfo.mSsid, wifiInfo.mSsidLen)),
135+
connStatus ? MakeOptional(static_cast<int32_t>(connStatus)) : NullOptional);
136+
}
137+
else
138+
{
139+
WiFiManager::WiFiNetwork wantedWifiInfo;
140+
WiFiManager::Instance().GetWantedNetwork(wantedWifiInfo);
141+
142+
mpNetworkStatusChangeCallback->OnNetworkingStatusChange(
143+
status, MakeOptional(ByteSpan(wantedWifiInfo.ssid, wantedWifiInfo.ssidLen)),
132144
connStatus ? MakeOptional(connStatus) : NullOptional);
133145
}
134146
}
@@ -172,7 +184,9 @@ CHIP_ERROR NrfWiFiDriver::RevertConfiguration()
172184

173185
if (mStagingNetwork.IsConfigured())
174186
{
175-
WiFiManager::ConnectionHandling handling{ [](int connStatus) { Instance().OnNetworkStatusChanged(connStatus); },
187+
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
188+
Instance().OnNetworkConnStatusChanged(connStatus);
189+
},
176190
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };
177191
ReturnErrorOnFailure(
178192
WiFiManager::Instance().Connect(mStagingNetwork.GetSsidSpan(), mStagingNetwork.GetPassSpan(), handling));
@@ -225,7 +239,9 @@ Status NrfWiFiDriver::ReorderNetwork(ByteSpan networkId, uint8_t index, MutableC
225239
void NrfWiFiDriver::ConnectNetwork(ByteSpan networkId, ConnectCallback * callback)
226240
{
227241
Status status = Status::kSuccess;
228-
WiFiManager::ConnectionHandling handling{ [](int connStatus) { Instance().OnNetworkStatusChanged(connStatus); },
242+
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
243+
Instance().OnNetworkConnStatusChanged(connStatus);
244+
},
229245
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };
230246

231247
VerifyOrExit(mpConnectCallback == nullptr, status = Status::kUnknownError);
@@ -255,11 +271,10 @@ void NrfWiFiDriver::LoadFromStorage()
255271
mStagingNetwork = network;
256272
}
257273

258-
void NrfWiFiDriver::OnScanWiFiNetworkDone(const wifi_status & status)
274+
void NrfWiFiDriver::OnScanWiFiNetworkDone(const WiFiManager::ScanDoneStatus & status)
259275
{
260276
VerifyOrReturn(mScanCallback != nullptr);
261-
mScanCallback->OnFinished(status.status ? Status::kUnknownError : Status::kSuccess,
262-
CharSpan(), &mScanResponseIterator);
277+
mScanCallback->OnFinished(status ? Status::kUnknownError : Status::kSuccess, CharSpan(), &mScanResponseIterator);
263278
mScanCallback = nullptr;
264279
}
265280

@@ -273,7 +288,7 @@ void NrfWiFiDriver::ScanNetworks(ByteSpan ssid, WiFiDriver::ScanCallback * callb
273288
mScanCallback = callback;
274289
CHIP_ERROR error = WiFiManager::Instance().Scan(
275290
ssid, [](const WiFiScanResponse & response) { Instance().OnScanWiFiNetworkResult(response); },
276-
[](const wifi_status & status) { Instance().OnScanWiFiNetworkDone(status); });
291+
[](const WiFiManager::ScanDoneStatus & status) { Instance().OnScanWiFiNetworkDone(status); });
277292

278293
if (error != CHIP_NO_ERROR)
279294
{

src/platform/nrfconnect/wifi/NrfWiFiDriver.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ class NrfWiFiDriver final : public WiFiDriver
9393
return sInstance;
9494
}
9595

96-
void OnNetworkStatusChanged(int status);
96+
void OnNetworkConnStatusChanged(const wifi_conn_status & connStatus);
9797
void OnScanWiFiNetworkResult(const WiFiScanResponse & result);
98-
void OnScanWiFiNetworkDone(const wifi_status & status);
98+
void OnScanWiFiNetworkDone(const WiFiManager::ScanDoneStatus & status);
9999

100100
private:
101101
void LoadFromStorage();

src/platform/nrfconnect/wifi/WiFiManager.cpp

+17-16
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,7 @@ CHIP_ERROR WiFiManager::Connect(const ByteSpan & ssid, const ByteSpan & credenti
210210
{
211211
ChipLogDetail(DeviceLayer, "Connecting to WiFi network: %*s", ssid.size(), ssid.data());
212212

213-
mHandling.mOnConnectionDone = handling.mOnConnectionDone;
214-
mHandling.mConnectionTimeout = handling.mConnectionTimeout;
213+
mHandling = handling;
215214

216215
mWiFiState = WIFI_STATE_ASSOCIATING;
217216

@@ -342,21 +341,22 @@ void WiFiManager::ScanDoneHandler(Platform::UniquePtr<uint8_t> data)
342341
{
343342
CHIP_ERROR err = SystemLayer().ScheduleLambda([capturedData = data.get()] {
344343
Platform::UniquePtr<uint8_t> safePtr(capturedData);
345-
uint8_t * rawData = safePtr.get();
346-
const wifi_status * status = reinterpret_cast<const wifi_status *>(rawData);
344+
uint8_t * rawData = safePtr.get();
345+
const wifi_status * status = reinterpret_cast<const wifi_status *>(rawData);
346+
ScanDoneStatus scanDoneStatus = status->status;
347347

348-
if (status->status)
348+
if (scanDoneStatus)
349349
{
350-
ChipLogError(DeviceLayer, "Wi-Fi scan finalization failure (%d)", status->status);
350+
ChipLogError(DeviceLayer, "Wi-Fi scan finalization failure (%d)", scanDoneStatus);
351351
}
352352
else
353353
{
354-
ChipLogProgress(DeviceLayer, "Wi-Fi scan done (%d)", status->status);
354+
ChipLogProgress(DeviceLayer, "Wi-Fi scan done");
355355
}
356356

357357
if (Instance().mScanDoneCallback && !Instance().mInternalScan)
358358
{
359-
Instance().mScanDoneCallback(*status);
359+
Instance().mScanDoneCallback(scanDoneStatus);
360360
// restore the connection state from before the scan request was issued
361361
Instance().mWiFiState = Instance().mCachedWiFiState;
362362
return;
@@ -377,13 +377,13 @@ void WiFiManager::ScanDoneHandler(Platform::UniquePtr<uint8_t> data)
377377

378378
Instance().mWiFiState = WIFI_STATE_ASSOCIATING;
379379

380-
if (int connStatus = net_mgmt(NET_REQUEST_WIFI_CONNECT, Instance().mNetIf, &(Instance().mWiFiParams.mParams),
381-
sizeof(wifi_connect_req_params)))
380+
if (net_mgmt(NET_REQUEST_WIFI_CONNECT, Instance().mNetIf, &(Instance().mWiFiParams.mParams),
381+
sizeof(wifi_connect_req_params)))
382382
{
383383
ChipLogError(DeviceLayer, "Connection request failed");
384384
if (Instance().mHandling.mOnConnectionDone)
385385
{
386-
Instance().mHandling.mOnConnectionDone(connStatus);
386+
Instance().mHandling.mOnConnectionDone(WIFI_STATUS_CONN_FAIL);
387387
}
388388
Instance().mWiFiState = WIFI_STATE_DISCONNECTED;
389389
return;
@@ -420,16 +420,17 @@ void WiFiManager::ConnectHandler(Platform::UniquePtr<uint8_t> data)
420420
{
421421
CHIP_ERROR err = SystemLayer().ScheduleLambda([capturedData = data.get()] {
422422
Platform::UniquePtr<uint8_t> safePtr(capturedData);
423-
uint8_t * rawData = safePtr.get();
424-
const wifi_status * status = reinterpret_cast<const wifi_status *>(rawData);
423+
uint8_t * rawData = safePtr.get();
424+
const wifi_status * status = reinterpret_cast<const wifi_status *>(rawData);
425+
wifi_conn_status connStatus = status->conn_status;
425426

426-
if (status->status)
427+
if (connStatus)
427428
{
428429
ChipLogProgress(DeviceLayer, "Connection to WiFi network failed or was terminated by another request");
429430
Instance().mWiFiState = WIFI_STATE_DISCONNECTED;
430431
if (Instance().mHandling.mOnConnectionDone)
431432
{
432-
Instance().mHandling.mOnConnectionDone(status->status);
433+
Instance().mHandling.mOnConnectionDone(connStatus);
433434
}
434435
}
435436
else // The connection has been established successfully.
@@ -443,7 +444,7 @@ void WiFiManager::ConnectHandler(Platform::UniquePtr<uint8_t> data)
443444
Instance().mWiFiState = WIFI_STATE_COMPLETED;
444445
if (Instance().mHandling.mOnConnectionDone)
445446
{
446-
Instance().mHandling.mOnConnectionDone(status->status);
447+
Instance().mHandling.mOnConnectionDone(connStatus);
447448
}
448449
Instance().PostConnectivityStatusChange(kConnectivity_Established);
449450

src/platform/nrfconnect/wifi/WiFiManager.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,10 @@ class Map
8888
class WiFiManager
8989
{
9090
public:
91+
using ScanDoneStatus = decltype(wifi_status::status);
9192
using ScanResultCallback = void (*)(const NetworkCommissioning::WiFiScanResponse &);
92-
using ScanDoneCallback = void (*)(const wifi_status &);
93-
using ConnectionCallback = void (*)(int);
93+
using ScanDoneCallback = void (*)(const ScanDoneStatus &);
94+
using ConnectionCallback = void (*)(const wifi_conn_status &);
9495

9596
enum class StationStatus : uint8_t
9697
{
@@ -174,6 +175,7 @@ class WiFiManager
174175
CHIP_ERROR ClearStationProvisioningData();
175176
CHIP_ERROR Disconnect();
176177
CHIP_ERROR GetWiFiInfo(WiFiInfo & info) const;
178+
const WiFiNetwork & GetWantedNetwork(WiFiNetwork & info) const { return mWantedNetwork; }
177179
CHIP_ERROR GetNetworkStatistics(NetworkStatistics & stats) const;
178180
void AbortConnectionRecovery();
179181
CHIP_ERROR SetLowPowerMode(bool onoff);

0 commit comments

Comments
 (0)