80 lines
2.4 KiB
Python
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()))
|