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