fixed issue with hid_report

This commit is contained in:
Brad Stein 2025-06-01 21:16:26 -05:00
parent 6d81aa3a17
commit 685ace2dff

View File

@ -2,46 +2,43 @@
#![forbid(unsafe_code)]
use anyhow::Result;
use navka_common::navka::{hid_report::*, relay_client::RelayClient, HidReport};
use navka_common::navka::{relay_client::RelayClient, HidReport}; // <- only items that exist
use tokio::{sync::mpsc, time::sleep};
use tokio_stream::wrappers::ReceiverStream;
use tonic::{transport::Channel, Request};
#[tokio::main]
async fn main() -> Result<()> {
// Connect to navka-server (adjust the address if server not local)
let channel = Channel::from_static("http://127.0.0.1:50051")
// -- 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").ok())
.unwrap_or_else(|| "http://127.0.0.1:50051".to_owned());
let channel: Channel = Channel::from_shared(addr)?
.connect()
.await?;
// mpsc channel -> ReceiverStream -> gRPC bidirectional stream
// mpsc -> ReceiverStream -> bidirectional gRPC
let (tx, rx) = mpsc::channel::<HidReport>(32);
let outbound = ReceiverStream::new(rx);
// Kick off the RPC note: in tonic 0.11 the request object is built
// by wrapping the outbound stream in `Request::new(...)`.
let mut inbound = RelayClient::new(channel)
.stream(Request::new(outbound))
.await?
.into_inner();
// Example task: press and release the 'a' key once.
// demo: press & release a
tokio::spawn(async move {
// 8-byte boot-keyboard report: [mods, reserved, key1..6]
let press_a = HidReport {
data: vec![0x00, 0x00, 0x04, 0, 0, 0, 0, 0],
};
let press_a = HidReport { data: vec![0, 0, 0x04, 0, 0, 0, 0, 0] };
let release = HidReport { data: vec![0; 8] };
tx.send(press_a).await.ok();
sleep(std::time::Duration::from_millis(100)).await;
tx.send(release).await.ok();
});
// Print whatever the server echoes back.
while let Some(report) = inbound.message().await? {
println!("🔄 received: {:?}", report.data);
println!("🔄 got report from server: {:?}", report.data);
}
Ok(())
}