From 8cbd43bc3a2b5db08099e464ed8adfe9e1593585 Mon Sep 17 00:00:00 2001 From: Priec Date: Tue, 12 May 2026 00:11:30 +0200 Subject: [PATCH] send pipe --- 2sem_sem2/src/bin/main.rs | 53 +++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/2sem_sem2/src/bin/main.rs b/2sem_sem2/src/bin/main.rs index f5090bf..abf484d 100644 --- a/2sem_sem2/src/bin/main.rs +++ b/2sem_sem2/src/bin/main.rs @@ -25,12 +25,16 @@ async fn main(spawner: Spawner) { info!("tititititi"); let p = embassy_stm32::init(Default::default()); - let mut tx = Output::new(p.PF2, gpio::Level::High, gpio::Speed::High); + let mut tx = Output::new(p.PF2, gpio::Level::High, gpio::Speed::VeryHigh); + // let _rx = Input::new(p.PA3, Pull::Up); + // let _tx = Output::new(p.PA2, Level::High, Speed::VeryHigh); let config = Config::default(); let sender = PIPE.sender(); // let receiver = PIPE.receiver(); + spawner.spawn(bit_send(tx)).unwrap(); + info!("starting echo"); let mut v: Vec = Vec::new(); @@ -42,6 +46,9 @@ async fn main(spawner: Spawner) { info!("slovo: {}", slovko); let vektorik = encode(slovko, v.clone()); info!("slovo: {:#?}", vektorik); + + info!("enkodovane, posielame do pipy..."); + nrz(&v, &sender).await; // let current_send_allowed = SEND_ALLOWED.load(Ordering::Relaxed); // let current_rec_allowed = REC_ALLOWED.load(Ordering::Relaxed); // if current_rec_allowed == true { @@ -73,19 +80,43 @@ fn encode(word: &str, mut v: Vec) { } } -fn nrz(enkodovany: &Vec, sender: &Sender<'_, CriticalSectionRawMutex, u8, 64>) { +async fn nrz(enkodovany: &Vec, sender: &Sender<'_, CriticalSectionRawMutex, u8, 64>) { if !SEND_ALLOWED.load(Ordering::Relaxed) { return; } - let preamble: u8 = 0xAA; - let sfd: u8 = 0xAB; - sender.push(preamble); - sender.push(sfd); - for &bit in enkodovany { - if sender.try_send(bit).is_err() { - info!("pipe full"); - break; + let sync_hod: u8 = 0xAA; + let start_bits: u8 = 0xAB; + let sequence = [sync_hod, start_bits]; + + for byte in sequence { + for i in (0..8).rev() { + sender.send((byte >> i) & 1).await; } } - sender.push(preamble); + + for &bit in enkodovany { + sender.send(bit).await; + } + + for i in (0..8).rev() { + sender.send((sync_hod >> i) & 1).await; + } + + // idle + sender.send(1).await; +} + +#[embassy_executor::task] +async fn bit_send(mut pin: Output<'static>) { + let receiver = PIPE.receiver(); + loop { + let bit = receiver.receive().await; + if bit == 1 { + pin.set_high(); + } else { + pin.set_low(); + } + // bitrate + Timer::after(Duration::from_millis(10)).await; + } }