Resolves #121: Use flattened keymaps, which can visually represent the logical layout, rather than the physical wiring

This commit is contained in:
Josh Klar
2019-05-12 17:04:23 -07:00
parent d70c2ccc17
commit 0b364cf7f1
10 changed files with 156 additions and 94 deletions

View File

@@ -3,6 +3,7 @@ import board
from kmk.consts import DiodeOrientation
from kmk.mcus.circuitpython_samd51 import Firmware as _Firmware
from kmk.pins import Pin as P
from kmk.util import intify_coordinate as ic
class Firmware(_Firmware):
@@ -17,3 +18,24 @@ class Firmware(_Firmware):
split_offsets = (6, 6, 6, 6, 6)
split_type = "UART"
uart_pin = board.SCL
coord_mapping = []
coord_mapping.extend(ic(0, x) for x in range(12))
coord_mapping.extend(ic(1, x) for x in range(12))
coord_mapping.extend(ic(2, x) for x in range(12))
# Buckle up friends, the bottom row of this keyboard is wild, and making
# our layouts match, visually, what the keyboard looks like, requires some
# surgery on the bottom two rows of coords
# Row index 3 is actually perfectly sane and we _could_ expose it
# just like the above three rows, however, visually speaking, the
# top-right thumb cluster button (when looking at the left-half PCB)
# is more inline with R3, so we'll jam that key (and its mirror) in here
coord_mapping.extend(ic(3, x) for x in range(6))
coord_mapping.append(ic(4, 2))
coord_mapping.append(ic(4, 9))
coord_mapping.extend(ic(3, x) for x in range(6, 12)) # Now, the rest of R3
# And now, to handle R4, which at this point is down to just six keys
coord_mapping.extend(ic(4, x) for x in range(3, 9))

View File

@@ -1,6 +1,27 @@
from kmk.consts import DiodeOrientation
from kmk.mcus.circuitpython_samd51 import Firmware as _Firmware
from kmk.pins import Pin as P
from kmk.util import intify_coordinate as ic
# Implements what used to be handled by Firmware.swap_indicies for this
# board, by flipping various row3 (bottom physical row) keys so their
# coord_mapping matches what the user pressed (even if the wiring
# underneath is sending different coordinates)
_r3_swap_conversions = {
3: 9,
4: 10,
5: 11,
9: 3,
10: 4,
11: 5,
}
def r3_swap(col):
try:
return _r3_swap_conversions[col]
except KeyError:
return col
class Firmware(_Firmware):
@@ -11,8 +32,8 @@ class Firmware(_Firmware):
rollover_cols_every_rows = 4
diode_orientation = DiodeOrientation.COLUMNS
swap_indicies = {
(3, 3): (3, 9),
(3, 4): (3, 10),
(3, 5): (3, 11),
}
coord_mapping = []
coord_mapping.extend(ic(0, x) for x in range(12))
coord_mapping.extend(ic(1, x) for x in range(12))
coord_mapping.extend(ic(2, x) for x in range(12))
coord_mapping.extend(ic(3, r3_swap(x)) for x in range(12))