Update Fri Dec 15 06:24:08 AM CST 2023

This commit is contained in:
2023-12-15 06:24:08 -06:00
parent 6128542526
commit 479074b8a5
16 changed files with 233 additions and 52 deletions

3
.gitmodules vendored
View File

@@ -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

View File

@@ -24,6 +24,8 @@ enum {
CUSTOM_KEYCODE_START = SAFE_RANGE,
M_PASS1,
M_PASS2,
M_PASS3,
M_PASS4,
CUSTOM_KEYCODE_END
};

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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

Submodule kmk_firmware added at e7b0c0eab3

View File

@@ -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:

6
sweep-kmk/README.md Normal file
View 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).

BIN
sweep-kmk/flash_nuke.uf2 Normal file

Binary file not shown.

36
sweep-kmk/kb.py Normal file
View 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
View 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()

View File

@@ -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: