Update Fri Dec 15 06:24:08 AM CST 2023
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -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
|
||||
|
||||
@@ -24,6 +24,8 @@ enum {
|
||||
CUSTOM_KEYCODE_START = SAFE_RANGE,
|
||||
M_PASS1,
|
||||
M_PASS2,
|
||||
M_PASS3,
|
||||
M_PASS4,
|
||||
CUSTOM_KEYCODE_END
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
td_state_t cur_dance(tap_dance_state_t *state);
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
1
kmk_firmware
Submodule
1
kmk_firmware
Submodule
Submodule kmk_firmware added at e7b0c0eab3
@@ -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:
|
||||
|
||||
Submodule qmk_firmware updated: 1db2481a72...afb821077b
6
sweep-kmk/README.md
Normal file
6
sweep-kmk/README.md
Normal file
@@ -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).
|
||||
Binary file not shown.
BIN
sweep-kmk/flash_nuke.uf2
Normal file
BIN
sweep-kmk/flash_nuke.uf2
Normal file
Binary file not shown.
36
sweep-kmk/kb.py
Normal file
36
sweep-kmk/kb.py
Normal file
@@ -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
|
||||
]
|
||||
113
sweep-kmk/main.py
Normal file
113
sweep-kmk/main.py
Normal file
@@ -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()
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user