Add initial support (untested) for my layout on nyquist with converter board

Unbrick splits completely

Unbrick splits completely
This commit is contained in:
Kyle Brown 2018-12-01 00:15:00 -08:00
parent 6f5f54390b
commit e6acef9648
3 changed files with 119 additions and 18 deletions

View File

@ -69,6 +69,7 @@ class Firmware:
is_master = None is_master = None
uart = None uart = None
uart_flip = True uart_flip = True
uart_pin = None
def __init__(self): def __init__(self):
self._state = InternalState(self) self._state = InternalState(self)
@ -129,18 +130,16 @@ class Firmware:
self.uart.write(message, '\n') self.uart.write(message, '\n')
def _master_half(self): def _master_half(self):
if self.is_master is not None:
return self.is_master
return supervisor.runtime.serial_connected return supervisor.runtime.serial_connected
def init_uart(self, tx=None, rx=None, timeout=20): def init_uart(self, pin, timeout=20):
if self._master_half(): if self._master_half():
# If running with one wire, only receive on master return busio.UART(tx=None, rx=pin, timeout=timeout)
if rx is None or self.uart_flip:
return busio.UART(tx=rx, rx=None, timeout=timeout)
else:
return busio.UART(tx=tx, rx=rx, timeout=timeout)
else: else:
return busio.UART(tx=tx, rx=rx, timeout=timeout) return busio.UART(tx=pin, rx=None, timeout=timeout)
def go(self): def go(self):
assert self.keymap, 'must define a keymap with at least one row' assert self.keymap, 'must define a keymap with at least one row'
@ -148,15 +147,18 @@ class Firmware:
assert self.col_pins, 'no GPIO pins defined for matrix columns' assert self.col_pins, 'no GPIO pins defined for matrix columns'
assert self.diode_orientation is not None, 'diode orientation must be defined' assert self.diode_orientation is not None, 'diode orientation must be defined'
self.is_master == self._master_half()
# Split keyboard Init
if self.split_flip and not self._master_half(): if self.split_flip and not self._master_half():
self.col_pins = list(reversed(self.col_pins)) self.col_pins = list(reversed(self.col_pins))
if self.split_side == "Left": if self.split_side == "Left":
self.split_master_left = self.is_master self.split_master_left = self._master_half()
elif self.split_side == "Right": elif self.split_side == "Right":
self.split_master_left = not self.is_master self.split_master_left = not self._master_half()
if self.uart_pin is not None:
self.uart = self.init_uart(self.uart_pin)
self.matrix = MatrixScanner( self.matrix = MatrixScanner(
cols=self.col_pins, cols=self.col_pins,

View File

@ -12,15 +12,14 @@ from kmk.types import AttrDict
keyboard = Firmware() keyboard = Firmware()
keyboard.col_pins = (P.D10, P.D9, P.D7, P.D5, P.A4, P.A5) keyboard.col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI)
keyboard.row_pins = (P.A0, P.A1, P.A2, P.A3) keyboard.row_pins = (P.D13, P.D11, P.D10, P.D9)
keyboard.diode_orientation = DiodeOrientation.COLUMNS keyboard.diode_orientation = DiodeOrientation.COLUMNS
keyboard.split_type = "UART" keyboard.split_type = "UART"
keyboard.split_flip = True keyboard.split_flip = True
keyboard.split_offsets = [6, 6, 6, 6] keyboard.split_offsets = [6, 6, 6, 6]
keyboard.uart_flip = False keyboard.uart_pin = board.SCL
keyboard.uart = keyboard.init_uart(tx=board.TX, rx=board.RX)
# ------------------User level config variables --------------------------------------- # ------------------User level config variables ---------------------------------------
keyboard.leader_mode = LeaderMode.TIMEOUT keyboard.leader_mode = LeaderMode.TIMEOUT
@ -53,8 +52,6 @@ keyboard.leader_dictionary = {
glds('yay'): emoticons.YAY, glds('yay'): emoticons.YAY,
} }
WPM = send_string("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Bibendum arcu vitae elementum curabitur vitae nunc sed. Facilisis sed odio morbi quis.")
# ---------------------- Keymap --------------------------------------------------------- # ---------------------- Keymap ---------------------------------------------------------
keyboard.keymap = [ keyboard.keymap = [
@ -88,7 +85,7 @@ keyboard.keymap = [
], ],
[ [
# Raise3 # Raise3
[WPM, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F10, KC.F11, KC.F12, KC.LSHIFT(KC.INS)], [KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F10, KC.F11, KC.F12, KC.LSHIFT(KC.INS)],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F7, KC.F8, KC.F9, KC.NO], [KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F7, KC.F8, KC.F9, KC.NO],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F4, KC.F5, KC.F6, KC.NO], [KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F4, KC.F5, KC.F6, KC.NO],
[KC.DF(0), KC.DF(1), KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F1, KC.F2, KC.F3, KC.NO], [KC.DF(0), KC.DF(1), KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F1, KC.F2, KC.F3, KC.NO],

View File

@ -0,0 +1,102 @@
import board
import busio
from kmk.consts import DiodeOrientation, LeaderMode, UnicodeMode
from kmk.keycodes import KC
from kmk.keycodes import generate_leader_dictionary_seq as glds
from kmk.macros.simple import send_string
from kmk.macros.unicode import compile_unicode_string_sequences
from kmk.mcus.circuitpython_samd51 import Firmware
from kmk.pins import Pin as P
from kmk.types import AttrDict
keyboard = Firmware()
keyboard.col_pins = (P.RX, P.A1, P.A2, P.A3, P.A4, P.A5)
keyboard.row_pins = (P.D13, P.D11, P.D10, P.D9, P.D5)
keyboard.diode_orientation = DiodeOrientation.COLUMNS
keyboard.split_type = "UART"
keyboard.split_flip = True
keyboard.split_offsets = [6, 6, 6, 6, 6]
keyboard.uart_flip = True
keyboard.uart = keyboard.init_uart(tx=board.SDA, rx=board.SCL)
# ------------------User level config variables ---------------------------------------
keyboard.leader_mode = LeaderMode.TIMEOUT
keyboard.unicode_mode = UnicodeModes.LINUX
keyboard.tap_time = 150
keyboard.leader_timeout = 2000
keyboard.debug_enabled = True
emoticons = compile_unicode_string_sequences({
# Emoticons, but fancier
'ANGRY_TABLE_FLIP': r'(ノಠ痊ಠ)ノ彡┻━┻',
'CHEER': r'+。:.゚ヽ(´∀。)ノ゚.:。+゚゚+。:.゚ヽ(*´∀)ノ゚.:。+゚',
'TABLE_FLIP': r'(╯°□°)╯︵ ┻━┻',
'WAT': r'⊙.☉',
'FF': r'凸(゚Д゚#)',
'F': r'( ̄^ ̄)凸',
'MEH': r'╮( ̄_ ̄)╭',
'YAY': r'o(^▽^)o',
})
# ---------------------- Leader Key Macros --------------------------------------------
keyboard.leader_dictionary = {
glds('flip'): emoticons.ANGRY_TABLE_FLIP,
glds('cheer'): emoticons.CHEER,
glds('wat'): emoticons.WAT,
glds('ff'): emoticons.FF,
glds('f'): emoticons.F,
glds('meh'): emoticons.MEH,
glds('yay'): emoticons.YAY,
}
LT3_SP = KC.LT(3, KC.SPC)
# ---------------------- Keymap ---------------------------------------------------------
keyboard.keymap = [
[
# Default
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
[KC.GRV, KC.QUOTE, KC.COMMA, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP],
[KC.TAB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT],
[KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH],
[KC.LCTRL, KC.LGUI, KC.LALT, KC.LEAD, KC.MO(2), LT3_SP, LT3_SP, KC.MO(4), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
],
[
# Gaming
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
[KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP],
[KC.ESC, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT],
[KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH],
[KC.LCTRL, KC.LGUI, KC.LALT, KC.F1, KC.F2, KC.SPC, KC.SPC, KC.MO(4), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
],
[
# Raise1
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
[KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.DEL],
[KC.TRNS, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.LBRC, KC.RBRC, KC.BSLS],
[KC.TRNS, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.INS, KC.PGDN, KC.PGUP, KC.MINS],
[KC.RESET, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.NO, KC.NO, KC.EQL, KC.HOME, KC.VOLD, KC.VOLU, KC.END],
],
[
# Raise2
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.N7, KC.N8, KC.N9, KC.BKSP],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.N4, KC.N5, KC.N6, KC.VOLU],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.N1, KC.N2, KC.N3, KC.VOLD],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.N0, KC.N0, KC.PDOT, KC.ENT],
],
[
# Raise3
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F10, KC.F11, KC.F12, KC.LSHIFT(KC.INS)],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F7, KC.F8, KC.F9, KC.NO],
[KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F4, KC.F5, KC.F6, KC.NO],
[KC.DF(0), KC.DF(1), KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.F1, KC.F2, KC.F3, KC.NO],
],
]
if __name__ == '__main__':
keyboard.go()