feat: indicate locked/latched state with capslock led
This commit is contained in:
14
Cargo.lock
generated
14
Cargo.lock
generated
@@ -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"
|
||||
|
||||
18
src/main.rs
18
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<Device> {
|
||||
@@ -94,11 +102,11 @@ fn pick_device() -> Option<Device> {
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
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<dyn std::error::Error>> {
|
||||
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())])?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user