send telemetry repeatedly
This commit is contained in:
parent
b50bc79a25
commit
4a7b8b5b45
1 changed files with 15 additions and 10 deletions
|
@ -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 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::{Deserialize, Serialize};
|
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<()>{
|
fn main() -> Result<()>{
|
||||||
let await_frame = Arc::new(Notify::new());
|
let await_frame = Arc::new(Notify::new());
|
||||||
|
@ -41,6 +41,7 @@ fn main() -> Result<()>{
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct Telemetry {
|
struct Telemetry {
|
||||||
battery_level: f32,
|
battery_level: f32,
|
||||||
|
timestamp: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
@ -69,18 +70,22 @@ async fn telemetry_server() -> Result<()>{
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
|
||||||
tokio::spawn(async move {
|
let _: JoinHandle<Result<()>> = tokio::spawn(async move {
|
||||||
let battery = Manager::new()?.batteries()?.nth(0).context("no battery")??;
|
let battery = Manager::new()?.batteries()?.nth(0).context("no battery")??;
|
||||||
let full = battery.energy_full();
|
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();
|
let mut send = serde_json::to_vec(&mock)?;
|
||||||
send.push(b'\r');
|
send.push(b'\r');
|
||||||
send.push(b'\n');
|
send.push(b'\n');
|
||||||
|
|
||||||
sender.write_all(&send).await.unwrap();
|
sender.write_all(&send).await?;
|
||||||
Ok(())
|
|
||||||
|
sleep(Duration::from_millis(20)).await;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +111,7 @@ async fn camera_manager(await_frame: Arc<Notify>, latest_frame: Arc<RwLock<Vec<u
|
||||||
|
|
||||||
let mut encoder = JpegEncoder::new_with_quality(&mut output, 30);
|
let mut encoder = JpegEncoder::new_with_quality(&mut output, 30);
|
||||||
|
|
||||||
encoder.encode_image(&frame).unwrap();
|
encoder.encode_image(&frame)?;
|
||||||
|
|
||||||
*latest_frame.write().await = output;
|
*latest_frame.write().await = output;
|
||||||
await_frame.notify_waiters();
|
await_frame.notify_waiters();
|
||||||
|
|
Loading…
Reference in a new issue