summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs85
1 files changed, 9 insertions, 76 deletions
diff --git a/src/main.rs b/src/main.rs
index f157288..78f9308 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,12 +1,13 @@
use anyhow::*;
-use evdev::enums::{EventCode, EV_KEY as KeyCode};
-use evdev::{Device, GrabMode, InputEvent, ReadFlag, TimeVal, UInputDevice};
-use evdev_rs as evdev;
+use evdev_rs::enums::{EventCode, EV_KEY as KeyCode};
+use evdev_rs::{Device, GrabMode, InputEvent, ReadFlag, TimeVal, UInputDevice};
use std::collections::{HashMap, HashSet};
-use std::path::{Path, PathBuf};
+use std::path::Path;
use std::time::Duration;
use structopt::StructOpt;
+mod deviceinfo;
+
#[derive(Debug, StructOpt)]
#[structopt(
name = "evremap",
@@ -383,80 +384,12 @@ fn make_event(key: KeyCode, time: &TimeVal, event_type: KeyEventType) -> InputEv
InputEvent::new(time, &EventCode::EV_KEY(key), event_type.value())
}
-struct DeviceInfo {
- name: String,
- path: PathBuf,
-}
-
-impl DeviceInfo {
- pub fn with_path(path: PathBuf) -> Result<Self> {
- let f = std::fs::File::open(&path).context(format!("opening {}", path.display()))?;
- let mut input = Device::new().ok_or_else(|| anyhow!("failed to make new Device"))?;
- input
- .set_fd(f)
- .context(format!("assigning fd for {} to Device", path.display()))?;
-
- Ok(Self {
- name: input.name().unwrap_or("").to_string(),
- path,
- })
- }
-
- pub fn with_name(name: &str) -> Result<Self> {
- let devices = Self::obtain_device_list()?;
- for item in devices {
- if item.name == name {
- return Ok(item);
- }
- }
- bail!("No device found with name `{}`", name);
- }
-
- fn obtain_device_list() -> Result<Vec<DeviceInfo>> {
- let mut devices = vec![];
- for entry in std::fs::read_dir("/dev/input")? {
- let entry = entry?;
-
- if !entry
- .file_name()
- .to_str()
- .unwrap_or("")
- .starts_with("event")
- {
- continue;
- }
- let path = entry.path();
- if path.is_dir() {
- continue;
- }
-
- match DeviceInfo::with_path(path) {
- Ok(item) => devices.push(item),
- Err(err) => log::error!("{}", err),
- }
- }
-
- devices.sort_by(|a, b| a.name.cmp(&b.name));
- Ok(devices)
- }
-}
-
-fn list_devices() -> Result<()> {
- let devices = DeviceInfo::obtain_device_list()?;
- for item in &devices {
- println!("Name: {}", item.name);
- println!("Path: {}", item.path.display());
- println!();
- }
- Ok(())
-}
-
fn main() -> Result<()> {
pretty_env_logger::init();
let opt = Opt::from_args();
if opt.list_devices {
- return list_devices();
+ return deviceinfo::list_devices();
}
let mappings = vec![
@@ -486,7 +419,7 @@ fn main() -> Result<()> {
log::error!("Short delay: release any keys now!");
std::thread::sleep(Duration::new(2, 0));
- let device_info = DeviceInfo::with_name("AT Translated Set 2 keyboard")?;
+ let device_info = deviceinfo::DeviceInfo::with_name("AT Translated Set 2 keyboard")?;
let mut mapper = InputMapper::create_mapper(device_info.path, mappings)?;
@@ -496,7 +429,7 @@ fn main() -> Result<()> {
.input
.next_event(ReadFlag::NORMAL | ReadFlag::BLOCKING)?;
match status {
- evdev::ReadStatus::Success => {
+ evdev_rs::ReadStatus::Success => {
if let EventCode::EV_KEY(ref key) = event.event_code {
log::trace!("IN {:?}", event);
mapper.update_with_event(&event, key.clone())?;
@@ -505,7 +438,7 @@ fn main() -> Result<()> {
mapper.output.write_event(&event)?;
}
}
- evdev::ReadStatus::Sync => bail!("ReadStatus::Sync!"),
+ evdev_rs::ReadStatus::Sync => bail!("ReadStatus::Sync!"),
}
}
}