Skip to content

Commit a3069c5

Browse files
Add some checks to SlWifiDriver usage
1 parent 5fe3e28 commit a3069c5

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

examples/platform/silabs/MatterConfig.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ using namespace ::chip::Credentials;
9999
using namespace chip::DeviceLayer::Silabs;
100100

101101
#ifdef SL_WIFI
102-
app::Clusters::NetworkDriverObj<NetworkCommissioning::SlWiFiDriver> networkDriver(chip::kRootEndpointId);
102+
app::Clusters::NetworkDriverObj<NetworkCommissioning::SlWiFiDriver> wifiNetworkDriver(chip::kRootEndpointId);
103103
#endif /* SL_WIFI */
104104

105105
#if CHIP_ENABLE_OPENTHREAD
@@ -118,7 +118,7 @@ app::Clusters::NetworkDriverObj<NetworkCommissioning::SlWiFiDriver> networkDrive
118118
#include <platform/OpenThread/GenericNetworkCommissioningThreadDriver.h>
119119
#include <platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.h>
120120

121-
app::Clusters::NetworkDriverObj<NetworkCommissioning::GenericThreadDriver> networkDriver(chip::kRootEndpointId);
121+
app::Clusters::NetworkDriverObj<NetworkCommissioning::GenericThreadDriver> threadNetworkDriver(chip::kRootEndpointId);
122122
// ================================================================================
123123
// Matter Networking Callbacks
124124
// ================================================================================
@@ -154,6 +154,8 @@ CHIP_ERROR SilabsMatterConfig::InitOpenThread(void)
154154
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
155155
#endif // CHIP_DEVICE_CONFIG_THREAD_FTD
156156

157+
threadNetworkDriver.Init();
158+
157159
ChipLogProgress(DeviceLayer, "Starting OpenThread task");
158160
return ThreadStackMgrImpl().StartThreadTask();
159161
}
@@ -264,7 +266,6 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
264266
#if CHIP_ENABLE_OPENTHREAD
265267
ReturnErrorOnFailure(InitOpenThread());
266268
#endif
267-
networkDriver.Init();
268269

269270
// Stop Matter event handling while setting up resources
270271
chip::DeviceLayer::PlatformMgr().LockChipStack();
@@ -331,6 +332,7 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
331332
#ifdef SL_WIFI
332333
CHIP_ERROR SilabsMatterConfig::InitWiFi(void)
333334
{
335+
wifiNetworkDriver.Init();
334336
return WifiInterface::GetInstance().InitWiFiStack();
335337
}
336338
#endif // SL_WIFI

src/platform/silabs/ConnectivityManagerImpl_WIFI.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,10 @@ void ConnectivityManagerImpl::DriveStationState()
329329

330330
void ConnectivityManagerImpl::OnStationConnected()
331331
{
332-
NetworkCommissioning::SlWiFiDriver::GetInstance()->OnConnectWiFiNetwork();
332+
SlWiFiDriver * nwDriver = NetworkCommissioning::SlWiFiDriver::GetInstance();
333+
// Cannot use the driver if the instance is not initialized.
334+
VerifyOrDie(nwDriver != nullptr); // should never be null
335+
nwDriver->OnConnectWiFiNetwork();
333336

334337
UpdateInternetConnectivityState();
335338
// Alert other components of the new state.
@@ -361,8 +364,11 @@ void ConnectivityManagerImpl::ChangeWiFiStationState(WiFiStationState newState)
361364
{
362365
ChipLogProgress(DeviceLayer, "WiFi station state change: %s -> %s", WiFiStationStateToStr(mWiFiStationState),
363366
WiFiStationStateToStr(newState));
364-
mWiFiStationState = newState;
365-
NetworkCommissioning::SlWiFiDriver::GetInstance()->UpdateNetworkingStatus();
367+
mWiFiStationState = newState;
368+
SlWiFiDriver * nwDriver = NetworkCommissioning::SlWiFiDriver::GetInstance();
369+
// Cannot use the driver if the instance is not initialized.
370+
VerifyOrDie(nwDriver != nullptr); // should never be null
371+
nwDriver->UpdateNetworkingStatus();
366372
}
367373
}
368374

src/platform/silabs/NetworkCommissioningWiFiDriver.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -282,32 +282,36 @@ bool SlWiFiDriver::StartScanWiFiNetworks(ByteSpan ssid)
282282

283283
void SlWiFiDriver::OnScanWiFiNetworkDone(wfx_wifi_scan_result_t * aScanResult)
284284
{
285+
SlWiFiDriver * nwDriver = NetworkCommissioning::SlWiFiDriver::GetInstance();
286+
// Cannot use the driver if the instance is not initialized.
287+
VerifyOrDie(nwDriver != nullptr); // should never be null
288+
285289
if (!aScanResult)
286290
{
287291
ChipLogProgress(DeviceLayer, "OnScanWiFiNetworkDone: Receive all scanned networks information.");
288292

289-
if (GetInstance()->mpScanCallback != nullptr)
293+
if (nwDriver->mpScanCallback != nullptr)
290294
{
291295
if (mScanResponseIter.Count() == 0)
292296
{
293297
// if there is no network found, return kNetworkNotFound
294298
DeviceLayer::SystemLayer().ScheduleLambda([]() {
295-
GetInstance()->mpScanCallback->OnFinished(NetworkCommissioning::Status::kNetworkNotFound, CharSpan(), nullptr);
296-
GetInstance()->mpScanCallback = nullptr;
299+
nwDriver->mpScanCallback->OnFinished(NetworkCommissioning::Status::kNetworkNotFound, CharSpan(), nullptr);
300+
nwDriver->mpScanCallback = nullptr;
297301
});
298302
return;
299303
}
300304
DeviceLayer::SystemLayer().ScheduleLambda([]() {
301-
GetInstance()->mpScanCallback->OnFinished(NetworkCommissioning::Status::kSuccess, CharSpan(), &mScanResponseIter);
302-
GetInstance()->mpScanCallback = nullptr;
305+
nwDriver->mpScanCallback->OnFinished(NetworkCommissioning::Status::kSuccess, CharSpan(), &mScanResponseIter);
306+
nwDriver->mpScanCallback = nullptr;
303307
});
304308
}
305309
}
306310
else
307311
{
308312
NetworkCommissioning::WiFiScanResponse scanResponse = {};
309313

310-
scanResponse.security.Set(GetInstance()->ConvertSecuritytype(aScanResult->security));
314+
scanResponse.security.Set(nwDriver->ConvertSecuritytype(aScanResult->security));
311315
scanResponse.channel = aScanResult->chan;
312316
scanResponse.rssi = aScanResult->rssi;
313317
scanResponse.ssidLen = aScanResult->ssid_length;

0 commit comments

Comments
 (0)