diff --git a/.gitmodules b/.gitmodules index 787df12..fb00964 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "qmk_firmware"] path = qmk_firmware url = https://github.com/dgvigil/qmk_firmware.git +[submodule "kmk_firmware"] + path = kmk_firmware + url = git@github.com:KMKfw/kmk_firmware.git diff --git a/dgvigil/definitions/keycodes.h b/dgvigil/definitions/keycodes.h index 1bf3b31..55cf9da 100644 --- a/dgvigil/definitions/keycodes.h +++ b/dgvigil/definitions/keycodes.h @@ -24,6 +24,8 @@ enum { CUSTOM_KEYCODE_START = SAFE_RANGE, M_PASS1, M_PASS2, + M_PASS3, + M_PASS4, CUSTOM_KEYCODE_END }; diff --git a/dgvigil/definitions/keymap_blocks.h b/dgvigil/definitions/keymap_blocks.h index 05f9ee1..3f2d2c0 100644 --- a/dgvigil/definitions/keymap_blocks.h +++ b/dgvigil/definitions/keymap_blocks.h @@ -22,7 +22,7 @@ // _BASE -#define __________________BASE_L1____________________ Q_ESC, W_GRV, KC_E, KC_R, KC_T +#define __________________BASE_L1____________________ Q_ESC, KC_W, KC_E, KC_R, KC_T #define __________________BASE_L2____________________ KC_A, KC_S, KC_D, KC_F, KC_G #define __________________BASE_L3____________________ KC_Z, KC_X, KC_C, KC_V, KC_B @@ -32,6 +32,7 @@ // _NAV +#define __________________NAV_L2____________________ _______, _______, _______, M_PASS3, M_PASS4 #define __________________NAV_L3____________________ _______, _______, _______, M_PASS2, M_PASS1 #define __________________NAV_R1____________________ _______, KC_PSTE, KC_COPY, KC_CUT, KC_UNDO diff --git a/dgvigil/features/tapdance.c b/dgvigil/features/tapdance.c index 32cf2ed..bb7a545 100644 --- a/dgvigil/features/tapdance.c +++ b/dgvigil/features/tapdance.c @@ -2,61 +2,62 @@ #include "tapdance.h" -static td_tap_t tap_state = {.state = TD_NONE}; - -__attribute__((weak)) td_state_t dance_state(tap_dance_state_t *state) { +td_state_t cur_dance(tap_dance_state_t *state) { if (state->count == 1) { if (state->interrupted || !state->pressed) return TD_SINGLE_TAP; // Key has not been interrupted, but the key is still held. Means you want to send a 'HOLD'. - else - return TD_SINGLE_HOLD; + else return TD_SINGLE_HOLD; } else if (state->count == 2) { // TD_DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap // action when hitting 'pp'. Suggested use case for this return value is when you want to send two // keystrokes of the key, and not the 'double tap' action/macro. - if (state->interrupted) - return TD_DOUBLE_SINGLE_TAP; - else if (state->pressed) - return TD_DOUBLE_HOLD; - else - return TD_DOUBLE_TAP; + if (state->interrupted) return TD_DOUBLE_SINGLE_TAP; + else if (state->pressed) return TD_DOUBLE_HOLD; + else return TD_DOUBLE_TAP; } // Assumes no one is trying to type the same letter three times (at least not quickly). // If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add // an exception here to return a 'TD_TRIPLE_SINGLE_TAP', and define that enum just like 'TD_DOUBLE_SINGLE_TAP' if (state->count == 3) { - if (state->interrupted || !state->pressed) - return TD_TRIPLE_TAP; - else - return TD_TRIPLE_HOLD; - } else - return TD_UNKNOWN; + if (state->interrupted || !state->pressed) return TD_TRIPLE_TAP; + else return TD_TRIPLE_HOLD; + } else return TD_UNKNOWN; } -bool is_shifted(void) { - return get_mods() & MOD_MASK_SHIFT || get_oneshot_mods() & MOD_MASK_SHIFT || - get_oneshot_locked_mods() & MOD_MASK_SHIFT; -} +// Create an instance of 'td_tap_t' for the 'q' tap dance. +static td_tap_t qtap_state = { + .is_press_action = true, + .state = TD_NONE +}; -void td_open_parentesis(tap_dance_state_t *state, void *user_data) { - tap_state.state = dance_state(state); - switch (tap_state.state) { - case TD_SINGLE_TAP: - tap_code16(KC_LPRN); - break; - case TD_SINGLE_HOLD: - tap_code16(KC_END); - tap_code16(KC_LPRN); - break; - case TD_DOUBLE_TAP: - SEND_STRING("var "); - break; - default: +void q_finished(tap_dance_state_t *state, void *user_data) { + qtap_state.state = cur_dance(state); + switch (qtap_state.state) { + case TD_SINGLE_TAP: register_code(KC_Q); break; + case TD_SINGLE_HOLD: + register_code(KC_LSFT); + register_code(KC_Q); break; + case TD_DOUBLE_TAP: register_code(KC_ESC); break; + case TD_DOUBLE_HOLD: register_code(KC_GRAVE); break; + default: break; } } +void q_reset(tap_dance_state_t *state, void *user_data) { + switch (qtap_state.state) { + case TD_SINGLE_TAP: unregister_code(KC_Q); break; + case TD_SINGLE_HOLD: + unregister_code(KC_LSFT); + unregister_code(KC_Q); + break; + case TD_DOUBLE_TAP: unregister_code(KC_ESC); break; + case TD_DOUBLE_HOLD: unregister_code(KC_GRAVE); break; + default: break; + } + qtap_state.state = TD_NONE; +} // clang-format off @@ -64,9 +65,7 @@ void td_open_parentesis(tap_dance_state_t *state, void *user_data) { // Tap dance declarations tap_dance_action_t tap_dance_actions[] = { - [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC), - [TD_W_GRV] = ACTION_TAP_DANCE_DOUBLE(KC_W, KC_GRAVE), - [BRT_OPA] = ACTION_TAP_DANCE_FN(td_open_parentesis), + [TD_Q_ESC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, q_finished, q_reset), }; // clang-format on \ No newline at end of file diff --git a/dgvigil/features/tapdance.h b/dgvigil/features/tapdance.h index 0fa9023..84caaf4 100644 --- a/dgvigil/features/tapdance.h +++ b/dgvigil/features/tapdance.h @@ -17,8 +17,8 @@ typedef enum { } td_state_t; typedef struct { + bool is_press_action; td_state_t state; - bool recording; } td_tap_t; -td_state_t dance_state(tap_dance_state_t *state); \ No newline at end of file +td_state_t cur_dance(tap_dance_state_t *state); \ No newline at end of file diff --git a/draculad/keymap.c b/draculad/keymap.c index 04e16f4..fa26231 100644 --- a/draculad/keymap.c +++ b/draculad/keymap.c @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐ __________________EMPTY_____________________, __________________NAV_R1____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ - __________________EMPTY_____________________, __________________NAV_R2____________________, + __________________NAV_L2____________________, __________________NAV_R2____________________, // ├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤ __________________NAV_L3____________________, __________________NAV_R3____________________, // └────────┴────────┴────────┴────────┼────────┤ ├────────┼────────┴────────┴────────┴────────┘ @@ -295,12 +295,22 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case M_PASS1: if (record->event.pressed) { - SEND_STRING("T3lg3Ranch!2023"); + SEND_STRING("P0plarLake!2023"); } return false; case M_PASS2: if (record->event.pressed) { - SEND_STRING("C0pperfield!2023"); + SEND_STRING("Thel0ve0fchrist!"); + } + return false; + case M_PASS3: + if (record->event.pressed) { + SEND_STRING("6754"); + } + return false; + case M_PASS4: + if (record->event.pressed) { + SEND_STRING("10242677"); } return false; } diff --git a/iris/keymap.c b/iris/keymap.c index 2b558a1..eff63ad 100644 --- a/iris/keymap.c +++ b/iris/keymap.c @@ -54,9 +54,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, KC_LPAD, KC_PSCR, _______, _______, _______, _______, RGB_TOG, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, _________________BOOT_L1____________________, __________________NAV_R1____________________, _______, + _______, __________________EMPTY_____________________, __________________NAV_R1____________________, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, __________________EMPTY_____________________, __________________NAV_R2____________________, _______, + _______, __________________NAV_L2____________________, __________________NAV_R2____________________, _______, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, __________________NAV_L3____________________, _______, _______, __________________NAV_R3____________________, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ @@ -130,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______, __________________EMPTY_____________________, _______, _______, __________________MOU_R3____________________, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ - ___________THUMB_3__BLANK__, ___________THUMB_3__BLANK__ + ___________THUMB_3__BLANK__, ___________THUMB_3__BLANK__ // └────────┴────────┴────────┘ └────────┴────────┴────────┘ ) }; @@ -140,12 +140,22 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case M_PASS1: if (record->event.pressed) { - SEND_STRING("T3lg3Ranch!2023"); + SEND_STRING("P0plarLake!2023"); } return false; case M_PASS2: if (record->event.pressed) { - SEND_STRING("P0plarLake!2023"); + SEND_STRING("Thel0ve0fchrist!"); + } + return false; + case M_PASS3: + if (record->event.pressed) { + SEND_STRING("6754"); + } + return false; + case M_PASS4: + if (record->event.pressed) { + SEND_STRING("10242677"); } return false; } diff --git a/kmk_firmware b/kmk_firmware new file mode 160000 index 0000000..e7b0c0e --- /dev/null +++ b/kmk_firmware @@ -0,0 +1 @@ +Subproject commit e7b0c0eab32d2e9fd90e0202fc01046ed658ea78 diff --git a/q8/keymap.c b/q8/keymap.c index 5b08879..1a06da9 100644 --- a/q8/keymap.c +++ b/q8/keymap.c @@ -150,7 +150,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case M_PASS1: if (record->event.pressed) { - SEND_STRING("T3lg3Ranch!2023"); + SEND_STRING("P0plarLake!2023"); } return false; case M_PASS2: diff --git a/qmk_firmware b/qmk_firmware index 1db2481..afb8210 160000 --- a/qmk_firmware +++ b/qmk_firmware @@ -1 +1 @@ -Subproject commit 1db2481a72872f60976587add0c5faf2d0d479ab +Subproject commit afb821077b327148bd347064fce71eea8e8994fe diff --git a/sweep-kmk/README.md b/sweep-kmk/README.md new file mode 100644 index 0000000..e360f10 --- /dev/null +++ b/sweep-kmk/README.md @@ -0,0 +1,6 @@ +# Ferris Sweep + +The [Ferris Sweep](https://github.com/davidphilipbarr/Sweep) is a split, 34 key keyboard designed by David Philip Barr. It uses a Pro-Micro footprint. + +It's based in turn on the Ferris by Philip Chevalier. +The default keymap is based on the [original Ferris default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default). diff --git a/sweep-kmk/adafruit-circuitpython-maple_elite_pi-en_US-9.0.0-alpha.5.uf2 b/sweep-kmk/adafruit-circuitpython-maple_elite_pi-en_US-9.0.0-alpha.5.uf2 new file mode 100644 index 0000000..b1c92ea Binary files /dev/null and b/sweep-kmk/adafruit-circuitpython-maple_elite_pi-en_US-9.0.0-alpha.5.uf2 differ diff --git a/sweep-kmk/flash_nuke.uf2 b/sweep-kmk/flash_nuke.uf2 new file mode 100644 index 0000000..31291e6 Binary files /dev/null and b/sweep-kmk/flash_nuke.uf2 differ diff --git a/sweep-kmk/kb.py b/sweep-kmk/kb.py new file mode 100644 index 0000000..baefdf0 --- /dev/null +++ b/sweep-kmk/kb.py @@ -0,0 +1,36 @@ +# Ferris Sweep pinout translated from QMK repo +# CreditT: 2018-2020 ENDO Katsuhiro, David Philip Barr, Pierre Chevalier + +import board + +from storage import getmount + +from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard +from kmk.quickpin.pro_micro.elite_pi import pinout as pins +from kmk.scanners.keypad import KeysScanner + +# GPIO to key mapping - each line is a new row. +# fmt: off +_KEY_CFG_LEFT = [ + pins[9], pins[16], pins[17], pins[18], pins[19], + pins[15], pins[14], pins[13], pins[12], pins[0], + pins[4], pins[5], pins[6], pins[7], pins[8], + pins[10], pins[11], +] + + +# fmt: on + +class KMKKeyboard(_KMKKeyboard): + def __init__(self): + # create and register the scanner + self.matrix = KeysScanner(_KEY_CFG_LEFT) + + # flake8: noqa + # fmt: off + coord_mapping = [ + 0, 1, 2, 3, 4, 21, 20, 19, 18, 17, + 5, 6, 7, 8, 9, 26, 25, 24, 23, 22, + 10, 11, 12, 13, 14, 31, 30, 29, 28, 27, + 15, 16, 33, 32 + ] diff --git a/sweep-kmk/main.py b/sweep-kmk/main.py new file mode 100644 index 0000000..eb2db77 --- /dev/null +++ b/sweep-kmk/main.py @@ -0,0 +1,113 @@ + +import board + +from kb import KMKKeyboard + +from kmk.keys import KC +from kmk.modules.layers import Layers +from kmk.modules.mouse_keys import MouseKeys +from kmk.modules.split import Split, SplitSide +from kmk.handlers.sequences import send_string +from kmk.modules.tapdance import TapDance +from kmk.modules.capsword import CapsWord +from kmk.modules.combos import Combos, Chord, Sequence +from kmk.modules.autoshift import Autoshift + +keyboard = KMKKeyboard() +keyboard.debug_enabled = False + + +# TODO Comment one of these on each side +split_side = SplitSide.LEFT +#split_side = SplitSide.RIGHT +split = Split( + # split_flip=True, + data_pin=board.D1, + split_side=split_side, + split_target_left=False, + # Using the default wasn't working, try pio + use_pio=True, + uart_flip=True, +) + +layers = Layers() +mouse_key = MouseKeys() +tapdance = TapDance() +tapdance.tap_time = 750 +caps_word=CapsWord() +combos = Combos() +autoshift = Autoshift() + +keyboard.modules = [layers, split, mouse_key, tapdance, caps_word, combos, autoshift] + +# Cleaner key names +_______ = KC.TRNS +XXXXXXX = KC.NO + +# Tap Dance +Q_ESC = KC.TD( + # Tap once for "Q" + KC.Q, + # Tap twice for "ESC" + KC.ESC, +) + + +# Layer tap for other home row keys +NAV_BKSP = KC.LT(1, KC.BSPC) +FUN_TAB = KC.LT(4, KC.TAB) +SYM_ENTER = KC.LT(3, KC.ENT) +NUM_SPC = KC.LT(2, KC.SPC) + +# Send String +M_PASS1 = send_string("T3lg3Ranch!2023") +M_PASS2 = send_string("P0plarLake!2023") + +# COMBOS +combos.combos = [ + Chord((KC.F, KC.A), KC.LGUI), + Chord((KC.F, KC.S), KC.LALT), + Chord((KC.F, KC.D), KC.LCTL), + Chord((KC.J, KC.QUOT), KC.RGUI), + Chord((KC.J, KC.L), KC.RALT), + Chord((KC.J, KC.K), KC.RCTL), + Chord((KC.Z, KC.X), KC.LSFT) +] + +# fmt: off +# flake8: noqa +keyboard.keymap = [ + [ # 0 QWERTY/ BASE + Q_ESC, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, + KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.QUOT, + KC.Z, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, + NAV_BKSP, FUN_TAB, SYM_ENTER, NUM_SPC, + ], + [ # 1 NAVIGATION + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC.CAPSWORD, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT, + _______, _______, _______, M_PASS2, M_PASS1, _______, KC.HOME, KC.PGUP, KC.PGDN, KC.END, + _______, _______, _______, _______, + ], + [ # 2 NUMBERS + KC.LBRC, KC.N7, KC.N8, KC.N9, KC.RBRC, _______, _______, _______, _______, _______, + KC.SCLN, KC.N4, KC.N5, KC.N6, KC.PLUS, _______, _______, _______, _______, _______, + KC.DOT, KC.N1, KC.N2, KC.N3, KC.BSLS, _______, _______, _______, _______, _______, + KC.N0, KC.MINS, _______, _______, + ], + [ # 3 SYMBOLS + KC.LCBR, KC.AMPR, KC.ASTR, KC.LPRN, KC.RCBR, _______, _______, _______, _______, _______, + KC.COLN, KC.DLR, KC.PERC, KC.CIRC, KC.PLUS, _______, _______, _______, _______, _______, + KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.PIPE, _______, _______, _______, _______, _______, + KC.RPRN, KC.UNDS, _______, _______, + ], + [ # 4 FUNCTION + _______, _______, _______, _______, _______, _______, KC.F7, KC.F8, KC.F9, KC.F10, + _______, _______, _______, _______, _______, _______, KC.F4, KC.F5, KC.F6, KC.F11, + _______, _______, _______, _______, _______, _______, KC.F1, KC.F2, KC.F3, KC.F12, + _______, _______, _______, _______, + ], +] + +if __name__ == "__main__": + keyboard.go() diff --git a/swoop/keymap.c b/swoop/keymap.c index c342459..b6fb62d 100644 --- a/swoop/keymap.c +++ b/swoop/keymap.c @@ -147,7 +147,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case M_PASS1: if (record->event.pressed) { - SEND_STRING("T3lg3Ranch!2023"); + SEND_STRING("P0plarLake!2023"); } return false; case M_PASS2: