diff options
author | Devaev Maxim <[email protected]> | 2019-09-30 04:59:40 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2019-09-30 05:47:45 +0300 |
commit | ce6cb3057a477fa11ab13e732c9589aab6efcc69 (patch) | |
tree | 5404045c840358cb42125b5f4ab2202bde6b63eb /kvmd/plugins/hid/otg/__init__.py | |
parent | e1b7e4fbcd1f34878162bc8bbeb92b7f47f058cc (diff) |
otg mouse
Diffstat (limited to 'kvmd/plugins/hid/otg/__init__.py')
-rw-r--r-- | kvmd/plugins/hid/otg/__init__.py | 38 |
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() |