mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
two-way communication between hid and kvmd
This commit is contained in:
parent
61f7db14a8
commit
49b83948c0
@ -72,7 +72,6 @@ INLINE void cmdMouseWheelEvent() { // 2 bytes
|
|||||||
CMD_SERIAL.read(); // unused
|
CMD_SERIAL.read(); // unused
|
||||||
CMD_SERIAL.read(); // unused
|
CMD_SERIAL.read(); // unused
|
||||||
AbsoluteMouse.move(0, 0, delta_y);
|
AbsoluteMouse.move(0, 0, delta_y);
|
||||||
CMD_SERIAL.println(delta_y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -81,6 +80,7 @@ void setup() {
|
|||||||
CMD_SERIAL.begin(CMD_SERIAL_SPEED);
|
CMD_SERIAL.begin(CMD_SERIAL_SPEED);
|
||||||
BootKeyboard.begin();
|
BootKeyboard.begin();
|
||||||
AbsoluteMouse.begin();
|
AbsoluteMouse.begin();
|
||||||
|
CMD_SERIAL.write(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
@ -93,5 +93,6 @@ void loop() {
|
|||||||
case 4: cmdMouseWheelEvent(); break;
|
case 4: cmdMouseWheelEvent(); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
CMD_SERIAL.write(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -129,25 +129,35 @@ class Hid(multiprocessing.Process):
|
|||||||
except Exception:
|
except Exception:
|
||||||
get_logger().exception("Can't execute emergency clear HID events")
|
get_logger().exception("Can't execute emergency clear HID events")
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None: # pylint: disable=too-many-branches
|
||||||
try:
|
try:
|
||||||
with serial.Serial(self.__device_path, self.__speed) as tty:
|
with serial.Serial(self.__device_path, self.__speed) as tty:
|
||||||
|
hid_ready = False
|
||||||
while True:
|
while True:
|
||||||
try:
|
if hid_ready:
|
||||||
event = self.__queue.get(timeout=0.1)
|
try:
|
||||||
except queue.Empty:
|
event = self.__queue.get(timeout=0.05)
|
||||||
pass
|
except queue.Empty:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if isinstance(event, _KeyEvent):
|
||||||
|
self.__send_key_event(tty, event)
|
||||||
|
elif isinstance(event, _MouseMoveEvent):
|
||||||
|
self.__send_mouse_move_event(tty, event)
|
||||||
|
elif isinstance(event, _MouseButtonEvent):
|
||||||
|
self.__send_mouse_button_event(tty, event)
|
||||||
|
elif isinstance(event, _MouseWheelEvent):
|
||||||
|
self.__send_mouse_wheel_event(tty, event)
|
||||||
|
else:
|
||||||
|
raise RuntimeError("Unknown HID event")
|
||||||
|
hid_ready = False
|
||||||
else:
|
else:
|
||||||
if isinstance(event, _KeyEvent):
|
if tty.in_waiting:
|
||||||
self.__send_key_event(tty, event)
|
while tty.in_waiting:
|
||||||
|
tty.read(tty.in_waiting)
|
||||||
|
hid_ready = True
|
||||||
|
else:
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
elif isinstance(event, _MouseMoveEvent):
|
|
||||||
self.__send_mouse_move_event(tty, event)
|
|
||||||
elif isinstance(event, _MouseButtonEvent):
|
|
||||||
self.__send_mouse_button_event(tty, event)
|
|
||||||
time.sleep(0.05)
|
|
||||||
elif isinstance(event, _MouseWheelEvent):
|
|
||||||
self.__send_mouse_wheel_event(tty, event)
|
|
||||||
if self.__stop_event.is_set() and self.__queue.qsize() == 0:
|
if self.__stop_event.is_set() and self.__queue.qsize() == 0:
|
||||||
break
|
break
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user