receive control data
This commit is contained in:
parent
170a32d483
commit
b50bc79a25
2 changed files with 33 additions and 13 deletions
|
@ -11,5 +11,5 @@ nokhwa = { version = "0.10.7", features = ["input-native"] }
|
||||||
openh264 = "0.6.6"
|
openh264 = "0.6.6"
|
||||||
serde = { version = "1.0.217", features = ["derive"] }
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
serde_json = "1.0.134"
|
serde_json = "1.0.134"
|
||||||
tokio = { version = "1.42.0", features = ["full"] }
|
tokio = { version = "1.42.0", features = ["full", "io-util"] }
|
||||||
zune-jpeg = "0.4.14"
|
zune-jpeg = "0.4.14"
|
||||||
|
|
|
@ -4,8 +4,8 @@ use battery::Manager;
|
||||||
use image::{codecs::jpeg::JpegEncoder, ImageBuffer, Rgb};
|
use image::{codecs::jpeg::JpegEncoder, ImageBuffer, Rgb};
|
||||||
use nokhwa::{pixel_format::RgbFormat, utils::{ApiBackend, RequestedFormat, RequestedFormatType, Resolution}, Camera};
|
use nokhwa::{pixel_format::RgbFormat, utils::{ApiBackend, RequestedFormat, RequestedFormatType, Resolution}, Camera};
|
||||||
use anyhow::{Context, Ok, Result};
|
use anyhow::{Context, Ok, Result};
|
||||||
use serde::Serialize;
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::{io::AsyncWriteExt, net::{TcpListener, TcpStream}, runtime::Runtime, sync::{Notify, RwLock}, task::LocalSet};
|
use tokio::{io::{AsyncBufReadExt, AsyncWriteExt, BufReader}, net::{TcpListener, TcpStream}, runtime::Runtime, sync::{Notify, RwLock}, task::{JoinHandle, LocalSet}};
|
||||||
|
|
||||||
fn main() -> Result<()>{
|
fn main() -> Result<()>{
|
||||||
let await_frame = Arc::new(Notify::new());
|
let await_frame = Arc::new(Notify::new());
|
||||||
|
@ -43,25 +43,45 @@ struct Telemetry {
|
||||||
battery_level: f32,
|
battery_level: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct Control {
|
||||||
|
#[serde(rename = "Data")]
|
||||||
|
data: f32,
|
||||||
|
}
|
||||||
|
|
||||||
async fn telemetry_server() -> Result<()>{
|
async fn telemetry_server() -> Result<()>{
|
||||||
let port = 2994;
|
let port = 2994;
|
||||||
let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await?;
|
let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await?;
|
||||||
|
|
||||||
let battery = Manager::new()?.batteries()?.nth(0).context("no battery")??;
|
while let result::Result::Ok((connection, addr)) = listener.accept().await {
|
||||||
let full = battery.energy_full();
|
println!("telemetry connection from {:?}", addr);
|
||||||
|
let (receiver, mut sender) = connection.into_split();
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
|
let mut reader = BufReader::new(receiver).lines();
|
||||||
|
while let Some(line) = reader.next_line().await? {
|
||||||
|
println!("recv: {line}");
|
||||||
|
if let result::Result::Ok(control) = serde_json::from_str::<Control>(&line) {
|
||||||
|
println!("deserialized: data is {}", control.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while let result::Result::Ok(mut connection) = listener.accept().await {
|
Ok(())
|
||||||
println!("telemetry connection from {:?}", connection.1);
|
});
|
||||||
let (_receiver, mut sender) = connection.0.split();
|
|
||||||
|
|
||||||
let mock = Telemetry { battery_level: (battery.energy()/full).value * 100. } ;
|
tokio::spawn(async move {
|
||||||
|
let battery = Manager::new()?.batteries()?.nth(0).context("no battery")??;
|
||||||
|
let full = battery.energy_full();
|
||||||
|
|
||||||
let mut send = serde_json::to_vec(&mock).unwrap();
|
let mock = Telemetry { battery_level: (battery.energy()/full).value * 100. } ;
|
||||||
send.push(b'\r');
|
|
||||||
send.push(b'\n');
|
|
||||||
|
|
||||||
sender.write_all(&send).await?;
|
let mut send = serde_json::to_vec(&mock).unwrap();
|
||||||
|
send.push(b'\r');
|
||||||
|
send.push(b'\n');
|
||||||
|
|
||||||
|
sender.write_all(&send).await.unwrap();
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue