From e6acef9648a45fd78de01c9aed643c156f81c16a Mon Sep 17 00:00:00 2001 From: Kyle Brown Date: Sat, 1 Dec 2018 00:15:00 -0800 Subject: [PATCH] Add initial support (untested) for my layout on nyquist with converter board Unbrick splits completely Unbrick splits completely --- kmk/firmware.py | 24 +++--- user_keymaps/kdb424/levinson_m4.py | 11 +-- user_keymaps/kdb424/nyquist_converter.py | 102 +++++++++++++++++++++++ 3 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 user_keymaps/kdb424/nyquist_converter.py diff --git a/kmk/firmware.py b/kmk/firmware.py index 18b7bbd..d5d552c 100644 --- a/kmk/firmware.py +++ b/kmk/firmware.py @@ -69,6 +69,7 @@ class Firmware: is_master = None uart = None uart_flip = True + uart_pin = None def __init__(self): self._state = InternalState(self) @@ -129,18 +130,16 @@ class Firmware: self.uart.write(message, '\n') def _master_half(self): + if self.is_master is not None: + return self.is_master + 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 running with one wire, only receive on master - 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) - + return busio.UART(tx=None, rx=pin, timeout=timeout) else: - return busio.UART(tx=tx, rx=rx, timeout=timeout) + return busio.UART(tx=pin, rx=None, timeout=timeout) def go(self): 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.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(): self.col_pins = list(reversed(self.col_pins)) if self.split_side == "Left": - self.split_master_left = self.is_master + self.split_master_left = self._master_half() 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( cols=self.col_pins, diff --git a/user_keymaps/kdb424/levinson_m4.py b/user_keymaps/kdb424/levinson_m4.py index 9250b89..f5865d2 100644 --- a/user_keymaps/kdb424/levinson_m4.py +++ b/user_keymaps/kdb424/levinson_m4.py @@ -12,15 +12,14 @@ from kmk.types import AttrDict keyboard = Firmware() -keyboard.col_pins = (P.D10, P.D9, P.D7, P.D5, P.A4, P.A5) -keyboard.row_pins = (P.A0, P.A1, P.A2, P.A3) +keyboard.col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) +keyboard.row_pins = (P.D13, P.D11, P.D10, P.D9) keyboard.diode_orientation = DiodeOrientation.COLUMNS keyboard.split_type = "UART" keyboard.split_flip = True keyboard.split_offsets = [6, 6, 6, 6] -keyboard.uart_flip = False -keyboard.uart = keyboard.init_uart(tx=board.TX, rx=board.RX) +keyboard.uart_pin = board.SCL # ------------------User level config variables --------------------------------------- keyboard.leader_mode = LeaderMode.TIMEOUT @@ -53,8 +52,6 @@ keyboard.leader_dictionary = { 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 --------------------------------------------------------- keyboard.keymap = [ @@ -88,7 +85,7 @@ keyboard.keymap = [ ], [ # 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.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], diff --git a/user_keymaps/kdb424/nyquist_converter.py b/user_keymaps/kdb424/nyquist_converter.py new file mode 100644 index 0000000..ec10ae0 --- /dev/null +++ b/user_keymaps/kdb424/nyquist_converter.py @@ -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()