asm-test/tools/keymap.py

80 lines
2.4 KiB
Python

L0 = 128
L1 = 129
L2 = 130
L3 = 131
BKSPC = 132
ENTER = 133
keymap = [
[
[ "q", "w", "f", "p", "b", "j", "l", "u", "y", ";"],
[ "a", "r", "s", "t", "g", "k", "n", "e", "i", "o"],
[ 0, "x", "c", "d", "v", "m", "h", "z", 0, 0],
[ L0, L1, L2, L3, " ",BKSPC, 0, 0, 0,ENTER],
],
[
[ "Q", "W", "F", "P", "B", "J", "L", "U", "Y", ":"],
[ "A", "R", "S", "T", "G", "K", "N", "E", "I", "O"],
[ 0, "X", "C", "D", "V", "M", "H", "Z", 0, 0],
[ L0, L1, L2, L3, " ",BKSPC, 0, 0, 0,ENTER],
],
[
[ "'", "~", "=", "{", "@", "%", "}", "_", "*", "\""],
[ ",", "\\", "+", "(", "<", ">", ")", "-", "/", "."],
[ "`", "?", "#", "[", "|", "&", "]", "$", "!", "^"],
[ L0, L1, L2, L3, " ",BKSPC, 0, 0, 0,ENTER],
],
[
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ L0, L1, L2, L3, " ",BKSPC, 0, 0, 0,ENTER],
],
]
# qwerty_keymap = [
# ["z", "x", "c", "v", "b"],
# ["a", "s", "d", "f", "g"],
# ["q", "w", "e", "r", "t"],
# ["1", "2", "3", "4", "5"],
# ["6", "7", "8", "9", "0"],
# ["y", "u", "i", "o", "p"],
# ["h", "j", "k", "l", ";"],
# ["n", "m", ",", ".", " "],
# ]
def visual_to_scancode(table):
assert len(table) == 4
assert all(len(row) == 10 for row in table)
yield table[3][0:5]
yield table[2][0:5]
yield table[1][0:5]
yield table[0][0:5]
yield table[0][5:10]
yield table[1][5:10]
yield table[2][5:10]
yield table[3][5:10]
def keymap_table():
for layer in keymap:
for state in visual_to_scancode(layer):
for key in reversed(state):
if type(key) is str:
code = ord(key)
assert code < 128
yield code
elif type(key) is int:
yield key
else:
raise TypeError(key)
for _ in range(8 - len(state)):
yield ord('?')
import sys
with open(sys.argv[1], 'wb') as f:
f.write(bytes(keymap_table()))