improved genmap/keymap

This commit is contained in:
Devaev Maxim 2019-02-10 19:55:32 +03:00
parent c8cdcaf512
commit afc4918f34
2 changed files with 129 additions and 116 deletions

View File

@ -1,34 +1,43 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import operator
from typing import Tuple
from typing import List from typing import List
from typing import NamedTuple
import yaml import yaml
# =====
class KeyMapping(NamedTuple):
kvmd_code: int
arduino_hid_key: str
js_key: str
# ===== # =====
def main() -> None: def main() -> None:
keymap: List[Tuple[int, str, str]] = [] keymap: List[KeyMapping] = []
with open("keymap.in") as keymap_file: with open("keymap.in") as keymap_file:
for row in keymap_file: for row in keymap_file:
if not row.startswith("#"): if not row.startswith("#"):
parts = row.split() parts = row.split()
keymap.append((int(parts[0]), parts[1], parts[2])) keymap.append(KeyMapping(
kvmd_code=int(parts[0]),
arduino_hid_key=parts[1],
js_key=parts[2],
))
with open("kvmd/data/keymap.yaml", "w") as kvmd_yaml_file: with open("kvmd/data/keymap.yaml", "w") as kvmd_yaml_file:
yaml.dump({ yaml.dump({
js_key: code km.js_key: km.kvmd_code
for (code, _, js_key) in sorted(keymap, key=operator.itemgetter(2)) for km in keymap
}, kvmd_yaml_file, indent=4, default_flow_style=False) }, kvmd_yaml_file, indent=4, default_flow_style=False)
with open("hid/src/keymap.h", "w") as hid_header_file: with open("hid/src/keymap.h", "w") as hid_header_file:
hid_header_file.write("#pragma once\n\n#include <HID-Project.h>\n\n#include \"inline.h\"\n\n\n") hid_header_file.write("#pragma once\n\n#include <HID-Project.h>\n\n#include \"inline.h\"\n\n\n")
hid_header_file.write("INLINE KeyboardKeycode keymap(uint8_t code) {\n\tswitch(code) {\n") hid_header_file.write("INLINE KeyboardKeycode keymap(uint8_t code) {\n\tswitch(code) {\n")
for (code, hid_key, _) in sorted(keymap, key=operator.itemgetter(1)): for km in sorted(keymap, key=(lambda km: km.arduino_hid_key)):
hid_header_file.write("\t\tcase %d: return %s;\n" % (code, hid_key)) hid_header_file.write("\t\tcase {km.kvmd_code}: return {km.arduino_hid_key};\n".format(km=km))
hid_header_file.write("\t\tdefault: return KEY_ERROR_UNDEFINED;\n\t}\n}\n") hid_header_file.write("\t\tdefault: return KEY_ERROR_UNDEFINED;\n\t}\n}\n")

218
keymap.in
View File

@ -1,109 +1,113 @@
# https://github.com/NicoHood/HID/blob/master/src/HID-APIs/ImprovedKeylayouts.h # https://github.com/NicoHood/HID/blob/master/src/HID-APIs/ImprovedKeylayouts.h
# https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code # https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
1 KEY_A KeyA #
2 KEY_B KeyB # ----------------------------------
3 KEY_C KeyC # KVMD | Arduino HID | JS
4 KEY_D KeyD # ----------------------------------
5 KEY_E KeyE 1 KEY_A KeyA
6 KEY_F KeyF 2 KEY_B KeyB
7 KEY_G KeyG 3 KEY_C KeyC
8 KEY_H KeyH 4 KEY_D KeyD
9 KEY_I KeyI 5 KEY_E KeyE
10 KEY_J KeyJ 6 KEY_F KeyF
11 KEY_K KeyK 7 KEY_G KeyG
12 KEY_L KeyL 8 KEY_H KeyH
13 KEY_M KeyM 9 KEY_I KeyI
14 KEY_N KeyN 10 KEY_J KeyJ
15 KEY_O KeyO 11 KEY_K KeyK
16 KEY_P KeyP 12 KEY_L KeyL
17 KEY_Q KeyQ 13 KEY_M KeyM
18 KEY_R KeyR 14 KEY_N KeyN
19 KEY_S KeyS 15 KEY_O KeyO
20 KEY_T KeyT 16 KEY_P KeyP
21 KEY_U KeyU 17 KEY_Q KeyQ
22 KEY_V KeyV 18 KEY_R KeyR
23 KEY_W KeyW 19 KEY_S KeyS
24 KEY_X KeyX 20 KEY_T KeyT
25 KEY_Y KeyY 21 KEY_U KeyU
26 KEY_Z KeyZ 22 KEY_V KeyV
27 KEY_1 Digit1 23 KEY_W KeyW
28 KEY_2 Digit2 24 KEY_X KeyX
29 KEY_3 Digit3 25 KEY_Y KeyY
30 KEY_4 Digit4 26 KEY_Z KeyZ
31 KEY_5 Digit5 27 KEY_1 Digit1
32 KEY_6 Digit6 28 KEY_2 Digit2
33 KEY_7 Digit7 29 KEY_3 Digit3
34 KEY_8 Digit8 30 KEY_4 Digit4
35 KEY_9 Digit9 31 KEY_5 Digit5
36 KEY_0 Digit0 32 KEY_6 Digit6
37 KEY_ENTER Enter 33 KEY_7 Digit7
38 KEY_ESC Escape 34 KEY_8 Digit8
39 KEY_BACKSPACE Backspace 35 KEY_9 Digit9
40 KEY_TAB Tab 36 KEY_0 Digit0
41 KEY_SPACE Space 37 KEY_ENTER Enter
42 KEY_MINUS Minus 38 KEY_ESC Escape
43 KEY_EQUAL Equal 39 KEY_BACKSPACE Backspace
44 KEY_LEFT_BRACE BracketLeft 40 KEY_TAB Tab
45 KEY_RIGHT_BRACE BracketRight 41 KEY_SPACE Space
46 KEY_BACKSLASH Backslash 42 KEY_MINUS Minus
47 KEY_SEMICOLON Semicolon 43 KEY_EQUAL Equal
48 KEY_QUOTE Quote 44 KEY_LEFT_BRACE BracketLeft
49 KEY_TILDE Backquote 45 KEY_RIGHT_BRACE BracketRight
50 KEY_COMMA Comma 46 KEY_BACKSLASH Backslash
51 KEY_PERIOD Period 47 KEY_SEMICOLON Semicolon
52 KEY_SLASH Slash 48 KEY_QUOTE Quote
53 KEY_CAPS_LOCK CapsLock 49 KEY_TILDE Backquote
54 KEY_F1 F1 50 KEY_COMMA Comma
55 KEY_F2 F2 51 KEY_PERIOD Period
56 KEY_F3 F3 52 KEY_SLASH Slash
57 KEY_F4 F4 53 KEY_CAPS_LOCK CapsLock
58 KEY_F5 F5 54 KEY_F1 F1
59 KEY_F6 F6 55 KEY_F2 F2
60 KEY_F7 F7 56 KEY_F3 F3
61 KEY_F8 F8 57 KEY_F4 F4
62 KEY_F9 F9 58 KEY_F5 F5
63 KEY_F10 F10 59 KEY_F6 F6
64 KEY_F11 F11 60 KEY_F7 F7
65 KEY_F12 F12 61 KEY_F8 F8
66 KEY_PRINT PrintScreen 62 KEY_F9 F9
67 KEY_INSERT Insert 63 KEY_F10 F10
68 KEY_HOME Home 64 KEY_F11 F11
69 KEY_PAGE_UP PageUp 65 KEY_F12 F12
70 KEY_DELETE Delete 66 KEY_PRINT PrintScreen
71 KEY_END End 67 KEY_INSERT Insert
72 KEY_PAGE_DOWN PageDown 68 KEY_HOME Home
73 KEY_RIGHT_ARROW ArrowRight 69 KEY_PAGE_UP PageUp
74 KEY_LEFT_ARROW ArrowLeft 70 KEY_DELETE Delete
75 KEY_DOWN_ARROW ArrowDown 71 KEY_END End
76 KEY_UP_ARROW ArrowUp 72 KEY_PAGE_DOWN PageDown
77 KEY_LEFT_CTRL ControlLeft 73 KEY_RIGHT_ARROW ArrowRight
78 KEY_LEFT_SHIFT ShiftLeft 74 KEY_LEFT_ARROW ArrowLeft
79 KEY_LEFT_ALT AltLeft 75 KEY_DOWN_ARROW ArrowDown
80 KEY_LEFT_GUI MetaLeft 76 KEY_UP_ARROW ArrowUp
81 KEY_RIGHT_CTRL ControlRight 77 KEY_LEFT_CTRL ControlLeft
82 KEY_RIGHT_SHIFT ShiftRight 78 KEY_LEFT_SHIFT ShiftLeft
83 KEY_RIGHT_ALT AltRight 79 KEY_LEFT_ALT AltLeft
84 KEY_RIGHT_GUI MetaRight 80 KEY_LEFT_GUI MetaLeft
85 KEY_PAUSE Pause 81 KEY_RIGHT_CTRL ControlRight
86 KEY_SCROLL_LOCK ScrollLock 82 KEY_RIGHT_SHIFT ShiftRight
# KEY_NON_US_NUM 83 KEY_RIGHT_ALT AltRight
# KEY_NUM_LOCK 84 KEY_RIGHT_GUI MetaRight
# KEYPAD_DIVIDE 85 KEY_PAUSE Pause
# KEYPAD_MULTIPLY 86 KEY_SCROLL_LOCK ScrollLock
# KEYPAD_SUBTRACT # KEY_NON_US_NUM
# KEYPAD_ADD # KEY_NUM_LOCK
# KEYPAD_ENTER # KEYPAD_DIVIDE
# KEYPAD_1 # KEYPAD_MULTIPLY
# KEYPAD_2 # KEYPAD_SUBTRACT
# KEYPAD_3 # KEYPAD_ADD
# KEYPAD_4 # KEYPAD_ENTER
# KEYPAD_5 # KEYPAD_1
# KEYPAD_6 # KEYPAD_2
# KEYPAD_7 # KEYPAD_3
# KEYPAD_8 # KEYPAD_4
# KEYPAD_9 # KEYPAD_5
# KEYPAD_0 # KEYPAD_6
# KEYPAD_DOT # KEYPAD_7
# KEY_NON_US # KEYPAD_8
# KEY_APPLICATION # KEYPAD_9
# KEY_MENU # KEYPAD_0
# KEYPAD_DOT
# KEY_NON_US
# KEY_APPLICATION
# KEY_MENU