From bb9748b42320d6d30ee822e76b2800a4aab84735 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 6 Jun 2025 00:21:20 -0500 Subject: [PATCH] updates --- client/src/main.rs | 13 +++++-------- server/src/main.rs | 30 ++++++++++++------------------ 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/client/src/main.rs b/client/src/main.rs index 960b843..0545c6d 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -2,21 +2,19 @@ #![forbid(unsafe_code)] use anyhow::Result; -use navka_common::navka::{relay_client::RelayClient, HidReport}; // <- only items that exist +use navka_common::navka::{relay_client::RelayClient, HidReport}; use tokio::{sync::mpsc, time::sleep}; use tokio_stream::wrappers::ReceiverStream; use tonic::{transport::Channel, Request}; -tracing_subscriber::fmt::init(); -tracing::info!(bytes=?data, len=%data.len(), "HID report received"); - #[tokio::main] async fn main() -> Result<()> { + tracing_subscriber::fmt::init(); + // -- server address comes from CLI arg, env or falls back to localhost let addr = std::env::args() .nth(1) - .or_else(|| std::env::var("NAVKA_SERVER_ADDR") - .or_else(|_| std::env::var("LAUNCHER_NAVKA_SERVER_ADDR")).ok()) + .or_else(|| std::env::var("NAVKA_SERVER_ADDR").ok()) .unwrap_or_else(|| "http://127.0.0.1:50051".to_owned()); let channel: Channel = Channel::from_shared(addr)? @@ -26,7 +24,6 @@ async fn main() -> Result<()> { // mpsc -> ReceiverStream -> bidirectional gRPC let (tx, rx) = mpsc::channel::(32); let outbound = ReceiverStream::new(rx); - let mut inbound = RelayClient::new(channel) .stream(Request::new(outbound)) .await? @@ -42,7 +39,7 @@ async fn main() -> Result<()> { }); while let Some(report) = inbound.message().await? { - println!("🔄 {:?}", report.data); + tracing::info!(bytes=?report.data, "echo from server"); } Ok(()) } diff --git a/server/src/main.rs b/server/src/main.rs index c916002..800dc6f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -13,9 +13,6 @@ use navka_common::navka::{ HidReport, }; -tracing_subscriber::fmt::init(); -tracing::info!(bytes=?data, len=%data.len(), "HID report received"); - struct Handler { /// shared async handle to /dev/hidg0 hid: Arc>, @@ -32,24 +29,22 @@ impl Relay for Handler { ) -> Result, Status> { let mut in_stream = request.into_inner(); let hid = self.hid.clone(); - - // echo everything back to caller & push down USB let (tx, rx) = tokio::sync::mpsc::channel(32); tokio::spawn(async move { while let Some(msg) = in_stream.next().await.transpose()? { // 1) write to /dev/hidg0 - let mut file = hid.lock().await; - let data = &msg.data[..8]; - file.write_all(data).await - .map_err(|e| Status::internal(e.to_string()))?; - file.flush().await.ok(); - - // 2) structured log (shows hex + length) - info!(bytes = ?msg.data, len = msg.data.len(), "HID report received"); - - // 3) echo back - tx.send(Ok(msg)).await.ok(); + let data = msg.data.get(..8).ok_or_else(|| Status::invalid_argument("short"))?; + { + let mut f = hid.lock().await; + if let Err(e) = f.write_all(data).await { + error!("USB write failed: {e}"); + return Err(Status::internal(e.to_string())); + } + f.flush().await.ok(); + } + info!(bytes=?data, len=data.len(), "HID report received"); + let _ = tx.send(Ok(msg)).await; } Ok::<_, Status>(()) }); @@ -60,8 +55,7 @@ impl Relay for Handler { #[tokio::main] async fn main() -> anyhow::Result<()> { - let subscriber = FmtSubscriber::builder().with_target(false).finish(); - tracing::subscriber::set_global_default(subscriber)?; + tracing_subscriber::fmt::init(); let file = OpenOptions::new() .write(true)