diff --git a/Cargo.lock b/Cargo.lock index 3c42fb7..33db438 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,7 +52,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] -name = "kwargs" +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "lollipop" version = "0.1.0" dependencies = [ "evdev", @@ -60,12 +66,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "libc" -version = "0.2.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" - [[package]] name = "mio" version = "1.1.1" diff --git a/src/main.rs b/src/main.rs index 412bb05..f76ef18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use evdev::{Device, InputEvent, KeyEvent}; +use evdev::{Device, InputEvent, KeyEvent, LedCode, LedEvent}; use std::collections::BTreeMap; use std::fmt::Debug; use std::time::{Duration, SystemTime}; @@ -83,6 +83,14 @@ impl InternalState { Some(events) } + + fn led_state(&self) -> i32 { + if self.map.values().any(|v| !matches!(v, KeyState::None)) { + i32::MAX + } else { + 0 + } + } } fn pick_device() -> Option { @@ -94,11 +102,11 @@ fn pick_device() -> Option { #[tokio::main] async fn main() -> Result<(), Box> { - let Some(mut d) = pick_device() else { + let (Some(mut d), Some(mut led_sink)) = (pick_device(), pick_device()) else { return Ok(()); }; while !d.is_grabbed() { - println!("trying to grab"); + // println!("trying to grab"); let _ = d.grab(); } @@ -133,9 +141,11 @@ async fn main() -> Result<(), Box> { match events.next_event().await?.destructure() { evdev::EventSummary::Key(key_event, key_code, pressed) => { if let Some(events) = state.morph(key_code, pressed, key_event.timestamp()) { - println!("{state:#?}"); + // println!("{state:#?}"); device.emit(&events)?; }; + + led_sink.send_events(&[*LedEvent::new(LedCode::LED_CAPSL, state.led_state())])?; } _ => {} }