usbhidd: Adjust logs, add mouse filter to prevent jumps

This commit is contained in:
Wildan M
2026-01-25 21:14:59 +07:00
parent 8da3a40bc0
commit 7bfcda6ffd
2 changed files with 53 additions and 13 deletions
Generated
+27 -1
View File
@@ -988,6 +988,12 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
version = "0.1.19"
@@ -1921,10 +1927,12 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "rehid"
version = "0.1.0"
source = "git+https://gitlab.redox-os.org/redox-os/rehid.git#43fe46199b2948cac2d4adee5c4f381d6639ab24"
source = "git+https://gitlab.redox-os.org/redox-os/rehid.git#39d7ef05c97fd4e5e2cfd38b1a21f20d888c5e00"
dependencies = [
"hidreport",
"log",
"strum",
"strum_macros",
]
[[package]]
@@ -2245,6 +2253,24 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "strum"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
[[package]]
name = "strum_macros"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]]
name = "syn"
version = "1.0.109"
+26 -12
View File
@@ -173,7 +173,7 @@ fn main() {
let name = format!("{}_{}_{}_hid", scheme, port, interface_num);
common::setup_logging(
"usb",
"device",
"usbhid",
&name,
common::output_level(),
common::file_level(),
@@ -190,6 +190,13 @@ fn main() {
let desc: DevDesc = handle
.get_standard_descs()
.expect("Failed to get standard descriptors");
log::info!(
"USB HID driver: {:?} serial {:?}",
desc.product_str.as_ref().map(|s| s.as_str()).unwrap_or(""),
desc.serial_str.as_ref().map(|s| s.as_str()).unwrap_or(""),
);
log::debug!("{:X?}", desc);
let mut endp_count = 0;
@@ -314,7 +321,7 @@ fn main() {
.handle(&report_buffer)
.expect("failed to parse report")
{
log::debug!("{:X?}", event);
log::debug!("{}", event);
if event.usage_page == UsagePage::GenericDesktop as u16 {
if event.usage == GenericDesktopUsage::X as u16 {
if event.relative {
@@ -381,9 +388,11 @@ fn main() {
if mouse_pos != last_mouse_pos {
last_mouse_pos = mouse_pos;
// TODO
// ps2d uses 0..=65535 as range, while usb uses 0..=32767. orbital
// expects the former range, so multiply by two here to translate
// the usb coordinates to what orbital expects.
// expects the former range, so multiply by two here to temporarily
// align with orbital expectation. This workaround will make cursor
// looks out of sync in QEMU using virtio-vga with usb-tablet.
let mouse_event = orbclient::event::MouseEvent {
x: mouse_pos.0 * 2,
y: mouse_pos.1 * 2,
@@ -398,15 +407,18 @@ fn main() {
}
if mouse_dx != 0 || mouse_dy != 0 {
let mouse_event = orbclient::event::MouseRelativeEvent {
dx: mouse_dx,
dy: mouse_dy,
};
// TODO: This is a filter to prevent random mouse jumps
if mouse_dx > -127 && mouse_dx < 127 {
let mouse_event = orbclient::event::MouseRelativeEvent {
dx: mouse_dx,
dy: mouse_dy,
};
match display.write_event(mouse_event.to_event()) {
Ok(_) => (),
Err(err) => {
log::warn!("failed to send mouse event to orbital: {}", err);
match display.write_event(mouse_event.to_event()) {
Ok(_) => (),
Err(err) => {
log::warn!("failed to send mouse event to orbital: {}", err);
}
}
}
}
@@ -438,5 +450,7 @@ fn main() {
}
}
}
// log::trace!("took {}ms", timer.elapsed().as_millis())
}
}