diff options
| -rw-r--r-- | layouts/community/75_ansi/spidey3/keymap.c | 31 | ||||
| -rw-r--r-- | layouts/community/75_ansi/spidey3/rules.mk | 3 | ||||
| -rw-r--r-- | users/spidey3/init.c | 15 | ||||
| -rw-r--r-- | users/spidey3/layer_rgb.c | 76 | ||||
| -rw-r--r-- | users/spidey3/spidey3.c | 18 | ||||
| -rw-r--r-- | users/spidey3/spidey3.h | 5 | 
6 files changed, 112 insertions, 36 deletions
diff --git a/layouts/community/75_ansi/spidey3/keymap.c b/layouts/community/75_ansi/spidey3/keymap.c index 511fea28d8..fbb6a98062 100644 --- a/layouts/community/75_ansi/spidey3/keymap.c +++ b/layouts/community/75_ansi/spidey3/keymap.c @@ -1,33 +1,44 @@  #include "spidey3.h" -#define SETTINGS A(S(KC_S)) +#define CH_MENU A(S(KC_S)) +#define OSX_PSC G(S(KC_4)) +#define FN_MENU LT(_FN,KC_APP)  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {      // Linux / Win layout      [_BASE] = LAYOUT_75_ansi( -        KC_ESC,     KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,      KC_F6,      KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,     KC_F12,     SETTINGS,   KC_INS,     KC_DEL, +        KC_ESC,     KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,      KC_F6,      KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,     KC_F12,     KC_PSCR,    KC_INS,     KC_DEL,          KC_GRV,     KC_1,       KC_2,       KC_3,       KC_4,       KC_5,       KC_6,       KC_7,       KC_8,       KC_9,       KC_0,       KC_MINS,    KC_EQL,                 KC_BSPC,    KC_HOME,          KC_TAB,     KC_Q,       KC_W,       KC_E,       KC_R,       KC_T,       KC_Y,       KC_U,       KC_I,       KC_O,       KC_P,       KC_LBRC,    KC_RBRC,                KC_BSLS,    KC_PGUP,          KC_CAPS,    KC_A,       KC_S,       KC_D,       KC_F,       KC_G,       KC_H,       KC_J,       KC_K,       KC_L,       KC_SCLN,    KC_QUOT,                            KC_ENT,     KC_PGDN,          KC_LSFT,    KC_Z,       KC_X,       KC_C,       KC_V,       KC_B,       KC_N,       KC_M,       KC_COMM,    KC_DOT,     KC_SLSH,                            KC_RSFT,    KC_UP,      KC_END, -        KC_LCTL,    KC_LGUI,    KC_LALT,                                    KC_SPC,                                             KC_RALT,    MO(_FN),    KC_RCTL,    KC_LEFT,    KC_DOWN,    KC_RGHT +        KC_LCTL,    KC_LGUI,    KC_LALT,                                    KC_SPC,                                             KC_RALT,    FN_MENU,    KC_RCTL,    KC_LEFT,    KC_DOWN,    KC_RGHT      ),      // OSX layout      [_OSX] = LAYOUT_75_ansi( -        _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    KC_EJCT,    _______,    _______, +        _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    OSX_PSC,    _______,    _______,          _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,                _______,    _______,          _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,                _______,    _______,          _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,                            _______,    _______,          _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,                            _______,    _______,    _______,          _______,    KC_LALT,    KC_LGUI,                                    _______,                                            _______,    _______,    _______,    _______,    _______,    _______      ), +    // Numpad +    [_NUMPAD] = LAYOUT_75_ansi( +        XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_NUMLOCK, KC_PEQL,    KC_PSLS,    KC_PAST,    XXXXXXX,    XXXXXXX,    _______,    _______,    _______, +        XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_NUMLOCK, XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_KP_7,    KC_KP_8,    KC_KP_9,    KC_PSLS,    KC_PMNS,    KC_PEQL,                _______,    _______, +        _______,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_KP_4,    KC_KP_5,    KC_KP_6,    KC_PAST,    _______,    _______,                _______,    _______, +        _______,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_KP_1,    KC_KP_2,    KC_KP_3,    KC_PMNS,    KC_SCLN,                            KC_PENT,    _______, +        _______,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    KC_KP_0,    KC_PDOT,    KC_PCMM,    KC_PPLS,                            _______,    _______,    _______, +        _______,    _______,    _______,                                    _______,                                            _______,    _______,    _______,    _______,    _______,    _______ +    ),      // FN      [_FN] = LAYOUT_75_ansi( -        _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    KC_PWR, -        _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    X_BUL,      _______,    _______,    X_DASH,     _______,                RESET,      EEP_RST, -        _______,    RGB_TOG,    RGB_MOD,    RGB_HUD,    RGB_HUI,    RGB_SAD,    RGB_SAI,    RGB_VAD,    RGB_VAI,    RGB_SPD,    RGB_SPI,    VLK_TOG,    _______,                _______,    KC_VOLU, -        _______,    RGB_M_P,    RGB_M_B,    RGB_M_R,    RGB_M_SW,   RGB_M_SN,   RGB_M_K,    RGB_M_G,    RGB_M_T,    SPI_LNX,    _______,    _______,                            _______,    KC_VOLD, -        _______,    SPI_GLO,    _______,    SPI_WIN,    _______,    _______,    _______,    SPI_OSX,    X(LARR),    X(RARR),    DEBUG,      _______,                            KC_BRIU,    KC_MUTE, -        _______,    _______,    _______,                                    _______,                                            _______,    _______,    _______,    _______,    KC_BRID,    _______ +        RESET,      _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    KC_SLEP,    KC_WAKE,    KC_PWR, +        EEP_RST,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    X_BUL,      KC_MPRV,    KC_MNXT,    X_DASH,     _______,                KC_PAUS,    KC_SLCK, +        _______,    RGB_TOG,    RGB_MOD,    RGB_HUD,    RGB_HUI,    RGB_SAD,    RGB_SAI,    RGB_VAD,    RGB_VAI,    RGB_SPD,    RGB_SPI,    VLK_TOG,    _______,                _______,    KC_BRIU, +        _______,    RGB_M_P,    RGB_M_B,    RGB_M_R,    RGB_M_SW,   RGB_M_SN,   RGB_M_K,    RGB_M_G,    RGB_M_T,    SPI_LNX,    _______,    _______,                            _______,    KC_BRID, +        _______,    SPI_GLO,    _______,    SPI_WIN,    _______,    NK_TOGG,    TG(_NUMPAD),SPI_OSX,    X(LARR),    X(RARR),    DEBUG,      _______,                            KC_VOLU,    KC_MUTE, +        _______,    _______,    _______,                                    KC_MPLY,                                            KC_APP,     _______,    CH_MENU,    KC_MPRV,    KC_VOLD,    KC_MNXT      )  }; diff --git a/layouts/community/75_ansi/spidey3/rules.mk b/layouts/community/75_ansi/spidey3/rules.mk index d9ac1126ce..fdb44b3ea5 100644 --- a/layouts/community/75_ansi/spidey3/rules.mk +++ b/layouts/community/75_ansi/spidey3/rules.mk @@ -13,3 +13,6 @@ AUDIO_ENABLE = no  RGBLIGHT_ENABLE = yes  UNICODEMAP_ENABLE = yes  VELOCIKEY_ENABLE = yes + +# The following disabled to save space +SPACE_CADET_ENABLE = no diff --git a/users/spidey3/init.c b/users/spidey3/init.c index a4be6113f4..b923946093 100644 --- a/users/spidey3/init.c +++ b/users/spidey3/init.c @@ -1,15 +1,15 @@  #include "spidey3.h"  void keyboard_post_init_user(void) { -  print("SPIDEY3: keyboard_post_init_user\n"); -  uprintf("         debug_enable=%u\n", debug_enable); +  print("keyboard_post_init_user\n"); +  uprintf("\tdebug_enable=%u\n", debug_enable);  #ifdef RGBLIGHT_ENABLE    keyboard_post_init_user_rgb();  #endif  }  void eeconfig_init_user(void) { -  print("SPIDEY3: eeconfig_init_user\n"); +  print("eeconfig_init_user\n");    set_single_persistent_default_layer(_BASE);  #ifdef UNICODEMAP_ENABLE    eeconfig_init_user_unicode(); @@ -19,3 +19,12 @@ void eeconfig_init_user(void) {    eeconfig_init_user_rgb();  #endif  } + +void shutdown_user() { +#ifdef RGBLIGHT_ENABLE +  clear_rgb_layers(); +  rgblight_enable(); +  rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); +  rgblight_sethsv_noeeprom(HSV_RED); +#endif +} diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index d80eb20a31..75e66384e2 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -10,7 +10,7 @@ uint8_t rgb_val;  bool rgb_saved = 0;  void spidey_swirl(void) { -  dprint("SPIDEY3: Setting Spidey Swirl!\n"); +  dprint("Setting Spidey Swirl!\n");    rgblight_enable();    rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);    rgblight_sethsv(213, 255, 128); @@ -27,54 +27,104 @@ void eeconfig_init_user_rgb(void)  const rgblight_segment_t PROGMEM _capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 2, HSV_AZURE}, {14, 2, HSV_AZURE} );  const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( {7, 1, HSV_PURPLE} ); -const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 2, HSV_GREEN} ); +const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( {10, 3, HSV_MAGENTA} ); +const rgblight_segment_t PROGMEM _layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( {10, 1, HSV_GREEN} ); +const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 6, HSV_GREEN} ); +const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 6, HSV_RED} );  // Now define the array of layers. Later layers take precedence -const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( _capslock_layer, _layer1_layer, _layer2_layer ); +const rgblight_segment_t* const PROGMEM _rgb_layers[] = +    RGBLIGHT_LAYERS_LIST( _capslock_layer, _layer1_layer, _layer2_layer, _layer3_layer, _yes_layer, _no_layer );  const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1; +void clear_rgb_layers() { +    for (uint8_t i=0; i<_n_rgb_layers; i++) { +        rgblight_set_layer_state(i, false); +    } +} +  void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { -    dprint("SPIDEY3: do_rgb_layers()\n"); -    for (uint8_t i=start; i<end; i++) {  +    dprint("do_rgb_layers()\n"); +    for (uint8_t i=start; i<end; i++) {        bool is_on = layer_state_cmp(state, i); -      dprintf("         layer[%d]=%u\n", i, is_on); +      dprintf("\tlayer[%d]=%u\n", i, is_on);        rgblight_set_layer_state(i, is_on);      }  }  void keyboard_post_init_user_rgb(void) {      do_rgb_layers(default_layer_state, 1u, RGB_LAYER_BASE_REGULAR); -    do_rgb_layers(layer_state, RGB_LAYER_BASE_REGULAR, _n_rgb_layers); +    do_rgb_layers(layer_state, RGB_LAYER_BASE_REGULAR, RGB_LAYER_BASE_ACKS); +    do_rgb_layers(0, RGB_LAYER_BASE_ACKS, _n_rgb_layers);      // Enable the LED layers      rgblight_layers = _rgb_layers;  }  layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { -    dprint("SPIDEY3: default_layer_state_set_user_rgb()\n"); +    dprint("default_layer_state_set_user_rgb()\n");      do_rgb_layers(state, 1u, RGB_LAYER_BASE_REGULAR);      return state;  }  layer_state_t layer_state_set_user_rgb(layer_state_t state) { -    dprint("SPIDEY3: layer_state_set_user_rgb()\n"); -    do_rgb_layers(state, RGB_LAYER_BASE_REGULAR, _n_rgb_layers); +    dprint("layer_state_set_user_rgb()\n"); +    do_rgb_layers(state, RGB_LAYER_BASE_REGULAR, RGB_LAYER_BASE_ACKS);      return state;  }  bool led_update_user_rgb(led_t led_state) { -    dprintf("SPIDEY3: caps_lock=%u\n", led_state.caps_lock); +    dprintf("caps_lock=%u\n", led_state.caps_lock);      rgblight_set_layer_state(0, led_state.caps_lock);      return true;  } +void rgb_layer_ack(bool yn, bool pressed) { +  uint8_t layer = RGB_LAYER_BASE_ACKS + (yn ? 0 : 1); +  rgblight_set_layer_state(layer, pressed); +} + +extern keymap_config_t keymap_config; +  bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { +  bool pressed = record->event.pressed;    switch (keycode) {      case SPI_GLO: -      if (record->event.pressed) { +      if (pressed) {          spidey_swirl();        } -      break; +      return false; + +    // Acks follow... +    case DEBUG: +      rgb_layer_ack(debug_enable, pressed); +      return false; + +    case SPI_LNX: +    case SPI_OSX: +    case SPI_WIN: +      rgb_layer_ack(true, pressed); +      return false; + +    // Tricky! +    // For these, on press the toggle hasn't happened yet, +    // so we need a little logic to invert, assuming that +    // on key press the flag WILL be toggled, and on key +    // release the flag has already been toggled. + +#ifdef VELOCIKEY_ENABLE +    case VLK_TOG: +      rgb_layer_ack(pressed != velocikey_enabled(), pressed); +      return true; +#endif + +#ifdef NKRO_ENABLE +    case NK_TOGG: +    case NK_ON: +    case NK_OFF: +      rgb_layer_ack(pressed != keymap_config.nkro, pressed); +      return true; +#endif    }    return true; diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index d0b7947043..8be99dea04 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -20,39 +20,39 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {          }          eeconfig_update_debug(debug_config.raw);  #endif -        return false; +        break;        case SPI_LNX: -	dprint("SPIDEY3: SPI_LNX\n"); +	dprint("SPI_LNX\n");          set_single_persistent_default_layer(_BASE);  	layer_off(_OSX);  #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)          set_unicode_input_mode(UC_LNX);  #endif -        return false; +        break;        case SPI_OSX: -	dprint("SPIDEY3: SPI_OSX\n"); +	dprint("SPI_OSX\n");          set_single_persistent_default_layer(_OSX);  #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)          set_unicode_input_mode(UC_OSX);  #endif -        return false; +        break;        case SPI_WIN: -	dprint("SPIDEY3: SPI_WIN\n"); +	dprint("SPI_WIN\n");          set_single_persistent_default_layer(_BASE);  	layer_off(_OSX);  #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)          set_unicode_input_mode(UC_WINC);  #endif -        return false; +        break;      }    }  #ifdef RGBLIGHT_ENABLE    bool res = process_record_user_rgb(keycode, record); -  if (!res) return false; +  if (res) return true;  #endif -  return true; +  return false;  }  layer_state_t default_layer_state_set_user(layer_state_t state) { diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h index 125f70a9ac..224858391d 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h @@ -9,12 +9,14 @@  enum userspace_layers {    _BASE = 0,    _OSX, +  _NUMPAD,    _FN,  };  enum rgb_base_layer {    RGB_LAYER_BASE_DEFAULT = _BASE, -  RGB_LAYER_BASE_REGULAR = _FN, +  RGB_LAYER_BASE_REGULAR = _NUMPAD, +  RGB_LAYER_BASE_ACKS = _FN+1,  };  enum custom_keycodes { @@ -32,6 +34,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);  layer_state_t layer_state_set_user_rgb(layer_state_t state);  layer_state_t default_layer_state_set_user_rgb(layer_state_t state);  bool led_update_user_rgb(led_t led_state); +void clear_rgb_layers(void);  #endif  #ifdef UNICODEMAP_ENABLE  | 
