From ea938e3a7128b3d3299cb12e35ab5e03e70b3693 Mon Sep 17 00:00:00 2001 From: Matt Johnston <matt@ucc.asn.au> Date: Tue, 23 May 2023 00:29:00 +0800 Subject: [PATCH] Wifi tidying --- embassy/demos/picow/src/main.rs | 2 +- embassy/demos/picow/src/picowmenu.rs | 39 +++++++++++----------------- embassy/demos/picow/src/wifi.rs | 28 +++++++++++++------- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/embassy/demos/picow/src/main.rs b/embassy/demos/picow/src/main.rs index 5095f8e..968b8f9 100644 --- a/embassy/demos/picow/src/main.rs +++ b/embassy/demos/picow/src/main.rs @@ -65,7 +65,7 @@ async fn main(spawner: Spawner) { let mut flash = embassy_rp::flash::Flash::new(p.FLASH); - let config = if option_env!("RESET_FLASH").is_some() { + let config = if option_env!("RESET_CONFIG").is_some() { flashconfig::create(&mut flash).unwrap() } else { flashconfig::load_or_create(&mut flash).unwrap() diff --git a/embassy/demos/picow/src/picowmenu.rs b/embassy/demos/picow/src/picowmenu.rs index ae5c4e7..1856c46 100644 --- a/embassy/demos/picow/src/picowmenu.rs +++ b/embassy/demos/picow/src/picowmenu.rs @@ -142,20 +142,11 @@ const WIFI_ITEM: Item<MenuCtx> = Item { item_type: ItemType::Menu(&Menu { label: "wifi", items: &[ - &Item { - command: "net", - item_type: ItemType::Callback { - parameters: &[ - Parameter::Mandatory { parameter_name: "ssid", help: None }, - ], - function: do_wifi_net, - }, - help: None, - }, &Item { command: "wpa2", item_type: ItemType::Callback { parameters: &[ + Parameter::Mandatory { parameter_name: "net", help: Some("ssid") }, Parameter::Mandatory { parameter_name: "password", help: None }, ], function: do_wifi_wpa2, @@ -165,7 +156,9 @@ const WIFI_ITEM: Item<MenuCtx> = Item { &Item { command: "open", item_type: ItemType::Callback { - parameters: &[], + parameters: &[ + Parameter::Mandatory { parameter_name: "net", help: Some("ssid") }, + ], function: do_wifi_open, }, help: None, @@ -283,26 +276,19 @@ fn wifi_entry(context: &mut MenuCtx) { }); } -fn do_wifi_net(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) { +fn do_wifi_wpa2(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) { context.with_config(|c, out| { let net = args[0]; - if c.wifi_net.capacity() > net.len() { - writeln!(out, "Too long"); + let pw = args[1]; + if c.wifi_net.capacity() < net.len() { + writeln!(out, "Too long net"); return; } - c.wifi_net = net.into(); - }); - context.need_save = true; - wifi_entry(context); -} - -fn do_wifi_wpa2(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) { - context.with_config(|c, out| { - let pw = args[0]; if pw.len() > 63 { - writeln!(out, "Too long"); + writeln!(out, "Too long pw"); return; } + c.wifi_net = net.into(); c.wifi_pw = Some(pw.into()) }); context.need_save = true; @@ -311,6 +297,11 @@ fn do_wifi_wpa2(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) { fn do_wifi_open(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) { context.with_config(|c, out| { + let net = args[0]; + if c.wifi_net.capacity() < net.len() { + writeln!(out, "Too long net"); + return; + } c.wifi_pw = None; }); context.need_save = true; diff --git a/embassy/demos/picow/src/wifi.rs b/embassy/demos/picow/src/wifi.rs index 6f3c53a..9851d3f 100644 --- a/embassy/demos/picow/src/wifi.rs +++ b/embassy/demos/picow/src/wifi.rs @@ -63,18 +63,26 @@ pub(crate) async fn wifi_stack(spawner: &Spawner, // control.set_power_management(cyw43::PowerManagementMode::None).await; // control.set_power_management(cyw43::PowerManagementMode::Performance).await; - let st = if let Some(pw) = wpa_password { - info!("wifi net {} wpa2", wifi_net); - control.join_wpa2(&wifi_net, &pw).await - } else { - info!("wifi net {} open", wifi_net); - control.join_open(&wifi_net).await - }; - if let Err(e) = st { - info!("wifi join failed, code {}", e.status); - let () = futures::future::pending().await; + let mut status = Ok(()); + for i in 0..5 { + status = if let Some(ref pw) = wpa_password { + info!("wifi net {} wpa2 {}", wifi_net, &pw); + control.join_wpa2(&wifi_net, &pw).await + } else { + info!("wifi net {} open", wifi_net); + control.join_open(&wifi_net).await + }; + if let Err(ref e) = status { + info!("wifi join failed, code {}", e.status); + } else { + break; + } } + if let Err(e) = status { + // wait forever + let () = futures::future::pending().await; + } let config = embassy_net::Config::Dhcp(Default::default()); -- GitLab