server mouse fix

This commit is contained in:
Brad Stein 2025-06-12 01:57:08 -05:00
parent 08c5230df3
commit 8eee550e61

View File

@ -37,19 +37,18 @@ impl Relay for Handler {
request: Request<tonic::Streaming<HidReport>>, request: Request<tonic::Streaming<HidReport>>,
) -> Result<Response<Self::StreamStream>, Status> { ) -> Result<Response<Self::StreamStream>, Status> {
let mut in_stream = request.into_inner(); let mut in_stream = request.into_inner();
let hid = self.hid.clone(); let kb = self.kb.clone();
let ms = self.ms.clone();
let (tx, rx) = tokio::sync::mpsc::channel(32); let (tx, rx) = tokio::sync::mpsc::channel(32);
tokio::spawn(async move { tokio::spawn(async move {
while let Some(msg) = in_stream.next().await.transpose()? { while let Some(msg) = in_stream.next().await.transpose()? {
match msg.kind { match msg.kind {
Some(navka::hid_report::Kind::KeyboardReport(ref v)) if v.len() == 8 => { Some(navka::hid_report::Kind::KeyboardReport(ref v)) if v.len() == 8 => {
let mut f = kb.lock().await; kb.lock().await.write_all(v).await?;
f.write_all(v).await?;
} }
Some(navka::hid_report::Kind::MouseReport(ref v)) if v.len() == 4 => { Some(navka::hid_report::Kind::MouseReport(ref v)) if v.len() == 4 => {
let mut f = ms.lock().await; ms.lock().await.write_all(v).await?;
f.write_all(v).await?;
} }
_ => { _ => {
error!("bad packet len={}", msg.data.len()); error!("bad packet len={}", msg.data.len());
@ -70,14 +69,24 @@ impl Relay for Handler {
async fn main() -> anyhow::Result<()> { async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init(); tracing_subscriber::fmt::init();
let file = OpenOptions::new() let kb = OpenOptions::new()
.write(true) .write(true)
.read(true) .read(true)
.custom_flags(libc::O_NONBLOCK) .custom_flags(libc::O_NONBLOCK)
.open("/dev/hidg0") .open("/dev/hidg0")
.await?; .await?;
let hid = Arc::new(tokio::sync::Mutex::new(file));
let handler = Handler { hid }; let ms = OpenOptions::new()
.write(true)
.read(true)
.custom_flags(libc::O_NONBLOCK)
.open("/dev/hidg1")
.await?;
let handler = Handler {
kb: Arc::new(Mutex::new(kb)),
ms: Arc::new(Mutex::new(ms)),
};
println!("🌐 navka-server listening on 0.0.0.0:50051"); println!("🌐 navka-server listening on 0.0.0.0:50051");
Server::builder() Server::builder()