From 82f81d1cd04d2aa654c2beaf85308f8f7dbb971b Mon Sep 17 00:00:00 2001 From: ede1998 Date: Mon, 24 Aug 2026 20:57:55 +0200 Subject: [PATCH] move nfc to background tasks --- src/background_tasks.rs | 1 + src/background_tasks/nfc.rs | 36 ++++++++++++++++++++++++++++++++++++ src/bin/main.rs | 37 ------------------------------------- src/lib.rs | 1 + 4 files changed, 38 insertions(+), 37 deletions(-) create mode 100644 src/background_tasks.rs create mode 100644 src/background_tasks/nfc.rs diff --git a/src/background_tasks.rs b/src/background_tasks.rs new file mode 100644 index 0000000..faf4fc9 --- /dev/null +++ b/src/background_tasks.rs @@ -0,0 +1 @@ +pub mod nfc; diff --git a/src/background_tasks/nfc.rs b/src/background_tasks/nfc.rs new file mode 100644 index 0000000..78a0d01 --- /dev/null +++ b/src/background_tasks/nfc.rs @@ -0,0 +1,36 @@ +#[embassy_executor::task] +#[allow( + clippy::large_stack_frames, + reason = "ignoring this for now because it still works" +)] +async fn nfc_driver_task( + mut nfc_driver: NfcPn532Driver>>, +) { + loop { + while CARD_DATA.lock().await.is_none() { + let start = Instant::now(); + match nfc_driver.read_card_data().await { + Ok(card_data) => { + let Some(split_data) = split_nfc_hex(&card_data) else { + log::error!("Failed to split NFC card data"); + continue; + }; + CARD_DATA + .lock() + .await + .replace(Card::try_from(split_data).unwrap()); + let elapsed_ms = start.elapsed().as_millis(); + log::info!( + "NFC read duration: {} ms, card data length: {}", + elapsed_ms, + card_data.len() + ); + } + Err(e) => { + log::error!("NFC read failed: {e}"); + } + } + } + embassy_time::Timer::after(embassy_time::Duration::from_millis(1000)).await; + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs index f1296b5..1e7b671 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -138,43 +138,6 @@ async fn main(spawner: Spawner) { spawner.spawn(nfc_driver_task(nfc_driver).expect("nfc driver task failed")); } -#[embassy_executor::task] -#[allow( - clippy::large_stack_frames, - reason = "ignoring this for now because it still works" -)] -async fn nfc_driver_task( - mut nfc_driver: NfcPn532Driver>>, -) { - loop { - while CARD_DATA.lock().await.is_none() { - let start = Instant::now(); - match nfc_driver.read_card_data().await { - Ok(card_data) => { - let Some(split_data) = split_nfc_hex(&card_data) else { - log::error!("Failed to split NFC card data"); - continue; - }; - CARD_DATA - .lock() - .await - .replace(Card::try_from(split_data).unwrap()); - let elapsed_ms = start.elapsed().as_millis(); - log::info!( - "NFC read duration: {} ms, card data length: {}", - elapsed_ms, - card_data.len() - ); - } - Err(e) => { - log::error!("NFC read failed: {e}"); - } - } - } - embassy_time::Timer::after(embassy_time::Duration::from_millis(1000)).await; - } -} - fn display_shit(oled: &mut SecondaryDisplay<'static>, text: &str) { oled.clear().unwrap(); diff --git a/src/lib.rs b/src/lib.rs index 501ca20..857c224 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ extern crate alloc; +pub mod background_tasks; pub mod card; pub mod display; pub mod drivers;