diff --git a/Cargo.lock b/Cargo.lock index d34bc70473..433c24df46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/drivers/input/usbhidd/src/main.rs b/drivers/input/usbhidd/src/main.rs index e1ea28dffd..bbe0f504a6 100644 --- a/drivers/input/usbhidd/src/main.rs +++ b/drivers/input/usbhidd/src/main.rs @@ -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()) } }