mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 00:51:53 +08:00
hid pinout
This commit is contained in:
@@ -23,8 +23,10 @@ def main() -> None:
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
hid = Hid(
|
||||
reset=int(config["hid"]["pinout"]["reset"]),
|
||||
device_path=str(config["hid"]["device"]),
|
||||
speed=int(config["hid"]["speed"]),
|
||||
reset_delay=float(config["hid"]["reset_delay"]),
|
||||
)
|
||||
|
||||
atx = Atx(
|
||||
|
||||
@@ -16,6 +16,7 @@ def main() -> None:
|
||||
logger.info("Cleaning up ...")
|
||||
with gpio.bcm():
|
||||
for (name, pin) in [
|
||||
("hid_reset", config["hid"]["pinout"]["reset"]),
|
||||
("msd_target", config["msd"]["pinout"]["target"]),
|
||||
("msd_reset", config["msd"]["pinout"]["reset"]),
|
||||
("atx_power_switch", config["atx"]["pinout"]["power_switch"]),
|
||||
|
||||
15
kvmd/hid.py
15
kvmd/hid.py
@@ -14,6 +14,8 @@ import yaml
|
||||
import serial
|
||||
import setproctitle
|
||||
|
||||
from . import gpio
|
||||
|
||||
from .logging import get_logger
|
||||
|
||||
|
||||
@@ -44,17 +46,21 @@ class _MouseWheelEvent(NamedTuple):
|
||||
delta_y: int
|
||||
|
||||
|
||||
class Hid(multiprocessing.Process):
|
||||
class Hid(multiprocessing.Process): # pylint: disable=too-many-instance-attributes
|
||||
def __init__(
|
||||
self,
|
||||
reset: int,
|
||||
device_path: str,
|
||||
speed: int,
|
||||
reset_delay: float,
|
||||
) -> None:
|
||||
|
||||
super().__init__(daemon=True)
|
||||
|
||||
self.__reset = gpio.set_output(reset)
|
||||
self.__device_path = device_path
|
||||
self.__speed = speed
|
||||
self.__reset_delay = reset_delay
|
||||
|
||||
self.__pressed_keys: Set[str] = set()
|
||||
self.__pressed_mouse_buttons: Set[str] = set()
|
||||
@@ -67,7 +73,11 @@ class Hid(multiprocessing.Process):
|
||||
get_logger().info("Starting HID daemon ...")
|
||||
super().start()
|
||||
|
||||
# TODO: add reset or power switching
|
||||
async def reset(self) -> None:
|
||||
async with self.__lock:
|
||||
gpio.write(self.__reset, True)
|
||||
await asyncio.sleep(self.__reset_delay)
|
||||
gpio.write(self.__reset, False)
|
||||
|
||||
async def send_key_event(self, key: str, state: bool) -> None:
|
||||
if not self.__stop_event.is_set():
|
||||
@@ -114,6 +124,7 @@ class Hid(multiprocessing.Process):
|
||||
else:
|
||||
get_logger().warning("Emergency cleaning up HID events ...")
|
||||
self.__emergency_clear_events()
|
||||
gpio.write(self.__reset, False)
|
||||
|
||||
def __unsafe_clear_events(self) -> None:
|
||||
for button in self.__pressed_mouse_buttons:
|
||||
|
||||
@@ -141,6 +141,8 @@ class Server: # pylint: disable=too-many-instance-attributes
|
||||
|
||||
app.router.add_get("/ws", self.__ws_handler)
|
||||
|
||||
app.router.add_post("/hid/reset", self.__hid_reset_handler)
|
||||
|
||||
app.router.add_get("/atx", self.__atx_state_handler)
|
||||
app.router.add_post("/atx/click", self.__atx_click_handler)
|
||||
|
||||
@@ -228,6 +230,12 @@ class Server: # pylint: disable=too-many-instance-attributes
|
||||
return
|
||||
await self.__hid.send_mouse_wheel_event(delta_y)
|
||||
|
||||
# ===== HID
|
||||
|
||||
async def __hid_reset_handler(self, _: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||
await self.__hid.reset()
|
||||
return _json()
|
||||
|
||||
# ===== ATX
|
||||
|
||||
async def __atx_state_handler(self, _: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||
|
||||
Reference in New Issue
Block a user