mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 00:51:53 +08:00
using evdev instead of string constants
This commit is contained in:
@@ -285,10 +285,10 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
|
||||
def set_connected(self, connected: bool) -> None:
|
||||
self.__queue_event(SetConnectedEvent(connected), clear=True)
|
||||
|
||||
def _send_key_event(self, key: str, state: bool) -> None:
|
||||
def _send_key_event(self, key: int, state: bool) -> None:
|
||||
self.__queue_event(KeyEvent(key, state))
|
||||
|
||||
def _send_mouse_button_event(self, button: str, state: bool) -> None:
|
||||
def _send_mouse_button_event(self, button: int, state: bool) -> None:
|
||||
self.__queue_event(MouseButtonEvent(button, state))
|
||||
|
||||
def _send_mouse_move_event(self, to_x: int, to_y: int) -> None:
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
import dataclasses
|
||||
import struct
|
||||
|
||||
from evdev import ecodes
|
||||
|
||||
from ....keyboard.mappings import KEYMAP
|
||||
|
||||
from ....mouse import MouseRange
|
||||
@@ -106,33 +108,36 @@ class ClearEvent(BaseEvent):
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class KeyEvent(BaseEvent):
|
||||
name: str
|
||||
code: int
|
||||
state: bool
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
assert self.name in KEYMAP
|
||||
assert self.code in KEYMAP
|
||||
|
||||
def make_request(self) -> bytes:
|
||||
code = KEYMAP[self.name].mcu.code
|
||||
code = KEYMAP[self.code].mcu.code
|
||||
return _make_request(struct.pack(">BBBxx", 0x11, code, int(self.state)))
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class MouseButtonEvent(BaseEvent):
|
||||
name: str
|
||||
code: int
|
||||
state: bool
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
assert self.name in ["left", "right", "middle", "up", "down"]
|
||||
assert self.code in [
|
||||
ecodes.BTN_LEFT, ecodes.BTN_RIGHT, ecodes.BTN_MIDDLE,
|
||||
ecodes.BTN_BACK, ecodes.BTN_FORWARD,
|
||||
]
|
||||
|
||||
def make_request(self) -> bytes:
|
||||
(code, state_pressed, is_main) = {
|
||||
"left": (0b10000000, 0b00001000, True),
|
||||
"right": (0b01000000, 0b00000100, True),
|
||||
"middle": (0b00100000, 0b00000010, True),
|
||||
"up": (0b10000000, 0b00001000, False), # Back
|
||||
"down": (0b01000000, 0b00000100, False), # Forward
|
||||
}[self.name]
|
||||
ecodes.BTN_LEFT: (0b10000000, 0b00001000, True),
|
||||
ecodes.BTN_RIGHT: (0b01000000, 0b00000100, True),
|
||||
ecodes.BTN_MIDDLE: (0b00100000, 0b00000010, True),
|
||||
ecodes.BTN_BACK: (0b10000000, 0b00001000, False), # Up
|
||||
ecodes.BTN_FORWARD: (0b01000000, 0b00000100, False), # Down
|
||||
}[self.code]
|
||||
if self.state:
|
||||
code |= state_pressed
|
||||
if is_main:
|
||||
|
||||
Reference in New Issue
Block a user