diff --git a/outside/src/scanner.rs b/outside/src/scanner.rs index f399e6c..3028621 100644 --- a/outside/src/scanner.rs +++ b/outside/src/scanner.rs @@ -1,4 +1,6 @@ +use core::sync::atomic::AtomicBool; + use embassy_rp::gpio::Input; use embassy_rp::multicore::spawn_core1; use embassy_rp::multicore::Stack; @@ -14,6 +16,9 @@ use super::BIT; use super::READ_CARD; +/// disable scanner when doing emf heavy operations +pub static LOCKOUT: AtomicBool = AtomicBool::new(false); + #[embassy_executor::task] pub(crate) async fn data_extractor() -> ! { let mut last_bit = 0; @@ -26,7 +31,12 @@ pub(crate) async fn data_extractor() -> ! { if bit == last_bit { if card !=0 { info!("read a card: {card:#16x}"); - CHANNEL.send(card).await; + if LOCKOUT.load(core::sync::atomic::Ordering::Relaxed) { + info!("scanner disabled"); + } else { + CHANNEL.send(card).await; + + } } critical_section::with(|cs| { READ_CARD.replace(cs, 0); diff --git a/outside/src/wiggle.rs b/outside/src/wiggle.rs index 5a3edae..e5a6891 100644 --- a/outside/src/wiggle.rs +++ b/outside/src/wiggle.rs @@ -4,6 +4,8 @@ use embassy_rp::pwm; use embassy_time::Timer; use rand::RngCore; +use crate::scanner::LOCKOUT; + use super::WAGS; use embassy_rp::pwm::Pwm; @@ -30,6 +32,7 @@ pub(crate) async fn wiggle_manager(pwm: PWM_SLICE5, head: PIN_26, tail: PIN_27) wags = WAGS.load(core::sync::atomic::Ordering::SeqCst); if wags != 0 { WAGS.store(0, core::sync::atomic::Ordering::SeqCst); + LOCKOUT.store(true, core::sync::atomic::Ordering::SeqCst); break; } @@ -37,7 +40,7 @@ pub(crate) async fn wiggle_manager(pwm: PWM_SLICE5, head: PIN_26, tail: PIN_27) pwm.set_config(&c); Timer::after_millis(50).await; - + LOCKOUT.store(false, core::sync::atomic::Ordering::SeqCst); } let positions = [6200,4800,6248,4700, 5500];