recv control input on northbridge
This commit is contained in:
parent
e717238727
commit
b012a83ee0
2 changed files with 28 additions and 2 deletions
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub const BAUDRATE: u32 = 115200;
|
pub const BAUDRATE: u32 = 115200;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
pub enum Command {
|
pub enum Command {
|
||||||
/// Forward, clockwise
|
/// Forward, clockwise
|
||||||
Twist(f32,f32),
|
Twist(f32,f32),
|
||||||
|
|
|
@ -4,7 +4,7 @@ use anyhow::{Context, Result};
|
||||||
use common::{Command, Response, BAUDRATE};
|
use common::{Command, Response, BAUDRATE};
|
||||||
use framed_codec::FramedCodec;
|
use framed_codec::FramedCodec;
|
||||||
use futures::{SinkExt, StreamExt};
|
use futures::{SinkExt, StreamExt};
|
||||||
use tokio::sync::broadcast;
|
use tokio::{io::AsyncReadExt, net::{TcpListener, TcpSocket}, sync::{broadcast, watch::{self, Sender}}};
|
||||||
use tokio_serial::SerialPortBuilderExt;
|
use tokio_serial::SerialPortBuilderExt;
|
||||||
use tokio_util::codec::Framed;
|
use tokio_util::codec::Framed;
|
||||||
|
|
||||||
|
@ -24,6 +24,10 @@ async fn main() -> Result<()> {
|
||||||
Ok(postcard::from_bytes::<Response>(&data.ok().context("decode err")?)?)
|
Ok(postcard::from_bytes::<Response>(&data.ok().context("decode err")?)?)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let (send, commands) = watch::channel(Command::Stop);
|
||||||
|
|
||||||
|
tokio::spawn(control(send));
|
||||||
|
|
||||||
println!("starting");
|
println!("starting");
|
||||||
write.send(Command::Enable).await?;
|
write.send(Command::Enable).await?;
|
||||||
|
|
||||||
|
@ -41,7 +45,29 @@ async fn main() -> Result<()> {
|
||||||
if let Some(data) = data.sensor_data {
|
if let Some(data) = data.sensor_data {
|
||||||
let _ = sensor_sender.send(data);
|
let _ = sensor_sender.send(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write.send(commands.borrow().clone()).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn control(sender: Sender<Command>) -> Result<()> {
|
||||||
|
let listener = TcpListener::bind("0.0.0.0:3322").await?;
|
||||||
|
|
||||||
|
let (mut stream, addr) = listener.accept().await?;
|
||||||
|
|
||||||
|
println!("connected to {addr:?}");
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let len = stream.read_u32().await?;
|
||||||
|
let mut buf = vec![0; len as usize];
|
||||||
|
stream.read_exact(&mut buf).await?;
|
||||||
|
|
||||||
|
let cmd: Command = postcard::from_bytes(&buf)?;
|
||||||
|
|
||||||
|
println!("recv {cmd:?}");
|
||||||
|
|
||||||
|
sender.send(cmd)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue