diff --git a/Cargo.lock b/Cargo.lock
index d36db5740f..9398d25a36 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -892,7 +892,6 @@ version = "0.1.0"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"orbclient 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_event 0.1.0 (git+https://gitlab.redox-os.org/redox-os/event.git)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
]
diff --git a/ps2d/Cargo.toml b/ps2d/Cargo.toml
index 34ef208a98..f1da6df454 100644
--- a/ps2d/Cargo.toml
+++ b/ps2d/Cargo.toml
@@ -6,5 +6,4 @@ edition = "2018"
[dependencies]
bitflags = "0.7"
orbclient = "0.3.27"
-redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" }
redox_syscall = "0.1"
diff --git a/ps2d/src/main.rs b/ps2d/src/main.rs
index 3e896a9253..8d00348830 100644
--- a/ps2d/src/main.rs
+++ b/ps2d/src/main.rs
@@ -2,18 +2,15 @@
#[macro_use]
extern crate bitflags;
-extern crate event;
extern crate orbclient;
extern crate syscall;
use std::{env, process};
-use std::cell::RefCell;
-use std::fs::File;
-use std::io::{Read, Write, Result};
+use std::fs::{File, OpenOptions};
+use std::io::{Read, Write};
+use std::os::unix::fs::OpenOptionsExt;
use std::os::unix::io::AsRawFd;
-use std::sync::Arc;
-use event::EventQueue;
use syscall::iopl;
use crate::state::Ps2d;
@@ -41,46 +38,79 @@ fn daemon(input: File) {
None => (keymap::us::get_char)
};
- let mut key_irq = File::open("irq:1").expect("ps2d: failed to open irq:1");
+ let mut event_file = OpenOptions::new()
+ .read(true)
+ .write(true)
+ .open("event:")
+ .expect("ps2d: failed to open event:");
- let mut mouse_irq = File::open("irq:12").expect("ps2d: failed to open irq:12");
+ let mut key_file = OpenOptions::new()
+ .read(true)
+ .write(true)
+ .custom_flags(syscall::O_NONBLOCK as i32)
+ .open("serio:0")
+ .expect("ps2d: failed to open serio:0");
- let ps2d = Arc::new(RefCell::new(Ps2d::new(input, keymap)));
+ event_file.write(&syscall::Event {
+ id: key_file.as_raw_fd() as usize,
+ flags: syscall::EVENT_READ,
+ data: 0
+ }).expect("ps2d: failed to event serio:0");
- let mut event_queue = EventQueue::<()>::new().expect("ps2d: failed to create event queue");
+ let mut mouse_file = OpenOptions::new()
+ .read(true)
+ .write(true)
+ .custom_flags(syscall::O_NONBLOCK as i32)
+ .open("serio:1")
+ .expect("ps2d: failed to open serio:1");
+
+ event_file.write(&syscall::Event {
+ id: mouse_file.as_raw_fd() as usize,
+ flags: syscall::EVENT_READ,
+ data: 1
+ }).expect("ps2d: failed to event irq:12");
+
+ let mut ps2d = Ps2d::new(input, keymap);
syscall::setrens(0, 0).expect("ps2d: failed to enter null namespace");
- let key_ps2d = ps2d.clone();
- event_queue.add(key_irq.as_raw_fd(), move |_event| -> Result