From dadde9048df64be93f67420523a54b9478e8ead8 Mon Sep 17 00:00:00 2001 From: sawyer bristol Date: Tue, 16 Sep 2025 16:52:45 -0600 Subject: [PATCH] fix loader --- kernel/src/main.rs | 21 ++++++--------------- kernel/src/scsi/mod.rs | 22 +++++++++++----------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index a919984..d23f61c 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -18,6 +18,8 @@ mod ui; mod usb; mod utils; +use core::sync::atomic::{AtomicBool, Ordering}; + use crate::{ display::{clear_fb, display_handler, init_display}, peripherals::{ @@ -78,14 +80,7 @@ static ALLOCATOR: Talck, ClaimOnOom> = Talc::new(unsafe { ClaimOnOom::new(Span::from_array(core::ptr::addr_of!(ARENA).cast_mut())) }) .lock(); -static TASK_STATE: Mutex = Mutex::new(TaskState::Selection); -static TASK_STATE_CHANGED: Signal = Signal::new(); - -#[derive(Copy, Clone, PartialEq)] -enum TaskState { - Selection, - Kernel, -} +static ENABLE_UI: AtomicBool = AtomicBool::new(true); #[embassy_executor::main] async fn main(spawner: Spawner) { @@ -141,9 +136,7 @@ async fn userland_task() { // disable kernel ui { - let mut state = TASK_STATE.lock().await; - *state = TaskState::Kernel; - TASK_STATE_CHANGED.signal(()); + ENABLE_UI.store(false, Ordering::Release); // clear_fb(); MSC_SHUTDOWN.signal(()); } @@ -153,9 +146,7 @@ async fn userland_task() { // enable kernel ui { - let mut state = TASK_STATE.lock().await; - *state = TaskState::Selection; - TASK_STATE_CHANGED.signal(()); + ENABLE_UI.store(true, Ordering::Release); // clear_fb(); } } @@ -244,7 +235,7 @@ async fn kernel_task( spawner.spawn(key_handler()).unwrap(); loop { - if let TaskState::Selection = *TASK_STATE.lock().await { + if ENABLE_UI.load(Ordering::Relaxed) { let ui_fut = ui_handler(); let binary_search_fut = prog_search_handler(); diff --git a/kernel/src/scsi/mod.rs b/kernel/src/scsi/mod.rs index c10a97f..f8c72fb 100644 --- a/kernel/src/scsi/mod.rs +++ b/kernel/src/scsi/mod.rs @@ -74,19 +74,19 @@ impl<'d, 's, D: Driver<'d>> MassStorageClass<'d, D> { async fn handle_cbw(&mut self) { let mut cbw_buf = [0u8; 31]; if let Ok(n) = self.bulk_out.read(&mut cbw_buf).await { - // Take sdcard to increase speed - if self.temp_sd.is_none() { - let mut guard = SDCARD.get().lock().await; - if let Some(sd) = guard.take() { - self.temp_sd = Some(sd); - } else { - defmt::warn!("Tried to take SDCARD but it was already taken"); - return; - } - } - if n == 31 { if let Some(cbw) = CommandBlockWrapper::parse(&cbw_buf[..n]) { + // Take sdcard to increase speed + if self.temp_sd.is_none() { + let mut guard = SDCARD.get().lock().await; + if let Some(sd) = guard.take() { + self.temp_sd = Some(sd); + } else { + defmt::warn!("Tried to take SDCARD but it was already taken"); + return; + } + } + let command = parse_cb(&cbw.CBWCB); if self.handle_command(command).await.is_ok() { self.send_csw_success(cbw.dCBWTag).await