fixed issue with hid_report
This commit is contained in:
parent
6d81aa3a17
commit
685ace2dff
@ -2,46 +2,43 @@
|
|||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
|
|
||||||
use anyhow::Result;
|
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::{sync::mpsc, time::sleep};
|
||||||
use tokio_stream::wrappers::ReceiverStream;
|
use tokio_stream::wrappers::ReceiverStream;
|
||||||
use tonic::{transport::Channel, Request};
|
use tonic::{transport::Channel, Request};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
// Connect to navka-server (adjust the address if server not local)
|
// -- server address comes from CLI arg, env or falls back to localhost
|
||||||
let channel = Channel::from_static("http://127.0.0.1:50051")
|
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()
|
.connect()
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// mpsc channel -> ReceiverStream -> gRPC bidirectional stream
|
// mpsc -> ReceiverStream -> bidirectional gRPC
|
||||||
let (tx, rx) = mpsc::channel::<HidReport>(32);
|
let (tx, rx) = mpsc::channel::<HidReport>(32);
|
||||||
let outbound = ReceiverStream::new(rx);
|
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)
|
let mut inbound = RelayClient::new(channel)
|
||||||
.stream(Request::new(outbound))
|
.stream(Request::new(outbound))
|
||||||
.await?
|
.await?
|
||||||
.into_inner();
|
.into_inner();
|
||||||
|
|
||||||
// Example task: press and release the 'a' key once.
|
// demo: press & release ‘a’
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
// 8-byte boot-keyboard report: [mods, reserved, key1..6]
|
let press_a = HidReport { data: vec![0, 0, 0x04, 0, 0, 0, 0, 0] };
|
||||||
let press_a = HidReport {
|
|
||||||
data: vec![0x00, 0x00, 0x04, 0, 0, 0, 0, 0],
|
|
||||||
};
|
|
||||||
let release = HidReport { data: vec![0; 8] };
|
let release = HidReport { data: vec![0; 8] };
|
||||||
|
|
||||||
tx.send(press_a).await.ok();
|
tx.send(press_a).await.ok();
|
||||||
sleep(std::time::Duration::from_millis(100)).await;
|
sleep(std::time::Duration::from_millis(100)).await;
|
||||||
tx.send(release).await.ok();
|
tx.send(release).await.ok();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Print whatever the server echoes back.
|
|
||||||
while let Some(report) = inbound.message().await? {
|
while let Some(report) = inbound.message().await? {
|
||||||
println!("🔄 received: {:?}", report.data);
|
println!("🔄 got report from server: {:?}", report.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user