diff options
| author | brian cully <bjc@spork.org> | 2026-01-13 17:33:17 -0500 |
|---|---|---|
| committer | brian cully <bjc@spork.org> | 2026-01-13 17:33:17 -0500 |
| commit | 30e4287020e75a67f867706e2d84bd7367f6f5af (patch) | |
| tree | 4e1172e03485bd7e7d47426a998122654bbed939 /keyboards | |
| parent | b6650a9e0a3e7a0548de53c91663264a785cf256 (diff) | |
| download | qmk-userspace-30e4287020e75a67f867706e2d84bd7367f6f5af.tar.gz qmk-userspace-30e4287020e75a67f867706e2d84bd7367f6f5af.zip | |
add second layer. tap for fn1, hold for fn2
Diffstat (limited to 'keyboards')
| -rw-r--r-- | keyboards/ploopyco/madromys/keymaps/bjc/keymap.c | 52 | ||||
| -rw-r--r-- | keyboards/ploopyco/madromys/keymaps/bjc/rules.mk | 2 |
2 files changed, 31 insertions, 23 deletions
diff --git a/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c b/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c index aa75a63..e8d5e7c 100644 --- a/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c +++ b/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c @@ -19,7 +19,8 @@ enum { DEFAULT = 0, - FN1 = 1 + FN1, + FN2 }; enum { @@ -33,12 +34,10 @@ const uint32_t layer_hold_timeout = 200; // top left left, top left, top right, top right right, bottom left, bottom right const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [DEFAULT] = LAYOUT(MS_BTN4, MS_BTN5, MS_BTN3, MS_BTN2, MS_BTN1, KC_TOG_HOLD), - [FN1] = LAYOUT(KC_BRIU, QK_BOOT, KC_MPLY, KC_MCTL, KC_BRID, KC_TRNS) + [FN1] = LAYOUT(KC_TRNS, QK_BOOT, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS), + [FN2] = LAYOUT(KC_BRID, QK_BOOT, KC_MPLY, KC_BRIU, KC_MCTL, KC_TRNS), }; -static bool fn1_layer_on = false; -static uint16_t fn1_release_timer = 0; - // probably shouldn't be doing this, but beats trying to keep track of // it myself and getting out of sync. extern bool is_drag_scroll; @@ -52,30 +51,39 @@ layer_state_t layer_state_set_user(layer_state_t state) { return state; } +/* + * use deferred execution to turn on a layer aften n ms of the key + * being held down. + */ +/* +uinst32_t callback(uint32_t trigger_time, void *cb_arg) { + return 0; +} +token = defer_exec(layer_hold_timeout, callback, NULL); +cancel_deferred_exec(token); +*/ + +static bool fn1_up = false; +static uint16_t fn1_release_timer = 0; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_TOG_HOLD: if (record->event.pressed) { - /* - * if the layer is already on, do nothing, as the release event - * (where we want the layer to turn off) will compare against, - * what is at this point a very old ‘fn1_release_timer’ and so - * should release automatically. - */ - if (!fn1_layer_on) { - fn1_layer_on = true; - fn1_release_timer = timer_read(); - } + fn1_release_timer = timer_read(); + layer_off(FN1); + layer_on(FN2); } else { - if (timer_elapsed(fn1_release_timer) > layer_hold_timeout) { - fn1_layer_on = false; + layer_off(FN2); + + if (timer_elapsed(fn1_release_timer) < layer_hold_timeout) { + fn1_up = !fn1_up; + if (fn1_up) { + layer_on(FN1); + } else { + layer_off(FN1); + } } - } - if (fn1_layer_on) { - layer_on(FN1); - } else { - layer_off(FN1); } break; } diff --git a/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk b/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk index 0757206..381de6f 100644 --- a/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk +++ b/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk @@ -1,2 +1,2 @@ -#VIA_ENABLE = yes +VIA_ENABLE = yes DEFERRED_EXEC_ENABLE = yes |
