diff options
| author | Joshua Moses Diamond <josh@windowoffire.com> | 2020-04-10 20:10:37 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-11 10:10:37 +1000 |
| commit | e4cc642a79492ee5b04223c970a3ae9f0d22fba6 (patch) | |
| tree | 299df777893605f40c19ac778f57be1918b4352f /users/spidey3 | |
| parent | c3c39434324b9aa2739ef03c412e157d3a883947 (diff) | |
| download | qmk_firmware-e4cc642a79492ee5b04223c970a3ae9f0d22fba6.tar.gz qmk_firmware-e4cc642a79492ee5b04223c970a3ae9f0d22fba6.zip | |
Some refinements of 75_ansi/spidey3 layout (#8581)
* First cut at Josh Diamond's KBD75 customizations.
Includes:
* My unique keymap with ChromeOS specific keys
* Use RGB underglow to indicate Caps Lock
* Some unicode bindings
* Some changes to make debugging easier
* Updated spidey3 to be applicable to all 75_ansi boards
* Sadly, ChromeOS doesn't pay attention to most consumer codes
* Add mac layer; fix flakeyness in CAPS_LOCK underglow.
* Make layers.json match the keymap (to the extent possible)
* Major cleanup; fix broken debug persistence
* Cleanup some whitespace issues
* Fix incorrect log message.
* Rework layer indication to user RGBLIGHT_LAYERS
* Update layouts/community/75_ansi/spidey3/keymap.c
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Rename users/spidey3/rgblight.c to layer_rgb.c per suggestion
* Refactor to use set_single_persistant_default_layer().
* Use dprint/f to make logging more elegant.
* Update users/spidey3/config.h
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update users/spidey3/config.h
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update layouts/community/75_ansi/spidey3/rules.mk
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/spidey3.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/layer_rgb.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Update users/spidey3/init.c
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Changes from code review
* Numpad layer, various keys for 75_ansi/spidey3
* Add Fn-B to toggle NKRO
* Blink rgb to acknowledge some setting changes
* Updated media control & reset key location
* Minor cleanup
Co-authored-by: Joshua Diamond <jdiamond@Deep-Thought.local>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'users/spidey3')
| -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 |
4 files changed, 88 insertions, 26 deletions
diff --git a/users/spidey3/init.c b/users/spidey3/init.c index a4be6113f..b92394609 100644 --- a/users/spidey3/init.c +++ b/users/spidey3/init.c | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | #include "spidey3.h" | 1 | #include "spidey3.h" |
| 2 | 2 | ||
| 3 | void keyboard_post_init_user(void) { | 3 | void keyboard_post_init_user(void) { |
| 4 | print("SPIDEY3: keyboard_post_init_user\n"); | 4 | print("keyboard_post_init_user\n"); |
| 5 | uprintf(" debug_enable=%u\n", debug_enable); | 5 | uprintf("\tdebug_enable=%u\n", debug_enable); |
| 6 | #ifdef RGBLIGHT_ENABLE | 6 | #ifdef RGBLIGHT_ENABLE |
| 7 | keyboard_post_init_user_rgb(); | 7 | keyboard_post_init_user_rgb(); |
| 8 | #endif | 8 | #endif |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | void eeconfig_init_user(void) { | 11 | void eeconfig_init_user(void) { |
| 12 | print("SPIDEY3: eeconfig_init_user\n"); | 12 | print("eeconfig_init_user\n"); |
| 13 | set_single_persistent_default_layer(_BASE); | 13 | set_single_persistent_default_layer(_BASE); |
| 14 | #ifdef UNICODEMAP_ENABLE | 14 | #ifdef UNICODEMAP_ENABLE |
| 15 | eeconfig_init_user_unicode(); | 15 | eeconfig_init_user_unicode(); |
| @@ -19,3 +19,12 @@ void eeconfig_init_user(void) { | |||
| 19 | eeconfig_init_user_rgb(); | 19 | eeconfig_init_user_rgb(); |
| 20 | #endif | 20 | #endif |
| 21 | } | 21 | } |
| 22 | |||
| 23 | void shutdown_user() { | ||
| 24 | #ifdef RGBLIGHT_ENABLE | ||
| 25 | clear_rgb_layers(); | ||
| 26 | rgblight_enable(); | ||
| 27 | rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 28 | rgblight_sethsv_noeeprom(HSV_RED); | ||
| 29 | #endif | ||
| 30 | } | ||
diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index d80eb20a3..75e66384e 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c | |||
| @@ -10,7 +10,7 @@ uint8_t rgb_val; | |||
| 10 | bool rgb_saved = 0; | 10 | bool rgb_saved = 0; |
| 11 | 11 | ||
| 12 | void spidey_swirl(void) { | 12 | void spidey_swirl(void) { |
| 13 | dprint("SPIDEY3: Setting Spidey Swirl!\n"); | 13 | dprint("Setting Spidey Swirl!\n"); |
| 14 | rgblight_enable(); | 14 | rgblight_enable(); |
| 15 | rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); | 15 | rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); |
| 16 | rgblight_sethsv(213, 255, 128); | 16 | rgblight_sethsv(213, 255, 128); |
| @@ -27,54 +27,104 @@ void eeconfig_init_user_rgb(void) | |||
| 27 | 27 | ||
| 28 | const rgblight_segment_t PROGMEM _capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 2, HSV_AZURE}, {14, 2, HSV_AZURE} ); | 28 | const rgblight_segment_t PROGMEM _capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 2, HSV_AZURE}, {14, 2, HSV_AZURE} ); |
| 29 | const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( {7, 1, HSV_PURPLE} ); | 29 | const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( {7, 1, HSV_PURPLE} ); |
| 30 | const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 2, HSV_GREEN} ); | 30 | const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( {10, 3, HSV_MAGENTA} ); |
| 31 | const rgblight_segment_t PROGMEM _layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( {10, 1, HSV_GREEN} ); | ||
| 32 | const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 6, HSV_GREEN} ); | ||
| 33 | const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS( {9, 6, HSV_RED} ); | ||
| 31 | 34 | ||
| 32 | // Now define the array of layers. Later layers take precedence | 35 | // Now define the array of layers. Later layers take precedence |
| 33 | const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( _capslock_layer, _layer1_layer, _layer2_layer ); | 36 | const rgblight_segment_t* const PROGMEM _rgb_layers[] = |
| 37 | RGBLIGHT_LAYERS_LIST( _capslock_layer, _layer1_layer, _layer2_layer, _layer3_layer, _yes_layer, _no_layer ); | ||
| 34 | const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1; | 38 | const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1; |
| 35 | 39 | ||
| 40 | void clear_rgb_layers() { | ||
| 41 | for (uint8_t i=0; i<_n_rgb_layers; i++) { | ||
| 42 | rgblight_set_layer_state(i, false); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | |||
| 36 | void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { | 46 | void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { |
| 37 | dprint("SPIDEY3: do_rgb_layers()\n"); | 47 | dprint("do_rgb_layers()\n"); |
| 38 | for (uint8_t i=start; i<end; i++) { | 48 | for (uint8_t i=start; i<end; i++) { |
| 39 | bool is_on = layer_state_cmp(state, i); | 49 | bool is_on = layer_state_cmp(state, i); |
| 40 | dprintf(" layer[%d]=%u\n", i, is_on); | 50 | dprintf("\tlayer[%d]=%u\n", i, is_on); |
| 41 | rgblight_set_layer_state(i, is_on); | 51 | rgblight_set_layer_state(i, is_on); |
| 42 | } | 52 | } |
| 43 | } | 53 | } |
| 44 | 54 | ||
| 45 | void keyboard_post_init_user_rgb(void) { | 55 | void keyboard_post_init_user_rgb(void) { |
| 46 | do_rgb_layers(default_layer_state, 1u, RGB_LAYER_BASE_REGULAR); | 56 | do_rgb_layers(default_layer_state, 1u, RGB_LAYER_BASE_REGULAR); |
| 47 | do_rgb_layers(layer_state, RGB_LAYER_BASE_REGULAR, _n_rgb_layers); | 57 | do_rgb_layers(layer_state, RGB_LAYER_BASE_REGULAR, RGB_LAYER_BASE_ACKS); |
| 58 | do_rgb_layers(0, RGB_LAYER_BASE_ACKS, _n_rgb_layers); | ||
| 48 | // Enable the LED layers | 59 | // Enable the LED layers |
| 49 | rgblight_layers = _rgb_layers; | 60 | rgblight_layers = _rgb_layers; |
| 50 | } | 61 | } |
| 51 | 62 | ||
| 52 | layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { | 63 | layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { |
| 53 | dprint("SPIDEY3: default_layer_state_set_user_rgb()\n"); | 64 | dprint("default_layer_state_set_user_rgb()\n"); |
| 54 | do_rgb_layers(state, 1u, RGB_LAYER_BASE_REGULAR); | 65 | do_rgb_layers(state, 1u, RGB_LAYER_BASE_REGULAR); |
| 55 | return state; | 66 | return state; |
| 56 | } | 67 | } |
| 57 | 68 | ||
| 58 | layer_state_t layer_state_set_user_rgb(layer_state_t state) { | 69 | layer_state_t layer_state_set_user_rgb(layer_state_t state) { |
| 59 | dprint("SPIDEY3: layer_state_set_user_rgb()\n"); | 70 | dprint("layer_state_set_user_rgb()\n"); |
| 60 | do_rgb_layers(state, RGB_LAYER_BASE_REGULAR, _n_rgb_layers); | 71 | do_rgb_layers(state, RGB_LAYER_BASE_REGULAR, RGB_LAYER_BASE_ACKS); |
| 61 | return state; | 72 | return state; |
| 62 | } | 73 | } |
| 63 | 74 | ||
| 64 | bool led_update_user_rgb(led_t led_state) { | 75 | bool led_update_user_rgb(led_t led_state) { |
| 65 | dprintf("SPIDEY3: caps_lock=%u\n", led_state.caps_lock); | 76 | dprintf("caps_lock=%u\n", led_state.caps_lock); |
| 66 | rgblight_set_layer_state(0, led_state.caps_lock); | 77 | rgblight_set_layer_state(0, led_state.caps_lock); |
| 67 | return true; | 78 | return true; |
| 68 | } | 79 | } |
| 69 | 80 | ||
| 81 | void rgb_layer_ack(bool yn, bool pressed) { | ||
| 82 | uint8_t layer = RGB_LAYER_BASE_ACKS + (yn ? 0 : 1); | ||
| 83 | rgblight_set_layer_state(layer, pressed); | ||
| 84 | } | ||
| 85 | |||
| 86 | extern keymap_config_t keymap_config; | ||
| 87 | |||
| 70 | bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { | 88 | bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { |
| 89 | bool pressed = record->event.pressed; | ||
| 71 | 90 | ||
| 72 | switch (keycode) { | 91 | switch (keycode) { |
| 73 | case SPI_GLO: | 92 | case SPI_GLO: |
| 74 | if (record->event.pressed) { | 93 | if (pressed) { |
| 75 | spidey_swirl(); | 94 | spidey_swirl(); |
| 76 | } | 95 | } |
| 77 | break; | 96 | return false; |
| 97 | |||
| 98 | // Acks follow... | ||
| 99 | case DEBUG: | ||
| 100 | rgb_layer_ack(debug_enable, pressed); | ||
| 101 | return false; | ||
| 102 | |||
| 103 | case SPI_LNX: | ||
| 104 | case SPI_OSX: | ||
| 105 | case SPI_WIN: | ||
| 106 | rgb_layer_ack(true, pressed); | ||
| 107 | return false; | ||
| 108 | |||
| 109 | // Tricky! | ||
| 110 | // For these, on press the toggle hasn't happened yet, | ||
| 111 | // so we need a little logic to invert, assuming that | ||
| 112 | // on key press the flag WILL be toggled, and on key | ||
| 113 | // release the flag has already been toggled. | ||
| 114 | |||
| 115 | #ifdef VELOCIKEY_ENABLE | ||
| 116 | case VLK_TOG: | ||
| 117 | rgb_layer_ack(pressed != velocikey_enabled(), pressed); | ||
| 118 | return true; | ||
| 119 | #endif | ||
| 120 | |||
| 121 | #ifdef NKRO_ENABLE | ||
| 122 | case NK_TOGG: | ||
| 123 | case NK_ON: | ||
| 124 | case NK_OFF: | ||
| 125 | rgb_layer_ack(pressed != keymap_config.nkro, pressed); | ||
| 126 | return true; | ||
| 127 | #endif | ||
| 78 | } | 128 | } |
| 79 | 129 | ||
| 80 | return true; | 130 | return true; |
diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index d0b794704..8be99dea0 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) { | |||
| 20 | } | 20 | } |
| 21 | eeconfig_update_debug(debug_config.raw); | 21 | eeconfig_update_debug(debug_config.raw); |
| 22 | #endif | 22 | #endif |
| 23 | return false; | 23 | break; |
| 24 | case SPI_LNX: | 24 | case SPI_LNX: |
| 25 | dprint("SPIDEY3: SPI_LNX\n"); | 25 | dprint("SPI_LNX\n"); |
| 26 | set_single_persistent_default_layer(_BASE); | 26 | set_single_persistent_default_layer(_BASE); |
| 27 | layer_off(_OSX); | 27 | layer_off(_OSX); |
| 28 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) | 28 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) |
| 29 | set_unicode_input_mode(UC_LNX); | 29 | set_unicode_input_mode(UC_LNX); |
| 30 | #endif | 30 | #endif |
| 31 | return false; | 31 | break; |
| 32 | case SPI_OSX: | 32 | case SPI_OSX: |
| 33 | dprint("SPIDEY3: SPI_OSX\n"); | 33 | dprint("SPI_OSX\n"); |
| 34 | set_single_persistent_default_layer(_OSX); | 34 | set_single_persistent_default_layer(_OSX); |
| 35 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) | 35 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) |
| 36 | set_unicode_input_mode(UC_OSX); | 36 | set_unicode_input_mode(UC_OSX); |
| 37 | #endif | 37 | #endif |
| 38 | return false; | 38 | break; |
| 39 | case SPI_WIN: | 39 | case SPI_WIN: |
| 40 | dprint("SPIDEY3: SPI_WIN\n"); | 40 | dprint("SPI_WIN\n"); |
| 41 | set_single_persistent_default_layer(_BASE); | 41 | set_single_persistent_default_layer(_BASE); |
| 42 | layer_off(_OSX); | 42 | layer_off(_OSX); |
| 43 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) | 43 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) |
| 44 | set_unicode_input_mode(UC_WINC); | 44 | set_unicode_input_mode(UC_WINC); |
| 45 | #endif | 45 | #endif |
| 46 | return false; | 46 | break; |
| 47 | } | 47 | } |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | #ifdef RGBLIGHT_ENABLE | 50 | #ifdef RGBLIGHT_ENABLE |
| 51 | bool res = process_record_user_rgb(keycode, record); | 51 | bool res = process_record_user_rgb(keycode, record); |
| 52 | if (!res) return false; | 52 | if (res) return true; |
| 53 | #endif | 53 | #endif |
| 54 | 54 | ||
| 55 | return true; | 55 | return false; |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | layer_state_t default_layer_state_set_user(layer_state_t state) { | 58 | 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 125f70a9a..224858391 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h | |||
| @@ -9,12 +9,14 @@ | |||
| 9 | enum userspace_layers { | 9 | enum userspace_layers { |
| 10 | _BASE = 0, | 10 | _BASE = 0, |
| 11 | _OSX, | 11 | _OSX, |
| 12 | _NUMPAD, | ||
| 12 | _FN, | 13 | _FN, |
| 13 | }; | 14 | }; |
| 14 | 15 | ||
| 15 | enum rgb_base_layer { | 16 | enum rgb_base_layer { |
| 16 | RGB_LAYER_BASE_DEFAULT = _BASE, | 17 | RGB_LAYER_BASE_DEFAULT = _BASE, |
| 17 | RGB_LAYER_BASE_REGULAR = _FN, | 18 | RGB_LAYER_BASE_REGULAR = _NUMPAD, |
| 19 | RGB_LAYER_BASE_ACKS = _FN+1, | ||
| 18 | }; | 20 | }; |
| 19 | 21 | ||
| 20 | enum custom_keycodes { | 22 | enum custom_keycodes { |
| @@ -32,6 +34,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record); | |||
| 32 | layer_state_t layer_state_set_user_rgb(layer_state_t state); | 34 | layer_state_t layer_state_set_user_rgb(layer_state_t state); |
| 33 | layer_state_t default_layer_state_set_user_rgb(layer_state_t state); | 35 | layer_state_t default_layer_state_set_user_rgb(layer_state_t state); |
| 34 | bool led_update_user_rgb(led_t led_state); | 36 | bool led_update_user_rgb(led_t led_state); |
| 37 | void clear_rgb_layers(void); | ||
| 35 | #endif | 38 | #endif |
| 36 | 39 | ||
| 37 | #ifdef UNICODEMAP_ENABLE | 40 | #ifdef UNICODEMAP_ENABLE |
