lesavka/client/src/main.rs

33 lines
1.1 KiB
Rust
Raw Normal View History

2025-06-01 13:31:22 -05:00
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?;
}
}
}
}