Resolves #121: Use flattened keymaps, which can visually represent the logical layout, rather than the physical wiring
This commit is contained in:
@@ -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))
|
||||
|
@@ -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))
|
||||
|
Reference in New Issue
Block a user