diff options
fix: loop multiple scans
-rw-r--r-- | src/bin/server.rs | 37 |
1 files changed, 23 insertions, 14 deletions
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); + }; + } } } } |