Compare commits

...
5 Commits
Author SHA1 Message Date
galister 507ff7353e Release 25.2 2025-02-20 06:26:35 +09:00
galister c5a82c2879 update libmonado 2025-02-20 06:26:35 +09:00
Diamond White 965174c781 seperate combined UInputHandle into two handles for mouse and keyboard each (#155) 2025-02-12 19:24:42 +00:00
Aleksander bf3f3dafbe Merge pull request #154 from olekolek1000/wayvr_dashboard_ipc
WayVR: Do not hard-error in case if the user bought NVIDIA
2025-02-11 22:43:38 +01:00
Aleksander 4701d2b734 WayVR: Do not hard-error in case if the user bought NVIDIA 2025-02-11 22:30:38 +01:00
7 changed files with 612 additions and 513 deletions

No files matched your search

Generated
+516 -414
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -4,7 +4,7 @@ debug = true
[package]
name = "wlx-overlay-s"
version = "0.6.0"
version = "25.2.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -56,7 +56,7 @@ thiserror = "2.0.3"
vulkano = { git = "https://github.com/vulkano-rs/vulkano", rev = "94f50f1" }
vulkano-shaders = { git = "https://github.com/vulkano-rs/vulkano", rev = "94f50f1" }
wlx-capture = { git = "https://github.com/galister/wlx-capture", tag = "v0.4.2", default-features = false }
libmonado-rs = { git = "https://github.com/technobaboo/libmonado-rs", rev = "a495f6d", optional = true }
libmonado = { git = "https://github.com/technobaboo/libmonado-rs", rev = "256895b18c8f9368174fad8a6232ff07764eeacb", optional = true }
winit = { version = "0.30.0", optional = true }
xdg = "2.5.2"
log-panics = { version = "2.1.0", features = ["with-backtrace"] }
@@ -95,7 +95,7 @@ regex = { version = "*" }
[features]
default = ["openvr", "openxr", "osc", "x11", "wayland", "wayvr"]
openvr = ["dep:ovr_overlay", "dep:json"]
openxr = ["dep:openxr", "dep:libmonado-rs"]
openxr = ["dep:openxr", "dep:libmonado"]
osc = ["dep:rosc"]
x11 = ["dep:xcb", "wlx-capture/xshm", "xkbcommon/x11"]
wayland = ["pipewire", "wlx-capture/wlr", "xkbcommon/wayland"]
+17 -11
View File
@@ -5,7 +5,7 @@ use std::{
};
use glam::{bool, Affine3A, Quat, Vec3};
use libmonado_rs::{Device, Monado};
use libmonado as mnd;
use openxr::{self as xr, Quaternionf, Vector3f};
use serde::{Deserialize, Serialize};
@@ -229,7 +229,7 @@ impl OpenXrInputSource {
}
fn update_device_battery_status(
device: &mut Device,
device: &mut mnd::Device,
role: TrackedDeviceRole,
app: &mut AppState,
) {
@@ -251,17 +251,23 @@ impl OpenXrInputSource {
}
}
pub fn update_devices(&mut self, app: &mut AppState, monado: &mut Monado) {
pub fn update_devices(&mut self, app: &mut AppState, monado: &mut mnd::Monado) {
app.input_state.devices.clear();
let roles = [
("head", TrackedDeviceRole::Hmd),
("eyes", TrackedDeviceRole::None),
("left", TrackedDeviceRole::LeftHand),
("right", TrackedDeviceRole::RightHand),
("gamepad", TrackedDeviceRole::None),
("hand-tracking-left", TrackedDeviceRole::LeftHand),
("hand-tracking-right", TrackedDeviceRole::RightHand),
(mnd::DeviceRole::Head, TrackedDeviceRole::Hmd),
(mnd::DeviceRole::Eyes, TrackedDeviceRole::None),
(mnd::DeviceRole::Left, TrackedDeviceRole::LeftHand),
(mnd::DeviceRole::Right, TrackedDeviceRole::RightHand),
(mnd::DeviceRole::Gamepad, TrackedDeviceRole::None),
(
mnd::DeviceRole::HandTrackingLeft,
TrackedDeviceRole::LeftHand,
),
(
mnd::DeviceRole::HandTrackingRight,
TrackedDeviceRole::RightHand,
),
];
let mut seen = Vec::<u32>::with_capacity(32);
for (mnd_role, wlx_role) in roles {
@@ -276,7 +282,7 @@ impl OpenXrInputSource {
if let Ok(devices) = monado.devices() {
for mut device in devices {
if !seen.contains(&device.index) {
let role = if device.id >= 4 && device.id <= 8 {
let role = if device.name_id >= 4 && device.name_id <= 8 {
TrackedDeviceRole::Tracker
} else {
TrackedDeviceRole::None
+1 -1
View File
@@ -9,7 +9,7 @@ use std::{
};
use glam::{Affine3A, Vec3};
use libmonado_rs::Monado;
use libmonado::Monado;
use openxr as xr;
use skybox::create_skybox;
use vulkano::{command_buffer::CommandBufferUsage, Handle, VulkanObject};
+1 -1
View File
@@ -1,5 +1,5 @@
use glam::{Affine3A, Quat, Vec3A};
use libmonado_rs::{Monado, Pose, ReferenceSpaceType};
use libmonado::{Monado, Pose, ReferenceSpaceType};
use crate::{
backend::{common::OverlayContainer, input::InputState},
-2
View File
@@ -185,12 +185,10 @@ impl WayVR {
}
Ok(None) => {
log::warn!("dmabuf: Failed to query render node");
debug_assert!(false);
None
}
Err(err) => {
log::warn!("dmabuf: Failed to get egl device for display: {}", err);
debug_assert!(false);
None
}
};
+74 -81
View File
@@ -68,7 +68,8 @@ struct MouseAction {
}
pub struct UInputProvider {
handle: UInputHandle<File>,
keyboard_handle: UInputHandle<File>,
mouse_handle: UInputHandle<File>,
desktop_extent: Vec2,
desktop_origin: Vec2,
cur_modifiers: u8,
@@ -90,97 +91,89 @@ const EV_ABS: u16 = 0x3;
impl UInputProvider {
fn try_new() -> Option<Self> {
if let Ok(file) = File::create("/dev/uinput") {
let handle = UInputHandle::new(file);
let keyboard_file = File::create("/dev/uinput").ok()?;
let keyboard_handle = UInputHandle::new(keyboard_file);
let id = InputId {
bustype: 0x03,
vendor: 0x4711,
product: 0x0829,
version: 5,
};
let mouse_file = File::create("/dev/uinput").ok()?;
let mouse_handle = UInputHandle::new(mouse_file);
let name = b"WlxOverlay-S Keyboard-Mouse Hybrid Thing\0";
let kbd_id = InputId {
bustype: 0x03,
vendor: 0x4711,
product: 0x0829,
version: 5,
};
let mouse_id = InputId {
bustype: 0x03,
vendor: 0x4711,
product: 0x0830,
version: 5,
};
let kbd_name = b"WlxOverlay-S Keyboard\0";
let mouse_name = b"WlxOverlay-S Mouse\0";
let abs_info = vec![
AbsoluteInfoSetup {
axis: input_linux::AbsoluteAxis::X,
info: AbsoluteInfo {
value: 0,
minimum: 0,
maximum: MOUSE_EXTENT as _,
fuzz: 0,
flat: 0,
resolution: 10,
},
let abs_info = vec![
AbsoluteInfoSetup {
axis: input_linux::AbsoluteAxis::X,
info: AbsoluteInfo {
value: 0,
minimum: 0,
maximum: MOUSE_EXTENT as _,
fuzz: 0,
flat: 0,
resolution: 10,
},
AbsoluteInfoSetup {
axis: input_linux::AbsoluteAxis::Y,
info: AbsoluteInfo {
value: 0,
minimum: 0,
maximum: MOUSE_EXTENT as _,
fuzz: 0,
flat: 0,
resolution: 10,
},
},
AbsoluteInfoSetup {
axis: input_linux::AbsoluteAxis::Y,
info: AbsoluteInfo {
value: 0,
minimum: 0,
maximum: MOUSE_EXTENT as _,
fuzz: 0,
flat: 0,
resolution: 10,
},
];
},
];
if handle.set_evbit(EventKind::Key).is_err() {
return None;
}
if handle.set_evbit(EventKind::Absolute).is_err() {
return None;
}
if handle.set_evbit(EventKind::Relative).is_err() {
return None;
}
for btn in MOUSE_LEFT..=MOUSE_MIDDLE {
let key: Key = unsafe { transmute(btn) };
if handle.set_keybit(key).is_err() {
return None;
}
}
for key in VirtualKey::iter() {
let key: Key = unsafe { transmute((key as u16) - 8) };
if handle.set_keybit(key).is_err() {
return None;
}
}
if handle.set_absbit(AbsoluteAxis::X).is_err() {
return None;
}
if handle.set_absbit(AbsoluteAxis::Y).is_err() {
return None;
}
if handle.set_relbit(RelativeAxis::Wheel).is_err() {
return None;
}
if handle.create(&id, name, 0, &abs_info).is_ok() {
return Some(UInputProvider {
handle,
desktop_extent: Vec2::ZERO,
desktop_origin: Vec2::ZERO,
current_action: Default::default(),
cur_modifiers: 0,
});
}
keyboard_handle.set_evbit(EventKind::Key).ok()?;
for key in VirtualKey::iter() {
let mapped_key: Key = unsafe { std::mem::transmute((key as u16) - 8) };
keyboard_handle.set_keybit(mapped_key).ok()?;
}
None
}
keyboard_handle.create(&kbd_id, kbd_name, 0, &[]).ok()?;
mouse_handle.set_evbit(EventKind::Absolute).ok()?;
mouse_handle.set_evbit(EventKind::Relative).ok()?;
mouse_handle.set_absbit(AbsoluteAxis::X).ok()?;
mouse_handle.set_absbit(AbsoluteAxis::Y).ok()?;
mouse_handle.set_relbit(RelativeAxis::Wheel).ok()?;
mouse_handle.set_evbit(EventKind::Key).ok()?;
for btn in MOUSE_LEFT..=MOUSE_MIDDLE {
let mouse_btn: Key = unsafe { transmute(btn) };
mouse_handle.set_keybit(mouse_btn).ok()?;
}
mouse_handle.create(&mouse_id, mouse_name, 0, &abs_info).ok()?;
Some(UInputProvider {
keyboard_handle,
mouse_handle,
desktop_extent: Vec2::ZERO,
desktop_origin: Vec2::ZERO,
current_action: Default::default(),
cur_modifiers: 0,
})
}
fn send_button_internal(&self, button: u16, down: bool) {
let time = get_time();
let events = [
new_event(time, EV_KEY, button, down as _),
new_event(time, EV_SYN, 0, 0),
];
if let Err(res) = self.handle.write(&events) {
if let Err(res) = self.mouse_handle.write(&events) {
log::error!("send_button: {}", res.to_string());
}
}
@@ -196,7 +189,7 @@ impl UInputProvider {
new_event(time, EV_ABS, AbsoluteAxis::Y as _, pos.y as i32),
new_event(time, EV_SYN, 0, 0),
];
if let Err(res) = self.handle.write(&events) {
if let Err(res) = self.mouse_handle.write(&events) {
log::error!("{}", res.to_string());
}
}
@@ -206,7 +199,7 @@ impl UInputProvider {
new_event(time, EV_REL, RelativeAxis::Wheel as _, delta),
new_event(time, EV_SYN, 0, 0),
];
if let Err(res) = self.handle.write(&events) {
if let Err(res) = self.mouse_handle.write(&events) {
log::error!("wheel: {}", res.to_string());
}
}
@@ -232,7 +225,7 @@ impl HidProvider for UInputProvider {
new_event(time, EV_KEY, (key as u16) - 8, down as _),
new_event(time, EV_SYN, 0, 0),
];
if let Err(res) = self.handle.write(&events) {
if let Err(res) = self.keyboard_handle.write(&events) {
log::error!("send_key: {}", res.to_string());
}
}