diff --git a/common/src/lib.rs b/common/src/lib.rs index db2d4b9..343df5c 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -42,6 +42,7 @@ impl Name { 0x6b859025842cd369 => Self::Andy, 0xb366d73deaaa8d9d => Self::Felix, 0x30c79f56dc74f998 => Self::Phil, + 0xb64c08f6b9a50281 => Self::Michael, _ => Self::Unknown, } } diff --git a/outside/src/main.rs b/outside/src/main.rs index 8650a8e..f07de2a 100644 --- a/outside/src/main.rs +++ b/outside/src/main.rs @@ -152,7 +152,7 @@ async fn button_manager(pin: PIN_22) -> ! { let mut button = Input::new(pin, embassy_rp::gpio::Pull::Up); loop { button.wait_for_rising_edge().await; - COMMANDS.send(music::MusicCommand::Play("a1")).await; // TODO: record + COMMANDS.send(music::MusicCommand::Button()).await; Timer::after_millis(800).await; } } diff --git a/outside/src/music.rs b/outside/src/music.rs index 5f6b194..6d5b80b 100644 --- a/outside/src/music.rs +++ b/outside/src/music.rs @@ -10,6 +10,7 @@ use rand::RngCore; use serde::Deserialize; use serde::Serialize; +use crate::scanner::LOCKOUT; use crate::server::NAMES; use crate::wiggle::WAGS; use crate::Irqs; @@ -71,8 +72,8 @@ impl Tracks for Name { } -static ACCEPTED_SUFFIXABLE: [bool; 6] = [false, false, false, false, false, true]; -static DENIED_SUFFIXABLE: [bool; 6] = [false, false, false, false, false, true]; +static ACCEPTED_SUFFIXABLE: [bool; 11] = [false, false, false, false, false, true, true, false, true, false, true]; +static DENIED_SUFFIXABLE: [bool; 17] = [false, false, false, false, false, true, false, true, true, true, true, false, false, true, true, false, false]; pub enum MusicCommand { /// play a random clip for name, accepted if true @@ -144,6 +145,7 @@ pub async fn music_manager(uart: UART1, irqs: Irqs, txp: PIN_20, rxp: PIN_21) -> async fn play_song<'a>(prefix: &str, index: Option, uart: &mut BufferedUart<'a, UART1>) { info!("playing: {}{}.mp3",prefix,index.unwrap_or(0)); + LOCKOUT.store(true, core::sync::atomic::Ordering::SeqCst); uart.write_all(b"AT+PLAYFILE=/").await.unwrap(); uart.write_all(prefix.as_bytes()).await.unwrap(); @@ -158,11 +160,15 @@ async fn play_song<'a>(prefix: &str, index: Option, uart: &mut BufferedUart< uart.write_all(b"AT+QUERY=4\r\n").await.unwrap(); let mut buffer = [0;512]; let output = read_line(&mut buffer, uart).await; + info!("len: {}", output.trim()); if let Ok(length) = output.trim().parse::() { - WAGS.store((length as u8) * 2 + 1, core::sync::atomic::Ordering::SeqCst); - Timer::after_secs(length).await; + //WAGS.store((length as u8) * 2 + 1, core::sync::atomic::Ordering::SeqCst); + Timer::after_secs(length.max(1)).await; + } else { + Timer::after_secs(1).await; } + LOCKOUT.store(false, core::sync::atomic::Ordering::SeqCst); } async fn read_line<'a, 'b>(buffer: &'b mut [u8], uart: &mut BufferedUart<'a, UART1>) -> &'b str { diff --git a/outside/src/scanner.rs b/outside/src/scanner.rs index e9102ef..066439e 100644 --- a/outside/src/scanner.rs +++ b/outside/src/scanner.rs @@ -39,8 +39,11 @@ pub async fn data_extractor() -> ! { if LOCKOUT.load(core::sync::atomic::Ordering::Relaxed) { info!("scanner disabled"); } else { - CHANNEL.send(card).await; - + if card == 0x1 || card == 0x0 || card == 0x5555555555555555 || card == 0xaaaaaaaaaaaaaaaa { + info!("ignoring {card:#16x}"); + } else { + CHANNEL.send(card).await; + } } } critical_section::with(|cs| {