From 0e0fe334cd5d4ea09645a9a0a9ad437ff1abaa5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Thu, 30 Jun 2022 20:30:52 +0200 Subject: [PATCH] [beken-72xx] Scan networks before connecting, if needed --- arduino/beken-72xx/libraries/WiFi/WiFiData.h | 1 + arduino/beken-72xx/libraries/WiFi/WiFiSTA.cpp | 13 ++++++++++++- arduino/beken-72xx/libraries/WiFi/WiFiScan.cpp | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arduino/beken-72xx/libraries/WiFi/WiFiData.h b/arduino/beken-72xx/libraries/WiFi/WiFiData.h index e928862..6cefc24 100644 --- a/arduino/beken-72xx/libraries/WiFi/WiFiData.h +++ b/arduino/beken-72xx/libraries/WiFi/WiFiData.h @@ -14,6 +14,7 @@ extern "C" { typedef struct { char ssid[32 + 1]; char pass[64 + 1]; + unsigned long scannedAt; uint32_t ipSta[4]; uint32_t ipAp[4]; SemaphoreHandle_t scanSem; diff --git a/arduino/beken-72xx/libraries/WiFi/WiFiSTA.cpp b/arduino/beken-72xx/libraries/WiFi/WiFiSTA.cpp index cfefad7..f50b38f 100644 --- a/arduino/beken-72xx/libraries/WiFi/WiFiSTA.cpp +++ b/arduino/beken-72xx/libraries/WiFi/WiFiSTA.cpp @@ -56,7 +56,11 @@ bool WiFiClass::reconnect(const uint8_t *bssid) { goto error; } - LT_D_WG("Connecting to " MACSTR, MAC2STR(bssid)); + if (bssid) { + LT_D_WG("Connecting to " MACSTR, MAC2STR(bssid)); + } else { + LT_D_WG("Connecting to %s", data.ssid); + } network_InitTypeDef_st config; memset(&config, 0, sizeof(network_InitTypeDef_st)); @@ -92,6 +96,13 @@ bool WiFiClass::reconnect(const uint8_t *bssid) { LT_D_WG("Static DNS: %s", config.dns_server_ip_addr); } + if (!data.scannedAt || millis() - data.scannedAt > 10000) { + LT_D_WG("Scan needed"); + // apparently a scan must be performed first, + // else it hangs at "[sa_sta]MM_START_REQ" + scanNetworks(false); + } + LT_D_WG("Starting WiFi..."); __wrap_bk_printf_disable(); bk_wlan_start_sta(&config); diff --git a/arduino/beken-72xx/libraries/WiFi/WiFiScan.cpp b/arduino/beken-72xx/libraries/WiFi/WiFiScan.cpp index 33aba52..be90468 100644 --- a/arduino/beken-72xx/libraries/WiFi/WiFiScan.cpp +++ b/arduino/beken-72xx/libraries/WiFi/WiFiScan.cpp @@ -36,6 +36,8 @@ static void scanHandler(void *ctx, uint8_t param) { memcpy(scan->ap[i].bssid.addr, result.ApList[i].bssid, 6); } + cls->data.scannedAt = millis(); + end: scan->running = false; xSemaphoreGive(cls->data.scanSem);