Skip to content

Commit b4e0e6d

Browse files
committed
[NXP][platform][common] Call OnScanWiFiNetworkDone function in the context of the Matter stack to avoid chipDie issue
Signed-off-by: Martin Girardot <martin.girardot@nxp.com>
1 parent dc8187b commit b4e0e6d

4 files changed

+28
-4
lines changed

src/platform/nxp/common/CHIPDevicePlatformEvent.h

+2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum InternalPlatformSpecificEventTypes
6969
kPlatformNxpWlanEvent,
7070
kPlatformNxpIpChangeEvent,
7171
kPlatformNxpStartWlanConnectEvent,
72+
kPlatformNxpScanWiFiNetworkDoneEvent,
7273
};
7374

7475
} // namespace DeviceEventType
@@ -116,6 +117,7 @@ struct ChipDevicePlatformEvent final
116117
#if CHIP_DEVICE_CONFIG_ENABLE_WPA
117118
enum wlan_event_reason WlanEventReason;
118119
struct wlan_network * pNetworkDataEvent;
120+
unsigned int ScanWiFiNetworkCount;
119121
#endif
120122
};
121123
};

src/platform/nxp/common/ConnectivityManagerImpl.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
153153
free(event->Platform.pNetworkDataEvent);
154154
}
155155
}
156+
else if (event->Type == kPlatformNxpScanWiFiNetworkDoneEvent)
157+
{
158+
NetworkCommissioning::NXPWiFiDriver::GetInstance().ScanWiFINetworkDoneFromMatterTaskContext(
159+
event->Platform.ScanWiFiNetworkCount);
160+
}
156161
#endif
157162
}
158163

src/platform/nxp/common/NetworkCommissioningDriver.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ class NXPWiFiDriver final : public WiFiDriver
9292

9393
CHIP_ERROR ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, const char * key, uint8_t keyLen);
9494
void OnConnectWiFiNetwork(Status commissioningError, CharSpan debugText, int32_t connectStatus);
95-
static int OnScanWiFiNetworkDone(unsigned int count);
95+
int ScanWiFINetworkDoneFromMatterTaskContext(unsigned int count);
96+
static int _OnScanWiFiNetworkDoneCallBack(unsigned int count);
9697
static NXPWiFiDriver & GetInstance()
9798
{
9899
static NXPWiFiDriver instance;

src/platform/nxp/common/NetworkCommissioningWiFiDriver.cpp

+19-3
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ CHIP_ERROR NXPWiFiDriver::StartScanWiFiNetworks(ByteSpan ssid)
270270
ChipLogProgress(DeviceLayer, "Scan for WiFi network(s) requested");
271271

272272
(void) memset(&wlan_scan_param, 0, sizeof(wlan_scan_params_v2_t));
273-
wlan_scan_param.cb = &NXPWiFiDriver::OnScanWiFiNetworkDone;
273+
wlan_scan_param.cb = &NXPWiFiDriver::_OnScanWiFiNetworkDoneCallBack;
274274

275275
if ((ssid.size() > 0) && (ssid.size() < MLAN_MAX_SSID_LENGTH))
276276
{
@@ -291,8 +291,24 @@ CHIP_ERROR NXPWiFiDriver::StartScanWiFiNetworks(ByteSpan ssid)
291291
return CHIP_NO_ERROR;
292292
}
293293

294-
// TODO should be modified to do it in the context of the Matter stack
295-
int NXPWiFiDriver::OnScanWiFiNetworkDone(unsigned int count)
294+
int NXPWiFiDriver::_OnScanWiFiNetworkDoneCallBack(unsigned int count)
295+
{
296+
int error_code = WM_SUCCESS;
297+
ChipDeviceEvent event;
298+
event.Type = DeviceEventType::kPlatformNxpScanWiFiNetworkDoneEvent;
299+
event.Platform.ScanWiFiNetworkCount = count;
300+
CHIP_ERROR err = PlatformMgr().PostEvent(&event);
301+
if (err != CHIP_NO_ERROR)
302+
{
303+
ChipLogError(DeviceLayer, "Failed to schedule work: %" CHIP_ERROR_FORMAT, err.Format());
304+
error_code = WM_FAIL;
305+
}
306+
return error_code;
307+
}
308+
309+
// The processing of the scan callback should be done in the context of the Matter stack, as the scan callback will call Matter
310+
// stack APIs
311+
int NXPWiFiDriver::ScanWiFINetworkDoneFromMatterTaskContext(unsigned int count)
296312
{
297313
ChipLogProgress(DeviceLayer, "Scan for WiFi network(s) done, found: %u", count);
298314

0 commit comments

Comments
 (0)