Skip to content

Commit 3da3746

Browse files
committed
fix wifi scan on bl706 + bl602 platform
1 parent 28781cc commit 3da3746

File tree

6 files changed

+88
-62
lines changed

6 files changed

+88
-62
lines changed

examples/lighting-app/bouffalolab/bl616/BUILD.gn

-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ bouffalo_sdk("sdk") {
7272
"OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_seconds}",
7373
"OTA_AUTO_REBOOT_DELAY=${ota_auto_reboot_delay_seconds}",
7474
"CHIP_UART_BAUDRATE=${baudrate}",
75-
"CHIP_SYSTEM_CRYPTO_HEADER_RESERVE_SIZE=388",
7675
]
7776

7877
defines += [ "PW_RPC_ENABLED=${chip_enable_pw_rpc}" ]
@@ -109,7 +108,6 @@ bouffalolab_executable("lighting_app") {
109108
"CHIP_UART_BAUDRATE=${baudrate}",
110109
"BL616_ENABLE",
111110
"START_ENTRY=main",
112-
"CHIP_SYSTEM_CRYPTO_HEADER_RESERVE_SIZE=388",
113111
]
114112

115113
defines +=

src/platform/bouffalolab/BL702/ConnectivityManagerImpl.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,15 @@ extern "C" void wifiInterface_eventGotIP(struct netif * interface)
106106

107107
extern "C" void wifiInterface_eventScanDone(struct netif * interface, netbus_fs_scan_ind_cmd_msg_t * pmsg)
108108
{
109+
ChipDeviceEvent event;
110+
109111
ChipLogProgress(DeviceLayer, "wifiInterface_eventScanDone");
112+
113+
memset(&event, 0, sizeof(ChipDeviceEvent));
110114
NetworkCommissioning::BLWiFiDriver::GetInstance().OnScanWiFiNetworkDone(pmsg);
115+
116+
event.Type = kWiFiOnScanDone;
117+
PlatformMgr().PostEventOrDie(&event);
111118
}
112119
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
113120

src/platform/bouffalolab/BL702/NetworkCommissioningDriver.cpp

+74-58
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,14 @@ void BLWiFiDriver::ScanNetworks(ByteSpan ssid, WiFiDriver::ScanCallback * callba
211211
{
212212
if (callback != nullptr)
213213
{
214-
ChipLogError(NetworkProvisioning, "ssid.data(): %s", ssid.data());
215-
216214
if (ssid.data())
217215
{
218216
memset(mScanSSID, 0, sizeof(mScanSSID));
219217
memcpy(mScanSSID, ssid.data(), ssid.size());
220218
mScanSpecific = true;
221219
}
220+
221+
mScanResponseNum = 0;
222222
mpScanCallback = callback;
223223
wifiInterface_startScan();
224224
}
@@ -229,81 +229,97 @@ void BLWiFiDriver::OnScanWiFiNetworkDone(void * opaque)
229229
netbus_wifi_mgmr_msg_cmd_t * pkg_data = (netbus_wifi_mgmr_msg_cmd_t *) ((struct pkg_protocol *) opaque)->payload;
230230
netbus_fs_scan_ind_cmd_msg_t * pmsg = (netbus_fs_scan_ind_cmd_msg_t *) ((netbus_fs_scan_ind_cmd_msg_t *) pkg_data);
231231

232-
size_t i = 0, ap_num = 0;
232+
size_t i = 0, ap_num = 0, ap_cnt = 0;
233233
WiFiScanResponse *pScanResponse, *p;
234234

235-
for (i = 0; i < pmsg->num; i++)
236-
{
237-
ChipLogProgress(DeviceLayer, "OnScanWiFiNetworkDone %s", pmsg->records[i].ssid);
238-
if (mScanSpecific && !strcmp(mScanSSID, (char *) (pmsg->records[i].ssid)))
235+
ChipLogProgress(DeviceLayer, "expected ssid %s. get %d in total, %d", mScanSSID, pmsg->num, mScanSpecific);
236+
237+
if (mScanSpecific) {
238+
for (i = 0; i < pmsg->num; i++)
239239
{
240-
ap_num = 1;
241-
break;
240+
if (mScanSpecific && !strcmp(mScanSSID, (char *) (pmsg->records[i].ssid)))
241+
{
242+
ap_num = 1;
243+
break;
244+
}
242245
}
243246
}
247+
else {
248+
ap_num = pmsg->num;
249+
}
244250

245-
if (0 == pmsg->num || (mScanSpecific && 0 == ap_num))
251+
if (ap_num)
246252
{
247-
ChipLogProgress(DeviceLayer, "No AP found");
248-
if (mpScanCallback != nullptr)
253+
p = mScanResponse = (WiFiScanResponse *) malloc(sizeof(WiFiScanResponse) * ap_num);
254+
if (mScanResponse == nullptr) {
255+
return;
256+
}
257+
258+
for (i = 0; i < pmsg->num; i++)
249259
{
250-
mpScanCallback->OnFinished(Status::kSuccess, CharSpan(), nullptr);
251-
mpScanCallback = nullptr;
260+
if (mScanSpecific && strcmp(mScanSSID, (char *) (pmsg->records[i].ssid)))
261+
{
262+
continue;
263+
}
264+
265+
p->security.SetRaw(pmsg->records[i].auth_mode);
266+
p->ssidLen = strlen((char *) pmsg->records[i].ssid) < chip::DeviceLayer::Internal::kMaxWiFiSSIDLength
267+
? strlen((char *) pmsg->records[i].ssid)
268+
: chip::DeviceLayer::Internal::kMaxWiFiSSIDLength;
269+
p->channel = pmsg->records[i].channel;
270+
p->wiFiBand = chip::DeviceLayer::NetworkCommissioning::WiFiBand::k2g4;
271+
p->rssi = pmsg->records[i].rssi;
272+
memcpy(p->ssid, pmsg->records[i].ssid, p->ssidLen);
273+
memcpy(p->bssid, pmsg->records[i].bssid, 6);
274+
275+
p++;
276+
ap_cnt ++;
277+
278+
if (ap_cnt >= ap_num) {
279+
break;
280+
}
252281
}
253-
return;
254282
}
255283

256-
if (ap_num)
257-
{
258-
p = pScanResponse = (WiFiScanResponse *) malloc(sizeof(WiFiScanResponse) * ap_num);
259-
}
260-
else
261-
{
262-
p = pScanResponse = (WiFiScanResponse *) malloc(sizeof(WiFiScanResponse) * pmsg->num);
263-
ap_num = pmsg->num;
264-
}
265-
for (i = 0; i < pmsg->num; i++)
284+
mScanResponseNum = ap_cnt;
285+
}
286+
287+
void BLWiFiDriver::OnScanWiFiNetworkDone(void)
288+
{
289+
size_t ap_cnt = mScanResponseNum;
290+
WiFiScanResponse *pScanResponse = mScanResponse;
291+
292+
if (mScanResponse)
266293
{
267-
if (mScanSpecific && strcmp(mScanSSID, (char *) (pmsg->records[i].ssid)))
294+
if (CHIP_NO_ERROR == DeviceLayer::SystemLayer().ScheduleLambda([ap_cnt, pScanResponse]() {
295+
BLScanResponseIterator iter(ap_cnt, pScanResponse);
296+
if (GetInstance().mpScanCallback)
297+
{
298+
GetInstance().mpScanCallback->OnFinished(Status::kSuccess, CharSpan(), &iter);
299+
GetInstance().mpScanCallback = nullptr;
300+
}
301+
else
302+
{
303+
ChipLogError(DeviceLayer, "can't find the ScanCallback function");
304+
}
305+
}))
268306
{
269-
continue;
307+
ChipLogProgress(DeviceLayer, "ScheduleLambda OK");
270308
}
271309

272-
p->security.SetRaw(pmsg->records[i].auth_mode);
273-
p->ssidLen = strlen((char *) pmsg->records[i].ssid) < chip::DeviceLayer::Internal::kMaxWiFiSSIDLength
274-
? strlen((char *) pmsg->records[i].ssid)
275-
: chip::DeviceLayer::Internal::kMaxWiFiSSIDLength;
276-
p->channel = pmsg->records[i].channel;
277-
p->wiFiBand = chip::DeviceLayer::NetworkCommissioning::WiFiBand::k2g4;
278-
p->rssi = pmsg->records[i].rssi;
279-
memcpy(p->ssid, pmsg->records[i].ssid, p->ssidLen);
280-
memcpy(p->bssid, pmsg->records[i].bssid, 6);
281-
282-
if (mScanSpecific)
310+
free(mScanResponse);
311+
mScanResponse = nullptr;
312+
}
313+
else {
314+
ChipLogProgress(DeviceLayer, "No AP found");
315+
if (mpScanCallback != nullptr)
283316
{
284-
break;
317+
mpScanCallback->OnFinished(Status::kSuccess, CharSpan(), nullptr);
318+
mpScanCallback = nullptr;
285319
}
286-
287-
p++;
288-
}
289-
290-
if (CHIP_NO_ERROR == DeviceLayer::SystemLayer().ScheduleLambda([ap_num, pScanResponse]() {
291-
BLScanResponseIterator iter(ap_num, pScanResponse);
292-
if (GetInstance().mpScanCallback)
293-
{
294-
GetInstance().mpScanCallback->OnFinished(Status::kSuccess, CharSpan(), &iter);
295-
GetInstance().mpScanCallback = nullptr;
296-
}
297-
else
298-
{
299-
ChipLogError(DeviceLayer, "can't find the ScanCallback function");
300-
}
301-
}))
302-
{
303-
ChipLogProgress(DeviceLayer, "ScheduleLambda OK");
304320
}
305321

306-
free(pScanResponse);
322+
mScanResponseNum = 0;
307323
}
308324

309325
CHIP_ERROR GetConfiguredNetwork(Network & network)

src/platform/bouffalolab/BL702/NetworkCommissioningDriver.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ class BLWiFiDriver final : public WiFiDriver
113113

114114
CHIP_ERROR ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, const char * key, uint8_t keyLen);
115115
void OnConnectWiFiNetwork(bool isConnected);
116-
void OnScanWiFiNetworkDone(void * opaque = NULL);
116+
void OnScanWiFiNetworkDone(void);
117+
void OnScanWiFiNetworkDone(void * opaque);
117118
void OnNetworkStatusChange(void);
118119

119120
CHIP_ERROR SetLastDisconnectReason(const ChipDeviceEvent * event);
@@ -128,6 +129,9 @@ class BLWiFiDriver final : public WiFiDriver
128129
private:
129130
bool NetworkMatch(const WiFiNetwork & network, ByteSpan networkId);
130131

132+
WiFiScanResponse *mScanResponse = nullptr;
133+
size_t mScanResponseNum = 0;
134+
131135
WiFiNetwork mSavedNetwork;
132136
WiFiNetwork mStagingNetwork;
133137
ScanCallback * mpScanCallback;

src/platform/bouffalolab/common/SystemPlatformConfig.h

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct ChipDeviceEvent;
3838
// #define CHIP_CONFIG_SHA256_CONTEXT_SIZE sizeof(mbedtls_sha256_context) in hw_acc/sha256_alt.h
3939
#define CHIP_CONFIG_SHA256_CONTEXT_SIZE (32 + 64 + 64 + 19 * 32)
4040
#define CHIP_CONFIG_SHA256_CONTEXT_ALIGN 32
41+
#define CHIP_SYSTEM_CRYPTO_HEADER_RESERVE_SIZE (388)
4142
#else
4243

4344
// #define CHIP_CONFIG_SHA256_CONTEXT_SIZE sizeof(bl_sha_ctx_t)

third_party/bouffalolab/repo

Submodule repo updated 1 file

0 commit comments

Comments
 (0)