input: Introduce ProducerHandle type
This commit is contained in:
Generated
+3
@@ -190,6 +190,7 @@ name = "bgad"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"common",
|
||||
"inputd",
|
||||
"libredox",
|
||||
"orbclient",
|
||||
"pcid",
|
||||
@@ -1035,6 +1036,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"common",
|
||||
"inputd",
|
||||
"libredox",
|
||||
"log",
|
||||
"orbclient",
|
||||
@@ -1594,6 +1596,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"bitflags 2.6.0",
|
||||
"common",
|
||||
"inputd",
|
||||
"log",
|
||||
"orbclient",
|
||||
"redox_syscall",
|
||||
|
||||
@@ -9,5 +9,6 @@ redox-daemon = "0.1"
|
||||
redox_syscall = "0.5"
|
||||
|
||||
common = { path = "../../common" }
|
||||
inputd = { path = "../../inputd" }
|
||||
pcid = { path = "../../pcid" }
|
||||
libredox = "0.1.3"
|
||||
|
||||
@@ -4,6 +4,7 @@ extern crate syscall;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
|
||||
use inputd::ProducerHandle;
|
||||
use pcid_interface::PciFunctionHandle;
|
||||
use syscall::call::iopl;
|
||||
use syscall::data::Packet;
|
||||
@@ -35,7 +36,7 @@ fn main() {
|
||||
|
||||
let mut scheme = BgaScheme {
|
||||
bga,
|
||||
display: File::open("/scheme/input/producer").ok(),
|
||||
display: ProducerHandle::new().ok(),
|
||||
};
|
||||
|
||||
scheme.update_size();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::str;
|
||||
use inputd::ProducerHandle;
|
||||
use syscall::data::Stat;
|
||||
use syscall::{Error, Result, SchemeMut, EACCES, EINVAL, MODE_CHR};
|
||||
|
||||
@@ -8,14 +7,14 @@ use crate::bga::Bga;
|
||||
|
||||
pub struct BgaScheme {
|
||||
pub bga: Bga,
|
||||
pub display: Option<File>,
|
||||
pub display: Option<ProducerHandle>,
|
||||
}
|
||||
|
||||
impl BgaScheme {
|
||||
pub fn update_size(&mut self) {
|
||||
if let Some(ref mut display) = self.display {
|
||||
let _ = display.write(
|
||||
&orbclient::ResizeEvent {
|
||||
let _ = display.write_event(
|
||||
orbclient::ResizeEvent {
|
||||
width: self.bga.width() as u32,
|
||||
height: self.bga.height() as u32,
|
||||
}
|
||||
|
||||
@@ -13,3 +13,4 @@ redox-daemon = "0.1"
|
||||
libredox = "0.1.3"
|
||||
|
||||
common = { path = "../../common" }
|
||||
inputd = { path = "../../inputd" }
|
||||
|
||||
@@ -12,6 +12,7 @@ use std::os::unix::io::AsRawFd;
|
||||
use std::{env, process};
|
||||
|
||||
use event::{user_data, EventQueue};
|
||||
use inputd::ProducerHandle;
|
||||
use log::info;
|
||||
use syscall::call::iopl;
|
||||
|
||||
@@ -50,10 +51,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
|
||||
info!("ps2d: using keymap '{}'", keymap_name);
|
||||
|
||||
let input = OpenOptions::new()
|
||||
.write(true)
|
||||
.open("/scheme/input/producer")
|
||||
.expect("ps2d: failed to open /scheme/input/producer");
|
||||
let input = ProducerHandle::new().expect("ps2d: failed to open input producer");
|
||||
|
||||
user_data! {
|
||||
enum Source {
|
||||
|
||||
+22
-26
@@ -1,8 +1,4 @@
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::os::unix::io::AsRawFd;
|
||||
use std::str;
|
||||
|
||||
use inputd::ProducerHandle;
|
||||
use log::{error, warn};
|
||||
use orbclient::{ButtonEvent, KeyEvent, MouseEvent, MouseRelativeEvent, ScrollEvent};
|
||||
|
||||
@@ -26,7 +22,7 @@ pub struct Ps2d<F: Fn(u8, bool) -> char> {
|
||||
ps2: Ps2,
|
||||
vmmouse: bool,
|
||||
vmmouse_relative: bool,
|
||||
input: File,
|
||||
input: ProducerHandle,
|
||||
extended: bool,
|
||||
lshift: bool,
|
||||
rshift: bool,
|
||||
@@ -43,7 +39,7 @@ pub struct Ps2d<F: Fn(u8, bool) -> char> {
|
||||
}
|
||||
|
||||
impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
pub fn new(input: File, keymap: F) -> Self {
|
||||
pub fn new(input: ProducerHandle, keymap: F) -> Self {
|
||||
let mut ps2 = Ps2::new();
|
||||
let extra_packet = ps2.init().expect("ps2d: failed to initialize");
|
||||
|
||||
@@ -229,8 +225,8 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
|
||||
if scancode != 0 {
|
||||
self.input
|
||||
.write(
|
||||
&KeyEvent {
|
||||
.write_event(
|
||||
KeyEvent {
|
||||
character: (self.get_char)(
|
||||
ps2_scancode,
|
||||
self.lshift || self.rshift,
|
||||
@@ -263,8 +259,8 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
if self.vmmouse_relative {
|
||||
if dx != 0 || dy != 0 {
|
||||
self.input
|
||||
.write(
|
||||
&MouseRelativeEvent {
|
||||
.write_event(
|
||||
MouseRelativeEvent {
|
||||
dx: dx as i32,
|
||||
dy: dy as i32,
|
||||
}
|
||||
@@ -279,15 +275,15 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
self.mouse_x = x;
|
||||
self.mouse_y = y;
|
||||
self.input
|
||||
.write(&MouseEvent { x, y }.to_event())
|
||||
.write_event(MouseEvent { x, y }.to_event())
|
||||
.expect("ps2d: failed to write mouse event");
|
||||
}
|
||||
};
|
||||
|
||||
if dz != 0 {
|
||||
self.input
|
||||
.write(
|
||||
&ScrollEvent {
|
||||
.write_event(
|
||||
ScrollEvent {
|
||||
x: 0,
|
||||
y: -(dz as i32),
|
||||
}
|
||||
@@ -307,11 +303,11 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
self.mouse_middle = middle;
|
||||
self.mouse_right = right;
|
||||
self.input
|
||||
.write(
|
||||
&ButtonEvent {
|
||||
left: left,
|
||||
middle: middle,
|
||||
right: right,
|
||||
.write_event(
|
||||
ButtonEvent {
|
||||
left,
|
||||
middle,
|
||||
right,
|
||||
}
|
||||
.to_event(),
|
||||
)
|
||||
@@ -355,13 +351,13 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
|
||||
if dx != 0 || dy != 0 {
|
||||
self.input
|
||||
.write(&MouseRelativeEvent { dx: dx, dy: dy }.to_event())
|
||||
.write_event(MouseRelativeEvent { dx, dy }.to_event())
|
||||
.expect("ps2d: failed to write mouse event");
|
||||
}
|
||||
|
||||
if dz != 0 {
|
||||
self.input
|
||||
.write(&ScrollEvent { x: 0, y: dz }.to_event())
|
||||
.write_event(ScrollEvent { x: 0, y: dz }.to_event())
|
||||
.expect("ps2d: failed to write scroll event");
|
||||
}
|
||||
|
||||
@@ -376,11 +372,11 @@ impl<F: Fn(u8, bool) -> char> Ps2d<F> {
|
||||
self.mouse_middle = middle;
|
||||
self.mouse_right = right;
|
||||
self.input
|
||||
.write(
|
||||
&ButtonEvent {
|
||||
left: left,
|
||||
middle: middle,
|
||||
right: right,
|
||||
.write_event(
|
||||
ButtonEvent {
|
||||
left,
|
||||
middle,
|
||||
right,
|
||||
}
|
||||
.to_event(),
|
||||
)
|
||||
|
||||
@@ -16,3 +16,4 @@ rehid = { git = "https://gitlab.redox-os.org/redox-os/rehid.git" }
|
||||
xhcid = { path = "../../xhcid" }
|
||||
|
||||
common = { path = "../../common" }
|
||||
inputd = { path = "../../inputd" }
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
use std::collections::VecDeque;
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
|
||||
use inputd::ProducerHandle;
|
||||
use orbclient::KeyEvent as OrbKeyEvent;
|
||||
use rehid::{
|
||||
report_desc::{self, ReportTy, REPORT_DESC_TY},
|
||||
@@ -17,7 +16,7 @@ mod keymap;
|
||||
mod reqs;
|
||||
|
||||
fn send_key_event(
|
||||
display: &mut File,
|
||||
display: &mut ProducerHandle,
|
||||
usage_page: u16,
|
||||
usage: u16,
|
||||
pressed: bool,
|
||||
@@ -159,7 +158,7 @@ fn send_key_event(
|
||||
pressed,
|
||||
};
|
||||
|
||||
match display.write(&key_event.to_event()) {
|
||||
match display.write_event(key_event.to_event()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => {
|
||||
log::warn!("failed to send key event to orbital: {}", err);
|
||||
@@ -277,8 +276,7 @@ fn main() {
|
||||
let report_ty = ReportTy::Input;
|
||||
let report_id = 0;
|
||||
|
||||
let mut display =
|
||||
File::open("/scheme/input/producer").expect("Failed to open orbital input socket");
|
||||
let mut display = ProducerHandle::new().expect("Failed to open input socket");
|
||||
let mut endpoint_opt = match endp_desc_opt {
|
||||
Some((endp_num, _endp_desc)) => match handle.open_endpoint(endp_num as u8) {
|
||||
Ok(ok) => Some(ok),
|
||||
@@ -405,7 +403,7 @@ fn main() {
|
||||
y: mouse_pos.1 * 2,
|
||||
};
|
||||
|
||||
match display.write(&mouse_event.to_event()) {
|
||||
match display.write_event(mouse_event.to_event()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => {
|
||||
log::warn!("failed to send mouse event to orbital: {}", err);
|
||||
@@ -419,7 +417,7 @@ fn main() {
|
||||
dy: mouse_dy,
|
||||
};
|
||||
|
||||
match display.write(&mouse_event.to_event()) {
|
||||
match display.write_event(mouse_event.to_event()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => {
|
||||
log::warn!("failed to send mouse event to orbital: {}", err);
|
||||
@@ -430,7 +428,7 @@ fn main() {
|
||||
if scroll_y != 0 {
|
||||
let scroll_event = orbclient::event::ScrollEvent { x: 0, y: scroll_y };
|
||||
|
||||
match display.write(&scroll_event.to_event()) {
|
||||
match display.write_event(scroll_event.to_event()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => {
|
||||
log::warn!("failed to send scroll event to orbital: {}", err);
|
||||
@@ -447,7 +445,7 @@ fn main() {
|
||||
middle: buttons[2],
|
||||
};
|
||||
|
||||
match display.write(&button_event.to_event()) {
|
||||
match display.write_event(button_event.to_event()) {
|
||||
Ok(_) => (),
|
||||
Err(err) => {
|
||||
log::warn!("failed to send button event to orbital: {}", err);
|
||||
|
||||
@@ -162,3 +162,16 @@ impl Damage {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ProducerHandle(File);
|
||||
|
||||
impl ProducerHandle {
|
||||
pub fn new() -> Result<Self, Error> {
|
||||
File::open("/scheme/input/producer").map(ProducerHandle)
|
||||
}
|
||||
|
||||
pub fn write_event(&mut self, event: orbclient::Event) -> Result<(), Error> {
|
||||
self.0.write(&event)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user