mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
fixed pikvm/pikvm#159: workaround for windows 98 absolute mouse bug
This commit is contained in:
parent
c4b9eba250
commit
ed5952f13e
@ -24,6 +24,8 @@ build_flags =
|
|||||||
-DHID_WITH_USB
|
-DHID_WITH_USB
|
||||||
-DHID_SET_USB_KBD
|
-DHID_SET_USB_KBD
|
||||||
-DHID_SET_USB_MOUSE_ABS
|
-DHID_SET_USB_MOUSE_ABS
|
||||||
|
# ----- The USB ABS fix for Windows 98 (https://github.com/pikvm/pikvm/issues/159) -----
|
||||||
|
# -DHID_USB_ABS_WIN98_FIX
|
||||||
# ----- PS2 keyboard only -----
|
# ----- PS2 keyboard only -----
|
||||||
# -DHID_WITH_PS2
|
# -DHID_WITH_PS2
|
||||||
# -DHID_SET_PS2_KBD
|
# -DHID_SET_PS2_KBD
|
||||||
|
|||||||
@ -161,7 +161,11 @@ class UsbMouseAbsolute {
|
|||||||
|
|
||||||
void sendMove(int x, int y) {
|
void sendMove(int x, int y) {
|
||||||
CHECK_HID_EP;
|
CHECK_HID_EP;
|
||||||
|
#ifdef HID_USB_ABS_WIN98_FIX
|
||||||
|
_mouse.moveTo(x << 1, y << 1);
|
||||||
|
#else
|
||||||
_mouse.moveTo(x, y);
|
_mouse.moveTo(x, y);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendWheel(int delta_y) {
|
void sendWheel(int delta_y) {
|
||||||
|
|||||||
@ -72,7 +72,12 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
|
|||||||
self.__output_to_mouse: Dict[str, MouseProcess] = {}
|
self.__output_to_mouse: Dict[str, MouseProcess] = {}
|
||||||
self.__mouse_to_output: Dict[MouseProcess, str] = {}
|
self.__mouse_to_output: Dict[MouseProcess, str] = {}
|
||||||
if mouse_alt["device_path"]:
|
if mouse_alt["device_path"]:
|
||||||
self.__mouse_alt_proc = MouseProcess(absolute=(not mouse["absolute"]), **common, **mouse_alt)
|
self.__mouse_alt_proc = MouseProcess(
|
||||||
|
absolute=(not mouse["absolute"]),
|
||||||
|
absolute_win98_fix=mouse["absolute_win98_fix"],
|
||||||
|
**common,
|
||||||
|
**mouse_alt,
|
||||||
|
)
|
||||||
self.__output_to_mouse = {
|
self.__output_to_mouse = {
|
||||||
"usb": (self.__mouse_proc if mouse["absolute"] else self.__mouse_alt_proc),
|
"usb": (self.__mouse_proc if mouse["absolute"] else self.__mouse_alt_proc),
|
||||||
"usb_rel": (self.__mouse_alt_proc if mouse["absolute"] else self.__mouse_proc),
|
"usb_rel": (self.__mouse_alt_proc if mouse["absolute"] else self.__mouse_proc),
|
||||||
@ -94,6 +99,7 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
|
|||||||
"queue_timeout": Option(0.1, type=valid_float_f01),
|
"queue_timeout": Option(0.1, type=valid_float_f01),
|
||||||
"write_retries": Option(150, type=valid_int_f1),
|
"write_retries": Option(150, type=valid_int_f1),
|
||||||
"absolute": Option(True, type=valid_bool),
|
"absolute": Option(True, type=valid_bool),
|
||||||
|
"absolute_win98_fix": Option(False, type=valid_bool),
|
||||||
"horizontal_wheel": Option(True, type=valid_bool),
|
"horizontal_wheel": Option(True, type=valid_bool),
|
||||||
},
|
},
|
||||||
"mouse_alt": {
|
"mouse_alt": {
|
||||||
@ -102,6 +108,7 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
|
|||||||
"queue_timeout": Option(0.1, type=valid_float_f01),
|
"queue_timeout": Option(0.1, type=valid_float_f01),
|
||||||
"write_retries": Option(150, type=valid_int_f1),
|
"write_retries": Option(150, type=valid_int_f1),
|
||||||
# No absolute option here, initialized by (not mouse.absolute)
|
# No absolute option here, initialized by (not mouse.absolute)
|
||||||
|
# Also no absolute_win98_fix
|
||||||
"horizontal_wheel": Option(True, type=valid_bool),
|
"horizontal_wheel": Option(True, type=valid_bool),
|
||||||
},
|
},
|
||||||
"noop": Option(False, type=valid_bool),
|
"noop": Option(False, type=valid_bool),
|
||||||
|
|||||||
@ -42,6 +42,7 @@ from .events import make_mouse_report
|
|||||||
class MouseProcess(BaseDeviceProcess):
|
class MouseProcess(BaseDeviceProcess):
|
||||||
def __init__(self, **kwargs: Any) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
self.__absolute: bool = kwargs.pop("absolute")
|
self.__absolute: bool = kwargs.pop("absolute")
|
||||||
|
self.__absolute_win98_fix: bool = kwargs.pop("absolute_win98_fix")
|
||||||
self.__horizontal_wheel: bool = kwargs.pop("horizontal_wheel")
|
self.__horizontal_wheel: bool = kwargs.pop("horizontal_wheel")
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
@ -143,6 +144,12 @@ class MouseProcess(BaseDeviceProcess):
|
|||||||
assert relative_event is None
|
assert relative_event is None
|
||||||
move_x = self.__x
|
move_x = self.__x
|
||||||
move_y = self.__y
|
move_y = self.__y
|
||||||
|
if self.__absolute_win98_fix:
|
||||||
|
# https://github.com/pikvm/pikvm/issues/159
|
||||||
|
# For some reason, the correct implementation of this fix
|
||||||
|
# is a shift to the left, and not to the right, as in VirtualBox
|
||||||
|
move_x <<= 1
|
||||||
|
move_y <<= 1
|
||||||
else:
|
else:
|
||||||
assert self.__x == self.__y == 0
|
assert self.__x == self.__y == 0
|
||||||
if relative_event is not None:
|
if relative_event is not None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user