Upload files to 'app'
This commit is contained in:
parent
331cad7b83
commit
22257c5ef5
5
app/__init__.py
Normal file
5
app/__init__.py
Normal file
@ -0,0 +1,5 @@
|
||||
# For relative imports to work in Python 3.6
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
7
app/hid.py
Normal file
7
app/hid.py
Normal file
@ -0,0 +1,7 @@
|
||||
def send(hid_path, control_keys, hid_keycode):
|
||||
with open(hid_path, 'wb+') as hid_handle:
|
||||
buf = [0] * 8
|
||||
buf[0] = control_keys
|
||||
buf[2] = hid_keycode
|
||||
hid_handle.write(bytearray(buf))
|
||||
hid_handle.write(bytearray([0] * 8))
|
165
app/js_to_hid.py
Normal file
165
app/js_to_hid.py
Normal file
@ -0,0 +1,165 @@
|
||||
import dataclasses
|
||||
|
||||
|
||||
class Error(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class UnrecognizedKeyCodeError(Error):
|
||||
pass
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class JavaScriptKeyEvent:
|
||||
meta_modifier: bool
|
||||
alt_modifier: bool
|
||||
shift_modifier: bool
|
||||
ctrl_modifier: bool
|
||||
key: str
|
||||
key_code: int
|
||||
|
||||
|
||||
# JS keycodes source: https://github.com/wesbos/keycodes
|
||||
# HID keycodes source: https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
|
||||
|
||||
# TODO: For simplicity, we map all modifiers keys to the left key, but we could
|
||||
# support distinct keys for left and right if we check the location parameter
|
||||
# from the JavaScript message.
|
||||
_JS_TO_HID_KEYCODES = {
|
||||
3: 0x48, # Pause / Break
|
||||
8: 0x2a, # Backspace / Delete
|
||||
9: 0x2b, # Tab
|
||||
12: 0x53, # Clear
|
||||
13: 0x28, # Enter
|
||||
16: 0xe1, # Shift (Left)
|
||||
17: 0xe0, # Ctrl (left)
|
||||
18: 0xe1, # Alt (left)
|
||||
19: 0x48, # Pause / Break
|
||||
20: 0x39, # Caps Lock
|
||||
21: 0x90, # Hangeul
|
||||
25: 0x91, # Hanja
|
||||
27: 0x29, # Escape
|
||||
32: 0x2c, # Spacebar
|
||||
33: 0x4b, # Page Up
|
||||
34: 0x4e, # Page Down
|
||||
35: 0x4d, # End
|
||||
36: 0x4a, # Home
|
||||
37: 0x50, # Left Arrow
|
||||
38: 0x52, # Up Arrow
|
||||
39: 0x4f, # Right Arrow
|
||||
40: 0x51, # Down Arrow
|
||||
41: 0x77, # Select
|
||||
43: 0x74, # Execute
|
||||
44: 0x46, # Print Screen
|
||||
45: 0x49, # Insert
|
||||
46: 0x4c, # Delete
|
||||
47: 0x75, # Help
|
||||
48: 0x27, # 0
|
||||
49: 0x1e, # 1
|
||||
50: 0x1f, # 2
|
||||
51: 0x20, # 3
|
||||
52: 0x21, # 4
|
||||
53: 0x22, # 5
|
||||
54: 0x23, # 6
|
||||
55: 0x24, # 7
|
||||
56: 0x25, # 8
|
||||
57: 0x26, # 9
|
||||
59: 0x33, # Semicolon
|
||||
60: 0xc5, # <
|
||||
61: 0x2e, # Equal sign
|
||||
65: 0x04, # a
|
||||
66: 0x05, # b
|
||||
67: 0x06, # c
|
||||
68: 0x07, # d
|
||||
69: 0x08, # e
|
||||
70: 0x09, # f
|
||||
71: 0x0a, # g
|
||||
72: 0x0b, # h
|
||||
73: 0x0c, # i
|
||||
74: 0x0d, # j
|
||||
75: 0x0e, # k
|
||||
76: 0x0f, # l
|
||||
77: 0x10, # m
|
||||
78: 0x11, # n
|
||||
79: 0x12, # o
|
||||
80: 0x13, # p
|
||||
81: 0x14, # q
|
||||
82: 0x15, # r
|
||||
83: 0x16, # s
|
||||
84: 0x17, # t
|
||||
85: 0x18, # u
|
||||
86: 0x19, # v
|
||||
87: 0x1a, # w
|
||||
88: 0x1b, # x
|
||||
89: 0x1c, # y
|
||||
90: 0x1d, # z
|
||||
91: 0xe3, # Windows key / Meta Key (Left)
|
||||
96: 0x62, # Numpad 0
|
||||
97: 0x59, # Numpad 1
|
||||
98: 0x5a, # Numpad 2
|
||||
99: 0x5b, # Numpad 3
|
||||
100: 0x5c, # Numpad 4
|
||||
101: 0x5d, # Numpad 5
|
||||
102: 0x5e, # Numpad 6
|
||||
103: 0x5f, # Numpad 7
|
||||
104: 0x60, # Numpad 8
|
||||
105: 0x61, # Numpad 9
|
||||
112: 0x3a, # F1
|
||||
113: 0x3b, # F2
|
||||
114: 0x3c, # F3
|
||||
115: 0x3d, # F4
|
||||
116: 0x3e, # F5
|
||||
117: 0x3f, # F6
|
||||
118: 0x40, # F7
|
||||
119: 0x41, # F8
|
||||
120: 0x42, # F9
|
||||
121: 0x43, # F10
|
||||
122: 0x44, # F11
|
||||
123: 0x45, # F12
|
||||
124: 0x68, # F13
|
||||
125: 0x69, # F14
|
||||
126: 0x6a, # F15
|
||||
127: 0x6b, # F16
|
||||
128: 0x6c, # F17
|
||||
129: 0x6d, # F18
|
||||
130: 0x6e, # F19
|
||||
131: 0x6f, # F20
|
||||
132: 0x70, # F21
|
||||
133: 0x71, # F22
|
||||
134: 0x72, # F23
|
||||
144: 0x53, # Num Lock
|
||||
145: 0x47, # Scroll Lock
|
||||
161: 0x1e, # !
|
||||
163: 0x32, # Hash
|
||||
173: 0x2d, # Minus
|
||||
179: 0xe8, # Media play/pause
|
||||
168: 0xfa, # Refresh
|
||||
186: 0x33, # Semicolon
|
||||
187: 0x2e, # Equal sign
|
||||
188: 0x36, # Comma
|
||||
189: 0x2d, # Minus sign
|
||||
190: 0x37, # Period
|
||||
191: 0x38, # Forward slash
|
||||
192: 0x35, # Accent grave
|
||||
219: 0x2f, # Left bracket ([, {])
|
||||
220: 0x31, # Back slash
|
||||
221: 0x30, # Right bracket (], })
|
||||
222: 0x34, # Single quote
|
||||
223: 0x35, # Accent grave (`)
|
||||
}
|
||||
|
||||
|
||||
def convert(js_key_event):
|
||||
control_chars = 0
|
||||
for i, pressed in enumerate([
|
||||
js_key_event.ctrl_modifier, js_key_event.shift_modifier,
|
||||
js_key_event.alt_modifier, js_key_event.meta_modifier
|
||||
]):
|
||||
if pressed:
|
||||
control_chars |= 1 << i
|
||||
try:
|
||||
return control_chars, _JS_TO_HID_KEYCODES[js_key_event.key_code]
|
||||
except KeyError:
|
||||
raise UnrecognizedKeyCodeError(
|
||||
'Unrecognized key code %s (%d)' %
|
||||
(js_key_event.key, js_key_event.key_code))
|
Loading…
Reference in New Issue
Block a user