From 460687ac73cfd82135ad47a9ca945112146bfc94 Mon Sep 17 00:00:00 2001
From: memdmp <memdmp@estrogen.zone>
Date: Sun, 18 May 2025 14:40:06 +0200
Subject: fix: loop multiple scans

---
 src/bin/server.rs | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

(limited to 'src/bin/server.rs')

diff --git a/src/bin/server.rs b/src/bin/server.rs
index ce95d62..b30fa18 100644
--- a/src/bin/server.rs
+++ b/src/bin/server.rs
@@ -42,6 +42,7 @@ use esp_hal::{
   timer::timg::TimerGroup,
 };
 use esp_println::println;
+use esp_wifi::wifi::ScanConfig;
 use esp_wifi::{
   init,
   wifi::{
@@ -158,21 +159,29 @@ fn main() -> ! {
   debug!("is wifi started: {:?}", controller.is_started());
 
   info!("Start Wifi Scan");
-  let res: Result<(heapless::Vec<AccessPointInfo, 30>, usize), WifiError> = controller.scan_n();
   let mut net: Option<Network> = None;
-  if let Ok((res, _count)) = res {
-    for ap in res {
-      info!("Saw AP: {:?}", ap);
-      for ap_comp in network_data::NETWORKS {
-        if ap_comp.ssid == ap.ssid.clone() {
-          let client_config = Configuration::Client(ClientConfiguration {
-            ssid: ap_comp.ssid.try_into().unwrap(),
-            password: ap_comp.password.try_into().unwrap(),
-            ..Default::default()
-          });
-          controller.set_configuration(&client_config);
-          net = Some(ap_comp);
-        };
+  let mut attempts = 0;
+  while (net.is_none() && attempts < 16) {
+    attempts += 1;
+    let res: Result<(heapless::Vec<AccessPointInfo, 30>, usize), WifiError> = controller
+      .scan_with_config_sync(ScanConfig {
+        show_hidden: true,
+        ..Default::default()
+      });
+    if let Ok((res, _count)) = res {
+      for ap in res {
+        info!("Saw AP: {:?}", ap);
+        for ap_comp in network_data::NETWORKS {
+          if ap_comp.ssid == ap.ssid.clone() {
+            let client_config = Configuration::Client(ClientConfiguration {
+              ssid: ap_comp.ssid.try_into().unwrap(),
+              password: ap_comp.password.try_into().unwrap(),
+              ..Default::default()
+            });
+            controller.set_configuration(&client_config);
+            net = Some(ap_comp);
+          };
+        }
       }
     }
   }
-- 
cgit v1.2.3