use input_device::*;
use poller::{EventContext, Events, Poller};
use std::os::unix::io::AsRawFd;
use std::sync::{Arc, Mutex};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let devs = enumerate_shareable();
let mut poller = Poller::new()?;
poller.add(0, Events::new().read(), None)?;
for dev in &devs {
dev.lock().unwrap().set_non_blocking(true);
poller.add(
dev.lock().unwrap().as_raw_fd(),
Events::new().read(),
Some(Arc::clone(&dev) as EventContext),
)?;
}
println!("Press any key to exit ...");
'outer: loop {
let events = poller.pull_events(1000)?;
for (_fd, _events, _ctx) in events.iter() {
if _fd == &0 {
break 'outer;
}
if let Some(x) = _ctx {
if let Some(dev) = x.downcast_ref::<Mutex<Device>>() {
for ev in dev.lock().unwrap().events() {
println!("ev={:?}", ev);
}
}
}
}
}
Ok(())
}