- import uinput
- from pythonosc import dispatcher
- from pythonosc import osc_server
-
- keylist = [
- "KEY_A",
- "KEY_B",
- "KEY_C",
- "KEY_D",
- "KEY_E",
- "KEY_F",
- "KEY_G",
- "KEY_H",
- "KEY_I",
- "KEY_J",
- "KEY_K",
- "KEY_L",
- "KEY_M",
- "KEY_N",
- "KEY_O",
- "KEY_P",
- "KEY_Q",
- "KEY_R",
- "KEY_S",
- "KEY_T",
- "KEY_U",
- "KEY_V",
- "KEY_W",
- "KEY_X",
- "KEY_Y",
- "KEY_Z",
- "KEY_1",
- "KEY_2",
- "KEY_3",
- "KEY_4",
- "KEY_5",
- "KEY_6",
- "KEY_7",
- "KEY_8",
- "KEY_9",
- "KEY_0",
- "KEY_MINUS",
- "KEY_EQUAL",
- "KEY_YEN",
- "KEY_LEFTBRACE",
- "KEY_RIGHTBRACE",
- "KEY_SEMICOLON",
- "KEY_APOSTROPHE",
- "KEY_BACKSLASH",
- "KEY_COMMA",
- "KEY_DOT",
- "KEY_SLASH",
- "KEY_BACKSLASH",
- "KEY_F1",
- "KEY_F2",
- "KEY_F3",
- "KEY_F4",
- "KEY_F5",
- "KEY_F6",
- "KEY_F7",
- "KEY_F8",
- "KEY_F9",
- "KEY_F10",
- "KEY_F11",
- "KEY_F12",
- "KEY_ESC",
- "KEY_TAB",
- "KEY_CAPSLOCK",
- "KEY_LEFTSHIFT",
- "KEY_LEFTCTRL",
- "KEY_LEFTMETA",
- "KEY_LEFTALT",
- "KEY_BACKSPACE",
- "KEY_ENTER",
- "KEY_RIGHTSHIFT",
- "KEY_RIGHTCTRL",
- "KEY_RIGHTALT",
- "KEY_SPACE",
- "KEY_MUHENKAN",
- "KEY_HENKAN",
- "KEY_KATAKANAHIRAGANA"
- ]
-
-
- events = "events_list = (\n"
- for key in keylist:
- events += (f" uinput.{key},\n")
- events += ")"
- events_list = ""
- exec(f"{events}")
-
- def key_to_key(key):
- for k in keylist:
- if k == key:
- return key
- return ""
-
- def key_emit(dev:uinput.Device,key,state):
- device.emit(key, state)
-
- def print_handler(unused_addr, *args):
- print(f"Received message:{unused_addr} {args}")
-
- def key_handler(addr, *args):
- if addr[0] != "/":
- return
- addr = addr[1:]
- if key_to_key(addr) == "":
- return
- exec(f"key_emit(device,uinput.{addr},int(args[0]))")
-
- device = uinput.Device(events_list)
- handlers = [
- ("/*",print_handler),
- ("/KEY*",key_handler),
- ]
-
- if __name__ == "__main__":
- dispatcher = dispatcher.Dispatcher()
- for addr, func in handlers:
- dispatcher.map(addr, func)
-
- ip = "127.0.0.1"
- port = 7777
-
- server = osc_server.ThreadingOSCUDPServer((ip, port), dispatcher)
- print(f"Serving on {ip}:{port}")
- server.serve_forever()