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 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<Result<()>> = 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();
|
||||
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<Notify>, latest_frame: Arc<RwLock<Vec<u
|
|||
|
||||
let mut encoder = JpegEncoder::new_with_quality(&mut output, 30);
|
||||
|
||||
encoder.encode_image(&frame).unwrap();
|
||||
encoder.encode_image(&frame)?;
|
||||
|
||||
*latest_frame.write().await = output;
|
||||
await_frame.notify_waiters();
|
||||
|
|
Loading…
Reference in a new issue