small adjustments

This commit is contained in:
Empire Phoenix 2025-09-16 22:41:45 +02:00
parent 1c84cd00da
commit 8b938e7687
3 changed files with 38 additions and 20 deletions

View File

@ -17,6 +17,7 @@ use embassy_net::tcp::TcpSocket;
use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4}; use embassy_net::{IpListenEndpoint, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4};
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::mutex::Mutex; use embassy_sync::mutex::Mutex;
use embassy_sync::rwlock::TryLockError;
use embassy_time::{Duration, Instant, Timer}; use embassy_time::{Duration, Instant, Timer};
use embedded_storage::nor_flash::ReadNorFlash; use embedded_storage::nor_flash::ReadNorFlash;
use embedded_storage::Storage; use embedded_storage::Storage;
@ -29,7 +30,7 @@ use esp_println::{print, println};
use esp_storage::FlashStorage; use esp_storage::FlashStorage;
use esp_wifi::wifi::{ use esp_wifi::wifi::{
AccessPointConfiguration, AccessPointInfo, Configuration, Interfaces, ScanConfig, AccessPointConfiguration, AccessPointInfo, Configuration, Interfaces, ScanConfig,
WifiController, WifiDevice, WifiEvent, WifiState, ScanTypeConfig, WifiController, WifiDevice, WifiEvent, WifiState,
}; };
use log::{info, warn}; use log::{info, warn};
@ -99,13 +100,7 @@ macro_rules! mk_static {
}}; }};
} }
static WIFI_CONTROLLER: static_cell::StaticCell<WifiController> = static_cell::StaticCell::new();
impl Esp<'_> { 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 { pub(crate) fn get_ota_slot(&mut self) -> String {
match self.ota.current_slot() { match self.ota.current_slot() {
Ok(slot) => { Ok(slot) => {
@ -164,14 +159,26 @@ impl Esp<'_> {
DateTime::from_timestamp_millis(wall_clock as i64).unwrap() DateTime::from_timestamp_millis(wall_clock as i64).unwrap()
} }
pub(crate) async fn wifi_scan(&mut self) -> Vec<AccessPointInfo> { pub(crate) async fn wifi_scan(&mut self) -> anyhow::Result<Vec<AccessPointInfo>> {
info!("start wifi scan"); 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"); info!("start wifi scan lock");
let scan_config = ScanConfig::default(); let scan_config = ScanConfig {
let rv = lock.scan_with_config_sync(scan_config).unwrap(); 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"); info!("end wifi scan lock");
return rv; Ok(rv)
} }
pub(crate) fn last_pump_time(&self, plant: usize) -> Option<DateTime<Utc>> { pub(crate) fn last_pump_time(&self, plant: usize) -> Option<DateTime<Utc>> {
@ -223,7 +230,7 @@ impl Esp<'_> {
let spawner = Spawner::for_current_executor().await; let spawner = Spawner::for_current_executor().await;
let device = self.interfaces.take().unwrap().ap; 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 gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip");
let config = embassy_net::Config::ipv4_static(StaticConfigV4 { let config = embassy_net::Config::ipv4_static(StaticConfigV4 {

View File

@ -44,6 +44,7 @@ use esp_hal::rng::Rng;
use esp_hal::timer::timg::TimerGroup; use esp_hal::timer::timg::TimerGroup;
use esp_storage::FlashStorage; use esp_storage::FlashStorage;
use esp_wifi::{init, EspWifiController}; use esp_wifi::{init, EspWifiController};
use littlefs2::fs::Filesystem;
//Only support for 8 right now! //Only support for 8 right now!
pub const PLANT_COUNT: usize = 8; pub const PLANT_COUNT: usize = 8;
@ -274,12 +275,21 @@ impl PlantHal {
}; };
let ota_next = mk_static!(PartitionEntry, ota_partition); let ota_next = mk_static!(PartitionEntry, ota_partition);
let storage_ota_next = mk_static!(FlashStorage, FlashStorage::new());
let ota_next = mk_static!( let ota_next = mk_static!(
FlashRegion<FlashStorage>, FlashRegion<FlashStorage>,
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 { let mut esp = Esp {
rng, rng,
controller: Arc::new(Mutex::new(controller)), controller: Arc::new(Mutex::new(controller)),

View File

@ -434,11 +434,12 @@ async fn wifi_scan<T, const N: usize>(
) -> Result<Option<String>, anyhow::Error> { ) -> Result<Option<String>, anyhow::Error> {
let mut board = BOARD_ACCESS.get().await.lock().await; let mut board = BOARD_ACCESS.get().await.lock().await;
info!("start wifi scan"); 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<String> = Vec::new(); let mut ssids: Vec<String> = Vec::new();
scan_result //scan_result
.iter() //.iter()
.for_each(|s| ssids.push(s.ssid.to_string())); //.for_each(|s| ssids.push(s.ssid.to_string()));
let ssid_json = serde_json::to_string(&SSIDList { ssids })?; let ssid_json = serde_json::to_string(&SSIDList { ssids })?;
info!("Sending ssid list {}", &ssid_json); info!("Sending ssid list {}", &ssid_json);
anyhow::Ok(Some(ssid_json)) anyhow::Ok(Some(ssid_json))
@ -532,7 +533,7 @@ pub async fn httpd(reboot_now: Arc<AtomicBool>, stack: Stack<'static>) {
let buffer: TcpBuffers<2, 1024, 1024> = TcpBuffers::new(); let buffer: TcpBuffers<2, 1024, 1024> = TcpBuffers::new();
let tcp = Tcp::new(stack, &buffer); let tcp = Tcp::new(stack, &buffer);
let acceptor = tcp 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 .await
.unwrap(); .unwrap();