use evdev::{Device, InputEventKind}; use navka_common::navka::{relay_client::RelayClient, HidReport}; use tonic::transport::Channel; const KEYBOARD: &str = "/dev/input/event4"; // adjust const NAVKA_IP: &str = "192.168.42.253:4000"; #[tokio::main] async fn main() -> anyhow::Result<()> { // open evdev let mut dev = Device::open(KEYBOARD)?; // connect to navka let channel = Channel::from_shared(format!("http://{NAVKA_IP}"))? .connect().await?; let (mut tx, _rx) = RelayClient::new(channel).stream().await?.into_inner(); loop { for ev in dev.fetch_events()? { if let InputEventKind::Key(code) = ev.kind() { // simple map: only letters a-z for PoC let usage = match code.0 { 30..=55 => (code.0 - 26) as u8, // HID usage 0x04..0x1d _ => continue, }; let mut buf = [0u8; 8]; buf[2] = if ev.value() == 1 { usage } else { 0 }; tx.send(HidReport { data: buf.to_vec() }).await?; } } } }