diff options
| -rw-r--r-- | keyboards/bigswitch/keymaps/333fred/config.h | 20 | ||||
| -rw-r--r-- | keyboards/bigswitch/keymaps/333fred/keymap.c | 123 | ||||
| -rw-r--r-- | keyboards/bigswitch/keymaps/333fred/rules.mk | 5 | 
3 files changed, 148 insertions, 0 deletions
| diff --git a/keyboards/bigswitch/keymaps/333fred/config.h b/keyboards/bigswitch/keymaps/333fred/config.h new file mode 100644 index 0000000000..76f13f08b5 --- /dev/null +++ b/keyboards/bigswitch/keymaps/333fred/config.h @@ -0,0 +1,20 @@ +/* +Copyright 2018 Fredric Silberberg (333fred) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ +#pragma once + +// Long tapping term on the big switch, because it takes so long to press +#define TAPPING_TERM 500 diff --git a/keyboards/bigswitch/keymaps/333fred/keymap.c b/keyboards/bigswitch/keymaps/333fred/keymap.c new file mode 100644 index 0000000000..791fb435f4 --- /dev/null +++ b/keyboards/bigswitch/keymaps/333fred/keymap.c @@ -0,0 +1,123 @@ +#include QMK_KEYBOARD_H + +typedef enum { +    SINGLE_TAP, SINGLE_HOLD, DOUBLE, TRIPLE, QUAD +} tap_dance_state_enum; + +enum { +  TD_KEY = 0 +}; + +static tap_dance_state_enum tap_dance_state; +static bool tap_dance_active = false; +static uint16_t timer; + +void dance_cycle(bool override_timer) { +  if (tap_dance_active) +  { +    if (timer_elapsed(timer) > 100 || override_timer) +    { +      switch (tap_dance_state) +      { +        case SINGLE_HOLD: +        { +          rgblight_increase_hue_noeeprom(); +          break; +        } + +        case DOUBLE: +        { +          rgblight_step_noeeprom(); +          break; +        } + +        case TRIPLE: +        { +          rgblight_toggle_noeeprom(); +          break; +        } + +        default: +          // Not needed +          break; +      } + +      timer = timer_read(); +    } +  } +} + +void dance_finished(qk_tap_dance_state_t *state, void* user_data) { +  // Determine the current state +  switch (state->count) +  { +    case 1: +    { +      if (state->interrupted || state->pressed == 0) tap_dance_state = SINGLE_TAP; +      else tap_dance_state = SINGLE_HOLD; +      break; +    } +    case 2: +    { +      tap_dance_state = DOUBLE; +      break; +    } +    case 3: +    { +      tap_dance_state = TRIPLE; +      break; +    } +    default: +    { +      tap_dance_state = QUAD; +      break; +    } +  } + +  switch (tap_dance_state) +  { +    case SINGLE_TAP: +    { +      // VS Build: CTRL+SHIFT+B +      SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) "b" SS_UP(X_LALT) SS_UP(X_LCTRL)); +      tap_dance_active = false; +      break; +    } + +    case SINGLE_HOLD: +    case DOUBLE: +    case TRIPLE: +    { +      // These are handled by the matrix_scan, which will register the appropriate rgb +      // functions every scan +      tap_dance_active = true; +      timer = timer_read(); +      dance_cycle(true); +      break; +    } + +    case QUAD: +    { +      // Reprogram +      reset_keyboard(); +      break; +    } +  } +} + +void dance_reset(qk_tap_dance_state_t *state, void* user_data) +{ +  tap_dance_active = false; +} + +qk_tap_dance_action_t tap_dance_actions[] = { +  [TD_KEY] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_finished, dance_reset) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +  [0] = LAYOUT(TD(TD_KEY)) +}; + +void matrix_scan_user(void) { +  dance_cycle(false); +} diff --git a/keyboards/bigswitch/keymaps/333fred/rules.mk b/keyboards/bigswitch/keymaps/333fred/rules.mk new file mode 100644 index 0000000000..20aaadacbc --- /dev/null +++ b/keyboards/bigswitch/keymaps/333fred/rules.mk @@ -0,0 +1,5 @@ +# I'm not using things from my userpace in this one +USER_NAME = disable + +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes | 
