summaryrefslogtreecommitdiff
path: root/kvmd/plugins/hid/otg/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'kvmd/plugins/hid/otg/__init__.py')
-rw-r--r--kvmd/plugins/hid/otg/__init__.py38
1 files changed, 30 insertions, 8 deletions
diff --git a/kvmd/plugins/hid/otg/__init__.py b/kvmd/plugins/hid/otg/__init__.py
index d17ad179..7129e5d4 100644
--- a/kvmd/plugins/hid/otg/__init__.py
+++ b/kvmd/plugins/hid/otg/__init__.py
@@ -37,6 +37,7 @@ from ....validators.os import valid_abs_path
from .. import BaseHid
from .keyboard import KeyboardProcess
+from .mouse import MouseProcess
# =====
@@ -44,11 +45,13 @@ class Plugin(BaseHid):
def __init__( # pylint: disable=super-init-not-called
self,
keyboard: Dict[str, Any],
+ mouse: Dict[str, Any],
noop: bool,
state_poll: float,
) -> None:
self.__keyboard_proc = KeyboardProcess(noop=noop, **keyboard)
+ self.__mouse_proc = MouseProcess(noop=noop, **mouse)
self.__state_poll = state_poll
@@ -64,19 +67,33 @@ class Plugin(BaseHid):
"write_retries_delay": Option(0.1, type=valid_float_f01),
},
+ "mouse": {
+ "device": Option("", type=valid_abs_path, unpack_as="device_path"),
+ "select_timeout": Option(1.0, type=valid_float_f01),
+ "write_retries": Option(5, type=valid_int_f1),
+ "write_retries_delay": Option(0.1, type=valid_float_f01),
+ },
+
"noop": Option(False, type=valid_bool),
"state_poll": Option(0.1, type=valid_float_f01),
}
def start(self) -> None:
self.__keyboard_proc.start()
+ self.__mouse_proc.start()
def get_state(self) -> Dict:
- return {"online": self.__keyboard_proc.is_online()}
+ keyboard_online = self.__keyboard_proc.is_online()
+ mouse_online = self.__mouse_proc.is_online()
+ return {
+ "online": (keyboard_online and mouse_online),
+ "keyboard": {"online": keyboard_online},
+ "mouse": {"online": mouse_online},
+ }
async def poll_state(self) -> AsyncGenerator[Dict, None]:
prev_state: Dict = {}
- while self.__keyboard_proc.is_alive():
+ while self.__keyboard_proc.is_alive() and self.__mouse_proc.is_alive():
state = self.get_state()
if state != prev_state:
yield self.get_state()
@@ -85,23 +102,28 @@ class Plugin(BaseHid):
async def reset(self) -> None:
self.__keyboard_proc.send_reset_event()
+ self.__mouse_proc.send_reset_event()
async def cleanup(self) -> None:
- self.__keyboard_proc.cleanup()
+ try:
+ self.__keyboard_proc.cleanup()
+ finally:
+ self.__mouse_proc.cleanup()
# =====
async def send_key_event(self, key: str, state: bool) -> None:
self.__keyboard_proc.send_key_event(key, state)
- async def send_mouse_move_event(self, to_x: int, to_y: int) -> None:
- pass
-
async def send_mouse_button_event(self, button: str, state: bool) -> None:
- pass
+ self.__mouse_proc.send_button_event(button, state)
+
+ async def send_mouse_move_event(self, to_x: int, to_y: int) -> None:
+ self.__mouse_proc.send_move_event(to_x, to_y)
async def send_mouse_wheel_event(self, delta_y: int) -> None:
- pass
+ self.__mouse_proc.send_wheel_event(delta_y)
async def clear_events(self) -> None:
self.__keyboard_proc.send_clear_event()
+ self.__mouse_proc.send_clear_event()