Some elementary network code
This commit is contained in:
51
src/main.rs
51
src/main.rs
@ -36,6 +36,7 @@ use tokio::{
|
||||
sync::mpsc::{UnboundedSender, error::TryRecvError, unbounded_channel},
|
||||
time::timeout,
|
||||
};
|
||||
use tun_tap::Iface;
|
||||
|
||||
use crate::{
|
||||
bfsk::BFSKMod,
|
||||
@ -254,8 +255,8 @@ impl Transceiver {
|
||||
{
|
||||
match recv.as_mut().unwrap().receive(iq).await
|
||||
{
|
||||
Ok(Some(Frame::Data(_))) => {println!("GOT DATA"); send_ack = true; recv = None; state_tx.try_send(TransceiverState::EOT);},
|
||||
Ok(Some(Frame::Ack)) => {current_message = None; recv = None; state_tx.try_send(TransceiverState::EOT);},
|
||||
Ok(Some(Frame::Data(_))) => {println!("GOT DATA"); send_ack = false; recv = None; state_tx.try_send(TransceiverState::EOT);},
|
||||
//Ok(Some(Frame::Ack)) => {current_message = None; recv = None; state_tx.try_send(TransceiverState::EOT);},
|
||||
Err(()) => {recv = None;},
|
||||
_ => {}
|
||||
}
|
||||
@ -275,14 +276,14 @@ impl Transceiver {
|
||||
current_message = Some((tx_stream_receiver).recv().await.unwrap());
|
||||
}
|
||||
state_tx.try_send(TransceiverState::Listening);
|
||||
tokio::time::sleep(Duration::from_millis(500 * rand::random_range(1..6))).await;
|
||||
tokio::time::sleep(Duration::from_millis(50 * rand::random_range(1..10))).await;
|
||||
current_message.as_ref().unwrap()
|
||||
} =>
|
||||
{
|
||||
state_tx.try_send(TransceiverState::Sending);
|
||||
println!("Sending message");
|
||||
Self::transmit(Frame::Data(message.clone()), &mut sample_sender).await;
|
||||
//current_message = None;
|
||||
current_message = None;
|
||||
println!("Sent message");
|
||||
state_tx.try_send(TransceiverState::Waiting);
|
||||
}
|
||||
@ -497,9 +498,13 @@ struct EguiApp {
|
||||
|
||||
eyes: VecDeque<Vec<f32>>,
|
||||
current_state: TransceiverState,
|
||||
iface: Iface,
|
||||
}
|
||||
impl EguiApp {
|
||||
fn new(_cc: &eframe::CreationContext<'_>) -> Self {
|
||||
let iface = Iface::new("radio%d", tun_tap::Mode::Tap).unwrap();
|
||||
iface.set_non_blocking().unwrap();
|
||||
|
||||
let (up_sender, mut up_receiver) = channel::<Vec<f32>>(16);
|
||||
let (down_sender, down_receiver) = channel::<f32>(1024);
|
||||
|
||||
@ -577,7 +582,7 @@ impl EguiApp {
|
||||
*d = stream[progression
|
||||
.fetch_add(1, std::sync::atomic::Ordering::Relaxed)
|
||||
as usize]
|
||||
* 0.1; // TODO
|
||||
* 0.01; // TODO
|
||||
}
|
||||
},
|
||||
move |err| {
|
||||
@ -596,6 +601,7 @@ impl EguiApp {
|
||||
|
||||
eyes: VecDeque::new(),
|
||||
current_state: TransceiverState::Waiting,
|
||||
iface,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -605,6 +611,19 @@ impl eframe::App for EguiApp {
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
let max_eyes = 100;
|
||||
|
||||
// INTERFACE
|
||||
let mut frame = [0u8; 2000];
|
||||
while let Ok(length) = self.iface.recv(&mut frame) {
|
||||
let _ = self
|
||||
.transceiver
|
||||
.get_sender()
|
||||
.try_send(Vec::from(&frame[0..length]));
|
||||
}
|
||||
|
||||
while let Ok(frame) = self.transceiver.try_recv() {
|
||||
let _ = self.iface.send(frame.as_slice());
|
||||
}
|
||||
|
||||
while let Ok(eye) = self.transceiver.try_recv_eye() {
|
||||
self.eyes.push_back(eye);
|
||||
}
|
||||
@ -616,17 +635,17 @@ impl eframe::App for EguiApp {
|
||||
}
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
if ui.button("Start").clicked() {
|
||||
let snd = self.transceiver.get_sender();
|
||||
let data = (0..rand::random_range(50..250))
|
||||
.map(|_| rand::random::<char>() as u8)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
tokio::spawn(async move {
|
||||
let _ = snd.send(data).await;
|
||||
});
|
||||
}
|
||||
|
||||
// if ui.button("Start").clicked() {
|
||||
// let snd = self.transceiver.get_sender();
|
||||
// let data = (0..rand::random_range(50..250))
|
||||
// .map(|_| rand::random::<char>() as u8)
|
||||
// .collect::<Vec<_>>();
|
||||
//
|
||||
// tokio::spawn(async move {
|
||||
// let _ = snd.send(data).await;
|
||||
// });
|
||||
// }
|
||||
//
|
||||
ui.label(
|
||||
RichText::new(format!("{:?}", self.current_state))
|
||||
.size(35.)
|
||||
|
||||
Reference in New Issue
Block a user