Newer
Older
voi / voi_keyboard.py
  1. import uinput
  2. from pythonosc import dispatcher
  3. from pythonosc import osc_server
  4.  
  5. keylist = [
  6. "KEY_A",
  7. "KEY_B",
  8. "KEY_C",
  9. "KEY_D",
  10. "KEY_E",
  11. "KEY_F",
  12. "KEY_G",
  13. "KEY_H",
  14. "KEY_I",
  15. "KEY_J",
  16. "KEY_K",
  17. "KEY_L",
  18. "KEY_M",
  19. "KEY_N",
  20. "KEY_O",
  21. "KEY_P",
  22. "KEY_Q",
  23. "KEY_R",
  24. "KEY_S",
  25. "KEY_T",
  26. "KEY_U",
  27. "KEY_V",
  28. "KEY_W",
  29. "KEY_X",
  30. "KEY_Y",
  31. "KEY_Z",
  32. "KEY_1",
  33. "KEY_2",
  34. "KEY_3",
  35. "KEY_4",
  36. "KEY_5",
  37. "KEY_6",
  38. "KEY_7",
  39. "KEY_8",
  40. "KEY_9",
  41. "KEY_0",
  42. "KEY_MINUS",
  43. "KEY_EQUAL",
  44. "KEY_YEN",
  45. "KEY_LEFTBRACE",
  46. "KEY_RIGHTBRACE",
  47. "KEY_SEMICOLON",
  48. "KEY_APOSTROPHE",
  49. "KEY_BACKSLASH",
  50. "KEY_COMMA",
  51. "KEY_DOT",
  52. "KEY_SLASH",
  53. "KEY_BACKSLASH",
  54. "KEY_F1",
  55. "KEY_F2",
  56. "KEY_F3",
  57. "KEY_F4",
  58. "KEY_F5",
  59. "KEY_F6",
  60. "KEY_F7",
  61. "KEY_F8",
  62. "KEY_F9",
  63. "KEY_F10",
  64. "KEY_F11",
  65. "KEY_F12",
  66. "KEY_ESC",
  67. "KEY_TAB",
  68. "KEY_CAPSLOCK",
  69. "KEY_LEFTSHIFT",
  70. "KEY_LEFTCTRL",
  71. "KEY_LEFTMETA",
  72. "KEY_LEFTALT",
  73. "KEY_BACKSPACE",
  74. "KEY_ENTER",
  75. "KEY_RIGHTSHIFT",
  76. "KEY_RIGHTCTRL",
  77. "KEY_RIGHTALT",
  78. "KEY_SPACE",
  79. "KEY_MUHENKAN",
  80. "KEY_HENKAN",
  81. "KEY_KATAKANAHIRAGANA"
  82. ]
  83.  
  84.  
  85. events = "events_list = (\n"
  86. for key in keylist:
  87. events += (f" uinput.{key},\n")
  88. events += ")"
  89. events_list = ""
  90. exec(f"{events}")
  91.  
  92. def key_to_key(key):
  93. for k in keylist:
  94. if k == key:
  95. return key
  96. return ""
  97.  
  98. def key_emit(dev:uinput.Device,key,state):
  99. device.emit(key, state)
  100.  
  101. def print_handler(unused_addr, *args):
  102. print(f"Received message:{unused_addr} {args}")
  103.  
  104. def key_handler(addr, *args):
  105. if addr[0] != "/":
  106. return
  107. addr = addr[1:]
  108. if key_to_key(addr) == "":
  109. return
  110. exec(f"key_emit(device,uinput.{addr},int(args[0]))")
  111.  
  112. device = uinput.Device(events_list)
  113. handlers = [
  114. ("/*",print_handler),
  115. ("/KEY*",key_handler),
  116. ]
  117.  
  118. if __name__ == "__main__":
  119. dispatcher = dispatcher.Dispatcher()
  120. for addr, func in handlers:
  121. dispatcher.map(addr, func)
  122.  
  123. ip = "127.0.0.1"
  124. port = 7777
  125.  
  126. server = osc_server.ThreadingOSCUDPServer((ip, port), dispatcher)
  127. print(f"Serving on {ip}:{port}")
  128. server.serve_forever()