diff --git a/encoder/src/main.rs b/encoder/src/main.rs index 6947e86..c30ad17 100644 --- a/encoder/src/main.rs +++ b/encoder/src/main.rs @@ -1,11 +1,11 @@ -use std::{array::from_ref, net::SocketAddr, result, sync::Arc, thread::{self, sleep}, time::Duration}; +use std::{array::from_ref, net::SocketAddr, result, sync::Arc, thread::{self}, time::{Duration, SystemTime, UNIX_EPOCH}}; use battery::Manager; use image::{codecs::jpeg::JpegEncoder, ImageBuffer, Rgb}; use nokhwa::{pixel_format::RgbFormat, utils::{ApiBackend, RequestedFormat, RequestedFormatType, Resolution}, Camera}; use anyhow::{Context, Ok, Result}; use serde::{Deserialize, Serialize}; -use tokio::{io::{AsyncBufReadExt, AsyncWriteExt, BufReader}, net::{TcpListener, TcpStream}, runtime::Runtime, sync::{Notify, RwLock}, task::{JoinHandle, LocalSet}}; +use tokio::{io::{AsyncBufReadExt, AsyncWriteExt, BufReader}, net::{TcpListener, TcpStream}, runtime::Runtime, sync::{Notify, RwLock}, task::{JoinHandle, LocalSet}, time::sleep}; fn main() -> Result<()>{ let await_frame = Arc::new(Notify::new()); @@ -41,6 +41,7 @@ fn main() -> Result<()>{ #[derive(Serialize)] struct Telemetry { battery_level: f32, + timestamp: u64, } #[derive(Deserialize, Debug)] @@ -69,18 +70,22 @@ async fn telemetry_server() -> Result<()>{ Ok(()) }); - tokio::spawn(async move { + let _: JoinHandle> = tokio::spawn(async move { let battery = Manager::new()?.batteries()?.nth(0).context("no battery")??; let full = battery.energy_full(); - let mock = Telemetry { battery_level: (battery.energy()/full).value * 100. } ; + loop { + let time = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis(); + let mock = Telemetry { battery_level: (battery.energy()/full).value * 100., timestamp: time as u64 } ; - let mut send = serde_json::to_vec(&mock).unwrap(); - send.push(b'\r'); - send.push(b'\n'); + let mut send = serde_json::to_vec(&mock)?; + send.push(b'\r'); + send.push(b'\n'); - sender.write_all(&send).await.unwrap(); - Ok(()) + sender.write_all(&send).await?; + + sleep(Duration::from_millis(20)).await; + } }); } @@ -106,7 +111,7 @@ async fn camera_manager(await_frame: Arc, latest_frame: Arc