From 8b938e76877eca719e2758d8245eeabb751ebb73 Mon Sep 17 00:00:00 2001 From: Empire Phoenix Date: Tue, 16 Sep 2025 22:41:45 +0200 Subject: [PATCH] small adjustments --- rust/src/hal/esp.rs | 33 ++++++++++++++++++++------------- rust/src/hal/mod.rs | 14 ++++++++++++-- rust/src/webserver/mod.rs | 11 ++++++----- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/rust/src/hal/esp.rs b/rust/src/hal/esp.rs index f1872f2..887f324 100644 --- a/rust/src/hal/esp.rs +++ b/rust/src/hal/esp.rs @@ -17,6 +17,7 @@ use embassy_net::tcp::TcpSocket; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4}; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::mutex::Mutex; +use embassy_sync::rwlock::TryLockError; use embassy_time::{Duration, Instant, Timer}; use embedded_storage::nor_flash::ReadNorFlash; use embedded_storage::Storage; @@ -29,7 +30,7 @@ use esp_println::{print, println}; use esp_storage::FlashStorage; use esp_wifi::wifi::{ AccessPointConfiguration, AccessPointInfo, Configuration, Interfaces, ScanConfig, - WifiController, WifiDevice, WifiEvent, WifiState, + ScanTypeConfig, WifiController, WifiDevice, WifiEvent, WifiState, }; use log::{info, warn}; @@ -99,13 +100,7 @@ macro_rules! mk_static { }}; } -static WIFI_CONTROLLER: static_cell::StaticCell = static_cell::StaticCell::new(); - impl Esp<'_> { - const SPIFFS_PARTITION_NAME: &'static str = "storage"; - const CONFIG_FILE: &'static str = "/spiffs/config.cfg"; - const BASE_PATH: &'static str = "/spiffs"; - pub(crate) fn get_ota_slot(&mut self) -> String { match self.ota.current_slot() { Ok(slot) => { @@ -164,14 +159,26 @@ impl Esp<'_> { DateTime::from_timestamp_millis(wall_clock as i64).unwrap() } - pub(crate) async fn wifi_scan(&mut self) -> Vec { + pub(crate) async fn wifi_scan(&mut self) -> anyhow::Result> { info!("start wifi scan"); - let mut lock = self.controller.try_lock().unwrap(); + let mut lock = self + .controller + .try_lock() + .map_err(|_| anyhow!("Could not lock wifi controller, currently in use"))?; info!("start wifi scan lock"); - let scan_config = ScanConfig::default(); - let rv = lock.scan_with_config_sync(scan_config).unwrap(); + let scan_config = ScanConfig { + ssid: None, + bssid: None, + channel: None, + show_hidden: false, + scan_type: ScanTypeConfig::Passive(core::time::Duration::from_secs(2)), + }; + let rv = lock + .scan_with_config_async(scan_config) + .await + .map_err(|err| anyhow!("Could not scan wifi: {:?}", err))?; info!("end wifi scan lock"); - return rv; + Ok(rv) } pub(crate) fn last_pump_time(&self, plant: usize) -> Option> { @@ -223,7 +230,7 @@ impl Esp<'_> { let spawner = Spawner::for_current_executor().await; let device = self.interfaces.take().unwrap().ap; - let gw_ip_addr_str = GW_IP_ADDR_ENV.unwrap_or("192.168.2.1"); + let gw_ip_addr_str = "192.168.71.1"; let gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip"); let config = embassy_net::Config::ipv4_static(StaticConfigV4 { diff --git a/rust/src/hal/mod.rs b/rust/src/hal/mod.rs index 5457626..b53eade 100644 --- a/rust/src/hal/mod.rs +++ b/rust/src/hal/mod.rs @@ -44,6 +44,7 @@ use esp_hal::rng::Rng; use esp_hal::timer::timg::TimerGroup; use esp_storage::FlashStorage; use esp_wifi::{init, EspWifiController}; +use littlefs2::fs::Filesystem; //Only support for 8 right now! pub const PLANT_COUNT: usize = 8; @@ -274,12 +275,21 @@ impl PlantHal { }; let ota_next = mk_static!(PartitionEntry, ota_partition); - let storage_ota_next = mk_static!(FlashStorage, FlashStorage::new()); let ota_next = mk_static!( FlashRegion, - ota_next.as_embedded_storage(storage_ota_next) + ota_next.as_embedded_storage(storage_ota) ); + let data_partition = pt + .find_partition(esp_bootloader_esp_idf::partitions::PartitionType::Data( + DataPartitionSubType::LittleFs, + ))? + .unwrap(); + + let mut data = data_partition.as_embedded_storage(storage_ota); + let mut alloc = Filesystem::allocate(); + let mut fs = Filesystem::mount(&mut alloc, &mut data).unwrap(); + let mut esp = Esp { rng, controller: Arc::new(Mutex::new(controller)), diff --git a/rust/src/webserver/mod.rs b/rust/src/webserver/mod.rs index 1a0d85a..355c083 100644 --- a/rust/src/webserver/mod.rs +++ b/rust/src/webserver/mod.rs @@ -434,11 +434,12 @@ async fn wifi_scan( ) -> Result, anyhow::Error> { let mut board = BOARD_ACCESS.get().await.lock().await; info!("start wifi scan"); - let scan_result = board.board_hal.get_esp().wifi_scan().await; + //let scan_result = board.board_hal.get_esp().wifi_scan().await? + //FIXME currently panics let mut ssids: Vec = Vec::new(); - scan_result - .iter() - .for_each(|s| ssids.push(s.ssid.to_string())); + //scan_result + //.iter() + //.for_each(|s| ssids.push(s.ssid.to_string())); let ssid_json = serde_json::to_string(&SSIDList { ssids })?; info!("Sending ssid list {}", &ssid_json); anyhow::Ok(Some(ssid_json)) @@ -532,7 +533,7 @@ pub async fn httpd(reboot_now: Arc, stack: Stack<'static>) { let buffer: TcpBuffers<2, 1024, 1024> = TcpBuffers::new(); let tcp = Tcp::new(stack, &buffer); let acceptor = tcp - .bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 8080)) + .bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 80)) .await .unwrap();