From 7f8aa3f84cd569406f3e65509d0e2ebb594aa6ce Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Mon, 28 Dec 2020 00:25:28 -0500 Subject: [PATCH 01/22] Don't block keys during startup animation --- users/spidey3/config.h | 1 + users/spidey3/layer_rgb.c | 248 +++++++++++++++++++++++++++----------- users/spidey3/spidey3.c | 7 +- users/spidey3/spidey3.h | 1 + 4 files changed, 183 insertions(+), 74 deletions(-) diff --git a/users/spidey3/config.h b/users/spidey3/config.h index 053240718e67..665bc14d631f 100644 --- a/users/spidey3/config.h +++ b/users/spidey3/config.h @@ -6,6 +6,7 @@ #define RGBLIGHT_MAX_LAYERS 16 #define RGBLIGHT_LAYER_BLINK #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF +#define RGBLIGHT_STARTUP_ANIMATION #undef RGBLIGHT_ANIMATIONS #define RGBLIGHT_EFFECT_BREATHING diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 160cc43174d8..bc730c1bcaad 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -11,7 +11,7 @@ bool rgb_saved = 0; void spidey_glow(void) { rgblight_enable(); - rgblight_mode(RGBLIGHT_MODE_TWINKLE + 4); + rgblight_mode(RGBLIGHT_MODE_TWINKLE + 1); rgblight_sethsv(213, 255, 128); #ifdef VELOCIKEY_ENABLE if (velocikey_enabled()) velocikey_toggle(); @@ -91,7 +91,52 @@ void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { extern rgblight_config_t rgblight_config; extern rgblight_status_t rgblight_status; -static bool startup_animation_done = false; + +#if defined(RGBLIGHT_STARTUP_ANIMATION) + +#define STARTUP_ANIMATION_SATURATION 200 +#define STARTUP_ANIMATION_VALUE 255 +#define STARTUP_ANIMATION_FADE_STEP 5 +#define STARTUP_ANIMATION_CYCLE_STEP 2 +#define STARTUP_ANIMATION_RAMP_TO_STEPS 70 +#define STARTUP_ANIMATION_STEP_TIME 10 +#define STARTUP_ANIMATION_INITIAL_DELAY 500 + +typedef enum { + DISABLED, + WAITING, + RESTART, + START, + FADE_OLD, + FADE_IN, + CYCLE, + RAMP_DOWN, + RAMP_TO, + CLEAN_UP, + DONE +} startup_animation_state_t; + +static bool is_enabled; +static uint8_t old_hue; +static uint8_t old_sat; +static uint8_t old_val; +static uint8_t old_mode; +static uint8_t old_base_mode; +static startup_animation_state_t startup_animation_state = DISABLED; +static uint16_t rgblight_startup_loop_timer; + +void startup_animation_init(void) { + is_enabled = rgblight_config.enable; + old_hue = rgblight_config.hue; + old_sat = rgblight_config.sat; + old_val = rgblight_config.val; + old_mode = rgblight_config.mode; + old_base_mode = rgblight_status.base_mode; + + if (!is_enabled) + rgblight_enable_noeeprom(); +} +#endif void keyboard_post_init_user_rgb(void) { // Enable the LED layers @@ -99,99 +144,156 @@ void keyboard_post_init_user_rgb(void) { do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT + 1, LAYER_BASE_REGULAR); do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END); - // Startup animation - { - bool is_enabled = rgblight_config.enable; - uint8_t old_hue = rgblight_config.hue; - uint8_t old_sat = rgblight_config.sat; - uint8_t old_val = rgblight_config.val; - uint8_t old_mode = rgblight_config.mode; +#if defined(RGBLIGHT_STARTUP_ANIMATION) + startup_animation_init(); + startup_animation_state = WAITING; +#endif +} - bool ramp_down = +void matrix_scan_user_rgb(void) { +#if defined(RGBLIGHT_STARTUP_ANIMATION) + if (startup_animation_state != DONE && is_keyboard_master()) { + if (startup_animation_state == START || timer_elapsed(rgblight_startup_loop_timer) > STARTUP_ANIMATION_STEP_TIME) { + static uint8_t counter; + rgblight_startup_loop_timer = timer_read(); + + switch (startup_animation_state) { + case WAITING: + dprintf("WAITING counter=%u\n", counter); + if (counter < STARTUP_ANIMATION_INITIAL_DELAY / STARTUP_ANIMATION_STEP_TIME) { + counter++; + } else { + startup_animation_state = START; + } + break; + + case RESTART: + dprintln("RESTART"); + startup_animation_init(); + case START: + dprintln("START"); + startup_animation_state = FADE_OLD; + counter = old_val; + // No break! Just roll into FADE_OLD in the same iteration... + + case FADE_OLD: + dprintf("FADE_OLD counter=%u\n", counter); + if (counter >= STARTUP_ANIMATION_FADE_STEP) { + rgblight_sethsv_noeeprom(old_hue, old_sat, counter); + counter -= STARTUP_ANIMATION_FADE_STEP; + } else { + counter = 0; + startup_animation_state = FADE_IN; + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); + } + break; + + case FADE_IN: + dprintf("FADE_IN counter=%u\n", counter); + if (counter < STARTUP_ANIMATION_VALUE) { + rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, counter); + counter += STARTUP_ANIMATION_FADE_STEP; + } else { + counter = 255; + startup_animation_state = CYCLE; + } + break; + + case CYCLE: + dprintf("CYCLE counter=%u\n", counter); + if (counter >= STARTUP_ANIMATION_CYCLE_STEP) { + rgblight_sethsv_noeeprom((counter + old_hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); + counter -= STARTUP_ANIMATION_CYCLE_STEP; + } else { + if ( #ifdef RGBLIGHT_EFFECT_BREATHING - (rgblight_status.base_mode == RGBLIGHT_MODE_BREATHING) || + (old_base_mode == RGBLIGHT_MODE_BREATHING) || #endif #ifdef RGBLIGHT_EFFECT_SNAKE - (rgblight_status.base_mode == RGBLIGHT_MODE_SNAKE) || + (old_base_mode == RGBLIGHT_MODE_SNAKE) || #endif #ifdef RGBLIGHT_EFFECT_KNIGHT - (rgblight_status.base_mode == RGBLIGHT_MODE_KNIGHT) || + (old_base_mode == RGBLIGHT_MODE_KNIGHT) || #endif #ifdef RGBLIGHT_EFFECT_TWINKLE - (rgblight_status.base_mode == RGBLIGHT_MODE_TWINKLE) || + (old_base_mode == RGBLIGHT_MODE_TWINKLE) || #endif - !is_enabled; - - bool ramp_to = + !is_enabled) { + counter = STARTUP_ANIMATION_VALUE; + startup_animation_state = RAMP_DOWN; + } else if ( #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT - (rgblight_status.base_mode == RGBLIGHT_MODE_STATIC_GRADIENT) || + (old_base_mode == RGBLIGHT_MODE_STATIC_GRADIENT) || #endif #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD - (rgblight_status.base_mode == RGBLIGHT_MODE_RAINBOW_MOOD) || + (old_base_mode == RGBLIGHT_MODE_RAINBOW_MOOD) || #endif #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - (rgblight_status.base_mode == RGBLIGHT_MODE_RAINBOW_SWIRL) || + (old_base_mode == RGBLIGHT_MODE_RAINBOW_SWIRL) || #endif #ifdef RGBLIGHT_EFFECT_RAINBOW_CHRISTMAS - (rgblight_status.base_mode == RGBLIGHT_MODE_CHRISTMAS) || + (old_base_mode == RGBLIGHT_MODE_CHRISTMAS) || #endif #ifdef RGBLIGHT_EFFECT_RAINBOW_RGB_TEST_ - (rgblight_status.base_mode == RGBLIGHT_MODE_RGB_TEST) || + (old_base_mode == RGBLIGHT_MODE_RGB_TEST) || #endif - (rgblight_status.base_mode == RGBLIGHT_MODE_STATIC_LIGHT); - -#define STARTUP_ANIMATION_SATURATION 200 -#define STARTUP_ANIMATION_VALUE 255 -#define STARTUP_ANIMATION_STEP 5 - - rgblight_enable_noeeprom(); - if (rgblight_config.enable) { - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - for (uint8_t i = 0; i < STARTUP_ANIMATION_VALUE; i += STARTUP_ANIMATION_STEP) { - rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, i); - matrix_scan(); - wait_ms(10); + (old_base_mode == RGBLIGHT_MODE_STATIC_LIGHT)) { + counter = 0; + startup_animation_state = RAMP_TO; + } else { + startup_animation_state = CLEAN_UP; + } + } + break; + + case RAMP_DOWN: + dprintf("RAMP_DOWN counter=%u\n", counter); + if (counter >= STARTUP_ANIMATION_FADE_STEP) { + rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, counter); + counter -= STARTUP_ANIMATION_FADE_STEP; + } else { + startup_animation_state = CLEAN_UP; + } + break; + + case RAMP_TO: + dprintf("RAMP_TO s=%u, v=%u, counter=%u\n", old_sat, old_val, counter); + uint8_t steps = STARTUP_ANIMATION_RAMP_TO_STEPS; + if (counter < steps) { + uint8_t s = STARTUP_ANIMATION_SATURATION + counter * (((float)old_sat - STARTUP_ANIMATION_SATURATION) / (float)steps); + uint8_t v = STARTUP_ANIMATION_VALUE + counter * (((float)old_val - STARTUP_ANIMATION_VALUE) / (float)steps); + rgblight_sethsv_noeeprom(old_hue, s, v); + counter++; + } else { + startup_animation_state = CLEAN_UP; + } + break; + + case CLEAN_UP: + dprintln("CLEAN_UP"); + rgblight_mode_noeeprom(old_mode); + if (is_enabled) { + rgblight_sethsv_noeeprom(old_hue, old_sat, old_val); + } else { + rgblight_disable_noeeprom(); + // Hack! + // rgblight_sethsv_noeeprom() doesn't update these if rgblight is disabled, + // but if we do it before disabling we get an ugly flash. + // Note this is probably broken on splits. + rgblight_config.hue = old_hue; + rgblight_config.sat = old_sat; + rgblight_config.val = old_val; + } + startup_animation_state = DONE; + dprintln("DONE"); + break; + + default: + break; } - for (uint8_t i = 255; i > 0; i -= STARTUP_ANIMATION_STEP) { - rgblight_sethsv_noeeprom((i + old_hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); - matrix_scan(); - wait_ms(10); - } - - if (ramp_down) { - dprintln("ramp_down"); - for (uint8_t i = STARTUP_ANIMATION_VALUE; i > 0; i -= STARTUP_ANIMATION_STEP) { - rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, i); - matrix_scan(); - wait_ms(10); - } - } else if (ramp_to) { - dprintf("ramp_to s=%u, v=%u\n", old_sat, old_val); - uint8_t steps = 50; - for (uint8_t i = 0; i < steps; i++) { - uint8_t s = STARTUP_ANIMATION_SATURATION + i * (((float)old_sat - STARTUP_ANIMATION_SATURATION) / (float)steps); - uint8_t v = STARTUP_ANIMATION_VALUE + i * (((float)old_val - STARTUP_ANIMATION_VALUE) / (float)steps); - rgblight_sethsv_noeeprom(old_hue, s, v); - matrix_scan(); - wait_ms(10); - } - } - rgblight_mode_noeeprom(old_mode); } - if (is_enabled) { - rgblight_sethsv_noeeprom(old_hue, old_sat, old_val); - } else { - rgblight_disable_noeeprom(); - // Hack! - // rgblight_sethsv_noeeprom() doesn't update these if rgblight is disabled, - // but if do it before disabling we get an ugly flash. - rgblight_config.hue = old_hue; - rgblight_config.sat = old_sat; - rgblight_config.val = old_val; - } - dprint("done\n"); - startup_animation_done = true; } +#endif } layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index a8dafcb7b541..4df6ac4cc493 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -17,8 +17,10 @@ static bool reported_version = false; static uint32_t matrix_timer = 0; static uint32_t last_matrix_scan_count = 0; # endif +#endif void matrix_scan_user(void) { +#if defined(CONSOLE_ENABLE) && !defined(NO_DEBUG) # if defined(SPI_DEBUG_SCAN_RATE) matrix_scan_count++; if (debug_enable) { @@ -47,8 +49,11 @@ void matrix_scan_user(void) { } } # endif -} #endif +#ifdef RGBLIGHT_ENABLE + matrix_scan_user_rgb(); +#endif +} bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uint32_t baseAlphaLower, uint32_t baseAlphaUpper, uint32_t zeroGlyph, uint32_t baseNumberOne, uint32_t spaceGlyph) { uint8_t temp_mod = get_mods(); diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h index 5bfba4e59285..35273c1af220 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h @@ -51,6 +51,7 @@ typedef enum layer_ack { void eeconfig_init_user_rgb(void); void matrix_init_user_rgb(void); +void matrix_scan_user_rgb(void); void keyboard_post_init_user_rgb(void); bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record); void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record); From 533f60195e97fcf1d3620099a49ea4695a79c82f Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Mon, 28 Dec 2020 11:28:50 -0500 Subject: [PATCH 02/22] More refinements related to startup and debug state --- users/spidey3/layer_rgb.c | 11 +++++++++-- users/spidey3/spidey3.c | 6 +++++- users/spidey3/spidey3.h | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index bc730c1bcaad..0d795c0197aa 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -49,6 +49,7 @@ const rgblight_segment_t PROGMEM _glyphreplace_layer[] = RGBLIGHT_LAYER_SEGMENTS const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_RED)); const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_GREEN)); const rgblight_segment_t PROGMEM _meh_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_YELLOW)); +const rgblight_segment_t PROGMEM _huh_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_YELLOW), FRONT(1, HSV_BLUE), BACK(1, HSV_BLUE)); // Now define the array of layers. Higher numbered layers take precedence. const rgblight_segment_t *const PROGMEM _rgb_layers[] = { @@ -66,8 +67,9 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = { [ACK_OFFSET + ACK_NO] = _no_layer, [ACK_OFFSET + ACK_YES] = _yes_layer, [ACK_OFFSET + ACK_MEH] = _meh_layer, + [ACK_OFFSET + ACK_HUH] = _huh_layer, - [ACK_OFFSET + ACK_MEH + 1] = NULL + [ACK_OFFSET + ACK_HUH + 1] = NULL }; // clang-format on @@ -346,7 +348,12 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { switch (keycode) { // Acks follow... case DEBUG: - rgb_layer_ack_yn(debug_enable); + if (debug_matrix || debug_keyboard) + rgb_layer_ack(ACK_HUH); + else if (debug_enable) + rgb_layer_ack(ACK_YES); + else + rgb_layer_ack(ACK_NO); break; case SPI_LNX: diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 4df6ac4cc493..b166582f1f2c 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -136,7 +136,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifndef NO_DEBUG // Re-implement this here, but fix the persistence! case DEBUG: - if (!debug_enable) { + if (get_mods() & MOD_MASK_SHIFT) { + debug_enable = 0; + debug_keyboard = 0; + debug_matrix = 0; + } else if (!debug_enable) { debug_enable = 1; # if defined(SPI_DEBUG_SCAN_RATE) matrix_timer = 0; diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h index 35273c1af220..561bfbf1fa82 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h @@ -45,6 +45,7 @@ typedef enum layer_ack { ACK_NO = 0, ACK_YES, ACK_MEH, + ACK_HUH, } layer_ack_t; # define RGB_LAYER_ACK_DURATION 500 From d8cda43c53529ae6decbfc06603b5e4c067471b1 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Mon, 28 Dec 2020 16:31:13 -0500 Subject: [PATCH 03/22] restore key logging --- users/spidey3/spidey3.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index b166582f1f2c..ea4b59986f94 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -126,6 +126,26 @@ bool process_gflock(uint16_t keycode, keyrecord_t *record) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + dprintf("key event:\n" + "kc: %02X, col: %u, row: %u, pressed: %u\n" + "mods: %08b " +#if !defined(NO_ACTION_ONESHOT) + "os: %08b " +#endif + "weak: %08b\n" + " CSAGCSAG " +#if !defined(NO_ACTION_ONESHOT) + " CSAGCSAG " +#endif + " CSAGCSAG\n", + keycode, record->event.key.col, record->event.key.row, record->event.pressed, + bitrev(get_mods()), +#if !defined(NO_ACTION_ONESHOT) + bitrev(get_oneshot_mods()), +#endif + bitrev(get_weak_mods())); + if (!rand_seeded) { srand(record->event.time % keycode); rand_seeded = true; From 5fdb6e0f00fe12306cfcab76aef01b5e58c584d6 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Wed, 30 Dec 2020 12:50:27 -0500 Subject: [PATCH 04/22] some cleanup on scan rate reporting --- users/spidey3/spidey3.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index ea4b59986f94..5fb83f1abee3 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -14,11 +14,15 @@ static uint32_t matrix_scan_count = 0; static bool reported_version = false; # if defined(SPI_DEBUG_SCAN_RATE) -static uint32_t matrix_timer = 0; -static uint32_t last_matrix_scan_count = 0; +static uint32_t matrix_timer = 0; # endif #endif +void report_version(void) { + uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE); + reported_version = true; +} + void matrix_scan_user(void) { #if defined(CONSOLE_ENABLE) && !defined(NO_DEBUG) # if defined(SPI_DEBUG_SCAN_RATE) @@ -26,27 +30,19 @@ void matrix_scan_user(void) { if (debug_enable) { uint32_t timer_now = timer_read32(); if (matrix_timer == 0) { - matrix_timer = timer_now; - last_matrix_scan_count = matrix_scan_count; - matrix_scan_count = 0; + matrix_timer = timer_now; + matrix_scan_count = 0; } else if (TIMER_DIFF_32(timer_now, matrix_timer) > SPI_SCAN_RATE_INTERVAL * 1000) { - matrix_timer = timer_now; - last_matrix_scan_count = matrix_scan_count; - matrix_scan_count = 0; - if (!reported_version) { - uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE); - reported_version = true; - } - uprintf("scan rate: %lu/s\n", last_matrix_scan_count / SPI_SCAN_RATE_INTERVAL); + matrix_timer = timer_now; + uprintf("scan rate: %lu/s\n", matrix_scan_count / SPI_SCAN_RATE_INTERVAL); + matrix_scan_count = 0; + if (!reported_version) report_version(); } } # else if (!reported_version) { matrix_scan_count++; - if (matrix_scan_count > 300) { - uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE); - reported_version = true; - } + if (matrix_scan_count > 300) report_version(); } # endif #endif @@ -126,7 +122,6 @@ bool process_gflock(uint16_t keycode, keyrecord_t *record) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - dprintf("key event:\n" "kc: %02X, col: %u, row: %u, pressed: %u\n" "mods: %08b " @@ -139,8 +134,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { " CSAGCSAG " #endif " CSAGCSAG\n", - keycode, record->event.key.col, record->event.key.row, record->event.pressed, - bitrev(get_mods()), + keycode, record->event.key.col, record->event.key.row, record->event.pressed, bitrev(get_mods()), #if !defined(NO_ACTION_ONESHOT) bitrev(get_oneshot_mods()), #endif From 873636ca13dab679437d3585ff1d2ebab1fa540d Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Wed, 30 Dec 2020 15:00:28 -0500 Subject: [PATCH 05/22] trim some fat --- users/spidey3/spidey3.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 5fb83f1abee3..3be93264c4c3 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -122,18 +122,11 @@ bool process_gflock(uint16_t keycode, keyrecord_t *record) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - dprintf("key event:\n" - "kc: %02X, col: %u, row: %u, pressed: %u\n" - "mods: %08b " + dprintf("key event: kc: %02X, col: %02u, row: %02u, pressed: %u mods: %08b " #if !defined(NO_ACTION_ONESHOT) "os: %08b " #endif - "weak: %08b\n" - " CSAGCSAG " -#if !defined(NO_ACTION_ONESHOT) - " CSAGCSAG " -#endif - " CSAGCSAG\n", + "weak: %08b\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, bitrev(get_mods()), #if !defined(NO_ACTION_ONESHOT) bitrev(get_oneshot_mods()), From 554c4a409ed9d4c70b6dd2e07a04fe3148653f40 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Thu, 31 Dec 2020 13:47:48 -0500 Subject: [PATCH 06/22] better lighting to indicate jumped to bootloader --- users/spidey3/init.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/users/spidey3/init.c b/users/spidey3/init.c index 273c2b28992f..442361515931 100644 --- a/users/spidey3/init.c +++ b/users/spidey3/init.c @@ -21,8 +21,9 @@ void eeconfig_init_user(void) { void shutdown_user() { #ifdef RGBLIGHT_ENABLE clear_rgb_layers(); - rgblight_enable(); + rgblight_enable_noeeprom(); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - rgblight_sethsv_noeeprom(HSV_RED); + for (int i=0; i Date: Sat, 2 Jan 2021 20:18:21 -0500 Subject: [PATCH 07/22] use eeprom for state restoration --- users/spidey3/layer_rgb.c | 96 ++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 0d795c0197aa..5d04fafba2e4 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -102,7 +102,7 @@ extern rgblight_status_t rgblight_status; #define STARTUP_ANIMATION_CYCLE_STEP 2 #define STARTUP_ANIMATION_RAMP_TO_STEPS 70 #define STARTUP_ANIMATION_STEP_TIME 10 -#define STARTUP_ANIMATION_INITIAL_DELAY 500 +#define STARTUP_ANIMATION_INITIAL_DELAY 0 // milliseconds, must be < 255 * STEP_TIME typedef enum { DISABLED, @@ -118,24 +118,16 @@ typedef enum { DONE } startup_animation_state_t; -static bool is_enabled; -static uint8_t old_hue; -static uint8_t old_sat; -static uint8_t old_val; -static uint8_t old_mode; +static rgblight_config_t old_config; static uint8_t old_base_mode; static startup_animation_state_t startup_animation_state = DISABLED; static uint16_t rgblight_startup_loop_timer; void startup_animation_init(void) { - is_enabled = rgblight_config.enable; - old_hue = rgblight_config.hue; - old_sat = rgblight_config.sat; - old_val = rgblight_config.val; - old_mode = rgblight_config.mode; - old_base_mode = rgblight_status.base_mode; + old_config.raw = rgblight_config.raw; + old_base_mode = rgblight_status.base_mode; - if (!is_enabled) + if (!old_config.enable) rgblight_enable_noeeprom(); } #endif @@ -148,7 +140,7 @@ void keyboard_post_init_user_rgb(void) { #if defined(RGBLIGHT_STARTUP_ANIMATION) startup_animation_init(); - startup_animation_state = WAITING; + startup_animation_state = STARTUP_ANIMATION_INITIAL_DELAY ? WAITING : START; #endif } @@ -161,7 +153,9 @@ void matrix_scan_user_rgb(void) { switch (startup_animation_state) { case WAITING: - dprintf("WAITING counter=%u\n", counter); +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua WAITING counter=%u\n", counter); +#endif if (counter < STARTUP_ANIMATION_INITIAL_DELAY / STARTUP_ANIMATION_STEP_TIME) { counter++; } else { @@ -170,18 +164,20 @@ void matrix_scan_user_rgb(void) { break; case RESTART: - dprintln("RESTART"); + dprintln("sua RESTART"); startup_animation_init(); case START: - dprintln("START"); + dprintln("sua START"); startup_animation_state = FADE_OLD; - counter = old_val; + counter = old_config.val; // No break! Just roll into FADE_OLD in the same iteration... case FADE_OLD: - dprintf("FADE_OLD counter=%u\n", counter); +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua FADE_OLD counter=%u\n", counter); +#endif if (counter >= STARTUP_ANIMATION_FADE_STEP) { - rgblight_sethsv_noeeprom(old_hue, old_sat, counter); + rgblight_sethsv_noeeprom(old_config.hue, old_config.sat, counter); counter -= STARTUP_ANIMATION_FADE_STEP; } else { counter = 0; @@ -191,9 +187,11 @@ void matrix_scan_user_rgb(void) { break; case FADE_IN: - dprintf("FADE_IN counter=%u\n", counter); +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua FADE_IN counter=%u\n", counter); +#endif if (counter < STARTUP_ANIMATION_VALUE) { - rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, counter); + rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter); counter += STARTUP_ANIMATION_FADE_STEP; } else { counter = 255; @@ -202,9 +200,11 @@ void matrix_scan_user_rgb(void) { break; case CYCLE: - dprintf("CYCLE counter=%u\n", counter); +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua CYCLE counter=%u\n", counter); +#endif if (counter >= STARTUP_ANIMATION_CYCLE_STEP) { - rgblight_sethsv_noeeprom((counter + old_hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); + rgblight_sethsv_noeeprom((counter + old_config.hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); counter -= STARTUP_ANIMATION_CYCLE_STEP; } else { if ( @@ -220,7 +220,7 @@ void matrix_scan_user_rgb(void) { #ifdef RGBLIGHT_EFFECT_TWINKLE (old_base_mode == RGBLIGHT_MODE_TWINKLE) || #endif - !is_enabled) { + !old_config.enable) { counter = STARTUP_ANIMATION_VALUE; startup_animation_state = RAMP_DOWN; } else if ( @@ -249,9 +249,11 @@ void matrix_scan_user_rgb(void) { break; case RAMP_DOWN: - dprintf("RAMP_DOWN counter=%u\n", counter); +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua RAMP_DOWN counter=%u\n", counter); +#endif if (counter >= STARTUP_ANIMATION_FADE_STEP) { - rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, counter); + rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter); counter -= STARTUP_ANIMATION_FADE_STEP; } else { startup_animation_state = CLEAN_UP; @@ -259,35 +261,27 @@ void matrix_scan_user_rgb(void) { break; case RAMP_TO: - dprintf("RAMP_TO s=%u, v=%u, counter=%u\n", old_sat, old_val, counter); - uint8_t steps = STARTUP_ANIMATION_RAMP_TO_STEPS; - if (counter < steps) { - uint8_t s = STARTUP_ANIMATION_SATURATION + counter * (((float)old_sat - STARTUP_ANIMATION_SATURATION) / (float)steps); - uint8_t v = STARTUP_ANIMATION_VALUE + counter * (((float)old_val - STARTUP_ANIMATION_VALUE) / (float)steps); - rgblight_sethsv_noeeprom(old_hue, s, v); - counter++; - } else { - startup_animation_state = CLEAN_UP; + { +#ifdef STARTUP_ANIMATION_DEBUG + dprintf("sua RAMP_TO s=%u, v=%u, counter=%u\n", old_config.sat, old_config.val, counter); +#endif + uint8_t steps = STARTUP_ANIMATION_RAMP_TO_STEPS; + if (counter < steps) { + uint8_t s = STARTUP_ANIMATION_SATURATION + counter * (((float)old_config.sat - STARTUP_ANIMATION_SATURATION) / (float)steps); + uint8_t v = STARTUP_ANIMATION_VALUE + counter * (((float)old_config.val - STARTUP_ANIMATION_VALUE) / (float)steps); + rgblight_sethsv_noeeprom(old_config.hue, s, v); + counter++; + } else { + startup_animation_state = CLEAN_UP; + } } break; case CLEAN_UP: - dprintln("CLEAN_UP"); - rgblight_mode_noeeprom(old_mode); - if (is_enabled) { - rgblight_sethsv_noeeprom(old_hue, old_sat, old_val); - } else { - rgblight_disable_noeeprom(); - // Hack! - // rgblight_sethsv_noeeprom() doesn't update these if rgblight is disabled, - // but if we do it before disabling we get an ugly flash. - // Note this is probably broken on splits. - rgblight_config.hue = old_hue; - rgblight_config.sat = old_sat; - rgblight_config.val = old_val; - } + dprintln("sua CLEAN_UP"); + rgblight_reload_from_eeprom(); startup_animation_state = DONE; - dprintln("DONE"); + dprintln("sua DONE"); break; default: From 2f2029969dbd039fbebe68fb72e07a7fc12c822b Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 3 Jan 2021 14:08:11 -0500 Subject: [PATCH 08/22] a little reorganization --- users/spidey3/init.c | 8 +------- users/spidey3/layer_rgb.c | 9 +++++++++ users/spidey3/spidey3.h | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/users/spidey3/init.c b/users/spidey3/init.c index 442361515931..8db41a5f4c7a 100644 --- a/users/spidey3/init.c +++ b/users/spidey3/init.c @@ -18,12 +18,6 @@ void eeconfig_init_user(void) { #endif } -void shutdown_user() { #ifdef RGBLIGHT_ENABLE - clear_rgb_layers(); - rgblight_enable_noeeprom(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - for (int i=0; i Date: Sun, 3 Jan 2021 14:27:51 -0500 Subject: [PATCH 09/22] report version immediately when turn on debug --- users/spidey3/spidey3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 3be93264c4c3..7a9b40c69331 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -151,7 +151,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { debug_enable = 1; # if defined(SPI_DEBUG_SCAN_RATE) matrix_timer = 0; - reported_version = false; + report_version(); # endif } else if (!debug_keyboard) { debug_keyboard = 1; From 44f7fa08a025810407eb5aa62246f521392637b6 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 3 Jan 2021 22:54:36 -0500 Subject: [PATCH 10/22] hold-to-adjust for hue, sat, val --- users/spidey3/layer_rgb.c | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index b6bde76432e7..527c0c3eb832 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -2,6 +2,7 @@ #include "spidey3.h" #include "velocikey.h" +#include uint32_t rgb_mode; uint16_t rgb_hue; @@ -91,6 +92,15 @@ void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { } } +// flags. 0 = no change, 1 = increment, -1 = decrement. +int8_t change_hue = 0; +int8_t change_sat = 0; +int8_t change_val = 0; + +// timer to control color change speed +uint16_t change_timer = 0; +const uint16_t change_tick = 15; + extern rgblight_config_t rgblight_config; extern rgblight_status_t rgblight_status; @@ -290,6 +300,17 @@ void matrix_scan_user_rgb(void) { } } #endif + + if (change_hue != 0 || change_val != 0 || change_sat != 0) { + if (timer_elapsed(change_timer) > change_tick) { + HSV hsv = rgblight_get_hsv(); + hsv.h += change_hue; + hsv.s = change_sat > 0 ? qadd8(hsv.s, (uint8_t) change_sat) : qsub8(hsv.s, (uint8_t) -change_sat); + hsv.v = change_val > 0 ? qadd8(hsv.v, (uint8_t) change_val) : qsub8(hsv.v, (uint8_t) -change_val); + rgblight_sethsv_noeeprom(hsv.h, hsv.s, hsv.v); + change_timer = timer_read(); + } + } } void shutdown_user_rgb(void) { @@ -341,6 +362,39 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { case SPI_GLO: spidey_glow(); return false; + + // clang-format off + case RGB_HUI: change_timer = timer_read(); change_hue = 1; return false; + case RGB_HUD: change_timer = timer_read(); change_hue = -1; return false; + case RGB_SAI: change_timer = timer_read(); change_sat = 1; return false; + case RGB_SAD: change_timer = timer_read(); change_sat = -1; return false; + case RGB_VAI: change_timer = timer_read(); change_val = 1; return false; + case RGB_VAD: change_timer = timer_read(); change_val = -1; return false; + // clang-format on + } + } else { + bool rgb_done = false; + switch (keycode) { + case RGB_HUI: + case RGB_HUD: + change_hue = 0; + rgb_done = true; + break; + case RGB_SAI: + case RGB_SAD: + change_sat = 0; + rgb_done = true; + break; + case RGB_VAI: + case RGB_VAD: + change_val = 0; + rgb_done = true; + break; + } + + if (rgb_done) { + HSV final = rgblight_get_hsv(); + rgblight_sethsv(final.h, final.s, final.v); } } From 16549533d7469997f32cdbd24d012147e4d640ed Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Mon, 4 Jan 2021 12:07:16 -0500 Subject: [PATCH 11/22] cformat --- users/spidey3/layer_rgb.c | 6 +++--- users/spidey3/spidey3.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 527c0c3eb832..ec731fa089dd 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -73,7 +73,7 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = { [ACK_OFFSET + ACK_HUH + 1] = NULL }; -// clang-format on +// clang-format on const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1; @@ -136,7 +136,7 @@ static uint16_t rgblight_startup_loop_timer; void startup_animation_init(void) { old_config.raw = rgblight_config.raw; old_base_mode = rgblight_status.base_mode; - + if (!old_config.enable) rgblight_enable_noeeprom(); } @@ -217,7 +217,7 @@ void matrix_scan_user_rgb(void) { rgblight_sethsv_noeeprom((counter + old_config.hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); counter -= STARTUP_ANIMATION_CYCLE_STEP; } else { - if ( + if ( #ifdef RGBLIGHT_EFFECT_BREATHING (old_base_mode == RGBLIGHT_MODE_BREATHING) || #endif diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 7a9b40c69331..a825f5cc4c11 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -150,7 +150,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else if (!debug_enable) { debug_enable = 1; # if defined(SPI_DEBUG_SCAN_RATE) - matrix_timer = 0; + matrix_timer = 0; report_version(); # endif } else if (!debug_keyboard) { From 1cecbec7321237f8c6c0135c22e5ec759b926532 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Wed, 6 Jan 2021 11:24:32 -0500 Subject: [PATCH 12/22] reorg rules.mk settings, fix compile with CONSOLE_ENABLE=no --- layouts/community/75_ansi/spidey3/rules.mk | 2 -- users/spidey3/rules.mk | 2 ++ users/spidey3/spidey3.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/layouts/community/75_ansi/spidey3/rules.mk b/layouts/community/75_ansi/spidey3/rules.mk index 7d5c56841e0b..10201a5850bb 100644 --- a/layouts/community/75_ansi/spidey3/rules.mk +++ b/layouts/community/75_ansi/spidey3/rules.mk @@ -2,8 +2,6 @@ # comment out to disable the options. # MOUSEKEY_ENABLE = no # Mouse keys -CONSOLE_ENABLE = yes # Console for debug -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality UNICODEMAP_ENABLE = yes VELOCIKEY_ENABLE = yes GRAVE_ESC_ENABLE = no diff --git a/users/spidey3/rules.mk b/users/spidey3/rules.mk index 2d4da22946cf..bd378f545e86 100644 --- a/users/spidey3/rules.mk +++ b/users/spidey3/rules.mk @@ -1,4 +1,6 @@ BOOTMAGIC_ENABLE = lite +CONSOLE_ENABLE = yes # Console for debug +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality LTO_ENABLE = yes SRC += init.c diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index a825f5cc4c11..475ca9dc0fef 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -16,12 +16,12 @@ static bool reported_version = false; # if defined(SPI_DEBUG_SCAN_RATE) static uint32_t matrix_timer = 0; # endif -#endif void report_version(void) { uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE); reported_version = true; } +#endif void matrix_scan_user(void) { #if defined(CONSOLE_ENABLE) && !defined(NO_DEBUG) From 4f0df83c1f07ebc7091c3148fb5fc8dd57e0d4e7 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Fri, 1 Jan 2021 18:57:03 -0500 Subject: [PATCH 13/22] simplify spidey3 userspace --- layouts/community/75_ansi/spidey3/keymap.c | 13 +--- users/spidey3/config.h | 2 + users/spidey3/layer_rgb.c | 73 ++++++++++++++++------ users/spidey3/spidey3.c | 32 +++------- users/spidey3/spidey3.h | 1 - 5 files changed, 66 insertions(+), 55 deletions(-) diff --git a/layouts/community/75_ansi/spidey3/keymap.c b/layouts/community/75_ansi/spidey3/keymap.c index d3c4a64ea812..20259d7c3b2b 100644 --- a/layouts/community/75_ansi/spidey3/keymap.c +++ b/layouts/community/75_ansi/spidey3/keymap.c @@ -3,7 +3,7 @@ #define FN_MENU LT(_FN,KC_APP) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // Linux / Win layout + // Base [_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, 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, @@ -12,15 +12,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, FN_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), - // OSX layout - [_OSX] = LAYOUT_75_ansi( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, 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, _______, _______, _______, @@ -36,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { EEP_RST, X(SAD), X(MEH), X(HAPPY), X(ANGRY), X(THUMBDN), X(THUMBUP), X(SPIDER), X_BUL, X(LOL), X(SURPRISE),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, CH_SUSP, SPI_WIN, _______, NK_TOGG, TG(_NUMPAD),SPI_OSX, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE, + _______, SPI_GLO, CH_SUSP, SPI_WIN, UC_MOD, NK_TOGG, TG(_NUMPAD),SPI_OSX, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE, _______, _______, _______, KC_MPLY, CH_ASST, _______, CH_CPNL, KC_MPRV, KC_VOLD, KC_MNXT ) }; diff --git a/users/spidey3/config.h b/users/spidey3/config.h index 053240718e67..754a1581b5b1 100644 --- a/users/spidey3/config.h +++ b/users/spidey3/config.h @@ -17,6 +17,8 @@ #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE +#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC + #define SPI_DEBUG_SCAN_RATE #undef MANUFACTURER diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 160cc43174d8..abe74746b2e7 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -9,6 +9,9 @@ uint8_t rgb_sat; uint8_t rgb_val; bool rgb_saved = 0; +extern bool spi_gflock; +extern uint16_t spi_replace_mode; + void spidey_glow(void) { rgblight_enable(); rgblight_mode(RGBLIGHT_MODE_TWINKLE + 4); @@ -23,6 +26,7 @@ void eeconfig_init_user_rgb(void) { spidey_glow(); } // clang-format off // Convenience macros +#define NONE { RGBLIGHT_END_SEGMENTS } #define CORNER_BL(color) { 0, 1, color } #define CORNER_BR(color) { RGBLED_NUM / 2 - 1, 1, color } #define CORNER_FR(color) { RGBLED_NUM / 2, 1, color } @@ -32,9 +36,9 @@ void eeconfig_init_user_rgb(void) { spidey_glow(); } #define BACK(inset, color) { inset, RGBLED_NUM / 2 - 2 * inset, color } #define LAYER_OFFSET 0 -const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_PURPLE)); -const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_MAGENTA)); -const rgblight_segment_t PROGMEM _layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_GREEN)); +const rgblight_segment_t PROGMEM _layer0_layer[] = NONE; // _BASE +const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_MAGENTA)); // _NUMPAD +const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_GREEN)); // _FN #define LOCK_OFFSET 3 const rgblight_segment_t PROGMEM _numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(3, HSV_YELLOW)); @@ -50,11 +54,18 @@ const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_GREEN)); const rgblight_segment_t PROGMEM _meh_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_YELLOW)); +#define UNICODE_OFFSET 11 +const rgblight_segment_t PROGMEM _uc_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_PURPLE)); +const rgblight_segment_t PROGMEM _uc_lnx_layer[] = NONE; +// UC_WIN disabled in config.h +// UC_BSD not implemented +const rgblight_segment_t PROGMEM _uc_winc_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_CYAN)); + // Now define the array of layers. Higher numbered layers take precedence. const rgblight_segment_t *const PROGMEM _rgb_layers[] = { - [LAYER_OFFSET + 0] = _layer1_layer, - [LAYER_OFFSET + 1] = _layer2_layer, - [LAYER_OFFSET + 2] = _layer3_layer, + [LAYER_OFFSET + _BASE] = _layer0_layer, + [LAYER_OFFSET + _NUMPAD] = _layer1_layer, + [LAYER_OFFSET + _FN] = _layer2_layer, [LOCK_OFFSET + USB_LED_NUM_LOCK] = _numlock_layer, [LOCK_OFFSET + USB_LED_CAPS_LOCK] = _capslock_layer, @@ -63,6 +74,12 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = { [MISC_OFFSET + 0] = _gflock_layer, [MISC_OFFSET + 1] = _glyphreplace_layer, + [UNICODE_OFFSET + UC_MAC] = _uc_mac_layer, + [UNICODE_OFFSET + UC_LNX] = _uc_lnx_layer, + [UNICODE_OFFSET + UC_WIN] = NULL, // disabled in config.h + [UNICODE_OFFSET + UC_BSD] = NULL, // not implemented + [UNICODE_OFFSET + UC_WINC] = _uc_winc_layer, + [ACK_OFFSET + ACK_NO] = _no_layer, [ACK_OFFSET + ACK_YES] = _yes_layer, [ACK_OFFSET + ACK_MEH] = _meh_layer, @@ -85,10 +102,27 @@ void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { for (uint8_t i = start; i < end; i++) { bool is_on = layer_state_cmp(state, i); dprintf("layer[%u]=%u\n", i, is_on); - rgblight_set_layer_state(LAYER_OFFSET + i - 1, is_on); + rgblight_set_layer_state(LAYER_OFFSET + i, is_on); + } +} + +void do_rgb_unicode(void) { + uint8_t uc_mode = get_unicode_input_mode(); + for (uint8_t i = 0; i < UC__COUNT; i++) { + bool is_on = i == uc_mode; + dprintf("unicode[%u]=%u\n", i, is_on); + rgblight_set_layer_state(UNICODE_OFFSET + i, is_on); } } +void do_rgb_all(void) { + do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT, LAYER_BASE_REGULAR); + do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END); + do_rgb_unicode(); + rgblight_set_layer_state(MISC_OFFSET + 0, spi_gflock); + rgblight_set_layer_state(MISC_OFFSET + 1, spi_replace_mode != SPI_NORMAL); +} + extern rgblight_config_t rgblight_config; extern rgblight_status_t rgblight_status; static bool startup_animation_done = false; @@ -96,8 +130,7 @@ static bool startup_animation_done = false; void keyboard_post_init_user_rgb(void) { // Enable the LED layers rgblight_layers = _rgb_layers; - do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT + 1, LAYER_BASE_REGULAR); - do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END); + do_rgb_all(); // Startup animation { @@ -195,7 +228,7 @@ void keyboard_post_init_user_rgb(void) { } layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { - do_rgb_layers(state, 1u, LAYER_BASE_REGULAR); + do_rgb_layers(state, LAYER_BASE_DEFAULT, LAYER_BASE_REGULAR); return state; } @@ -225,9 +258,6 @@ void rgb_layer_ack(layer_ack_t n) { extern keymap_config_t keymap_config; extern rgblight_config_t rgblight_config; -extern bool spi_gflock; -extern uint16_t spi_replace_mode; - bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { switch (keycode) { @@ -247,12 +277,6 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { rgb_layer_ack_yn(debug_enable); break; - case SPI_LNX: - case SPI_OSX: - case SPI_WIN: - rgb_layer_ack(ACK_MEH); - break; - case SPI_GFLOCK: rgb_layer_ack_yn(spi_gflock); rgblight_set_layer_state(MISC_OFFSET + 0, spi_gflock); @@ -280,5 +304,16 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { rgb_layer_ack_yn(keymap_config.nkro); break; #endif + +#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) + case SPI_LNX: + case SPI_OSX: + case SPI_WIN: + case UC_MOD: + case UC_RMOD: + rgb_layer_ack(ACK_MEH); + do_rgb_unicode(); + break; +#endif } } diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index a8dafcb7b541..677cee6a862d 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -157,31 +157,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case CH_ASST: host_consumer_send(AL_ASSISTANT); return false; case CH_SUSP: tap_code16(LGUI(LSFT(KC_L))); return true; - // clang-format on - - case SPI_LNX: - 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 - break; - case SPI_OSX: - dprint("SPI_OSX\n"); - set_single_persistent_default_layer(_OSX); -#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) - set_unicode_input_mode(UC_OSX); +#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) + case SPI_LNX: set_unicode_input_mode(UC_LNX); break; + case SPI_OSX: set_unicode_input_mode(UC_OSX); break; + case SPI_WIN: set_unicode_input_mode(UC_WINC); break; #endif - break; - case SPI_WIN: - 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 - break; + // clang-format on case SPI_NORMAL ... SPI_FRAKTR: spi_replace_mode = (spi_replace_mode == keycode) ? SPI_NORMAL : keycode; @@ -201,6 +182,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint8_t osm = 0; #endif + // It's kind of a hack, but we use unicode input mode + // to determine what Print Screen key should do. The + // idea here is to make it consistent across hosts. switch (get_unicode_input_mode()) { case UC_MAC: if ((mods | osm) & MOD_MASK_ALT) { diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h index 5bfba4e59285..03ed2724f180 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h @@ -8,7 +8,6 @@ enum userspace_layers { _BASE = 0, - _OSX, _NUMPAD, _FN, }; From 0077d3d8d78dbbd5e749216e467567d5e37756a8 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Fri, 1 Jan 2021 20:26:38 -0500 Subject: [PATCH 14/22] NULL in layer list caused buggy behavior --- users/spidey3/layer_rgb.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index abe74746b2e7..4f85efa81f3b 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -35,8 +35,10 @@ void eeconfig_init_user_rgb(void) { spidey_glow(); } #define FRONT(inset, color) { RGBLED_NUM / 2 + inset, RGBLED_NUM / 2 - 2 * inset, color } #define BACK(inset, color) { inset, RGBLED_NUM / 2 - 2 * inset, color } +const rgblight_segment_t PROGMEM _none[] = NONE; + #define LAYER_OFFSET 0 -const rgblight_segment_t PROGMEM _layer0_layer[] = NONE; // _BASE +// No indicator for base layer const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_MAGENTA)); // _NUMPAD const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_GREEN)); // _FN @@ -56,14 +58,14 @@ const rgblight_segment_t PROGMEM _meh_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT #define UNICODE_OFFSET 11 const rgblight_segment_t PROGMEM _uc_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_PURPLE)); -const rgblight_segment_t PROGMEM _uc_lnx_layer[] = NONE; +// No indicator for UC_LNX // UC_WIN disabled in config.h // UC_BSD not implemented const rgblight_segment_t PROGMEM _uc_winc_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_CYAN)); // Now define the array of layers. Higher numbered layers take precedence. const rgblight_segment_t *const PROGMEM _rgb_layers[] = { - [LAYER_OFFSET + _BASE] = _layer0_layer, + [LAYER_OFFSET + _BASE] = _none, [LAYER_OFFSET + _NUMPAD] = _layer1_layer, [LAYER_OFFSET + _FN] = _layer2_layer, @@ -74,17 +76,17 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = { [MISC_OFFSET + 0] = _gflock_layer, [MISC_OFFSET + 1] = _glyphreplace_layer, - [UNICODE_OFFSET + UC_MAC] = _uc_mac_layer, - [UNICODE_OFFSET + UC_LNX] = _uc_lnx_layer, - [UNICODE_OFFSET + UC_WIN] = NULL, // disabled in config.h - [UNICODE_OFFSET + UC_BSD] = NULL, // not implemented - [UNICODE_OFFSET + UC_WINC] = _uc_winc_layer, - [ACK_OFFSET + ACK_NO] = _no_layer, [ACK_OFFSET + ACK_YES] = _yes_layer, [ACK_OFFSET + ACK_MEH] = _meh_layer, - [ACK_OFFSET + ACK_MEH + 1] = NULL + [UNICODE_OFFSET + UC_MAC] = _uc_mac_layer, + [UNICODE_OFFSET + UC_LNX] = _none, + [UNICODE_OFFSET + UC_WIN] = _none, + [UNICODE_OFFSET + UC_BSD] = _none, + [UNICODE_OFFSET + UC_WINC] = _uc_winc_layer, + + [UNICODE_OFFSET + UC__COUNT] = NULL }; // clang-format on From 0fc4f85577597995e59be964fad5214b24c1f278 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Fri, 1 Jan 2021 20:52:14 -0500 Subject: [PATCH 15/22] more bugfix --- users/spidey3/layer_rgb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 4f85efa81f3b..555e09f91d3a 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -103,7 +103,7 @@ void clear_rgb_layers() { void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { for (uint8_t i = start; i < end; i++) { bool is_on = layer_state_cmp(state, i); - dprintf("layer[%u]=%u\n", i, is_on); + dprintf("layer[%u]=rl[%u]=%u\n", i, LAYER_OFFSET + i, is_on); rgblight_set_layer_state(LAYER_OFFSET + i, is_on); } } @@ -112,7 +112,7 @@ void do_rgb_unicode(void) { uint8_t uc_mode = get_unicode_input_mode(); for (uint8_t i = 0; i < UC__COUNT; i++) { bool is_on = i == uc_mode; - dprintf("unicode[%u]=%u\n", i, is_on); + dprintf("unicode[%u]=rl[%u]=%u\n", i, UNICODE_OFFSET + i, is_on); rgblight_set_layer_state(UNICODE_OFFSET + i, is_on); } } From 2bd67f41b6858d9ed11046471a82e82467cfb9b0 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Fri, 22 Jan 2021 20:06:09 -0500 Subject: [PATCH 16/22] update numpad layout to match matt30 MT3 /dev/tty keycaps --- layouts/community/75_ansi/spidey3/keymap.c | 20 ++++++++++---------- users/spidey3/spidey3.c | 12 ++++++++++++ users/spidey3/spidey3.h | 1 + 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/layouts/community/75_ansi/spidey3/keymap.c b/layouts/community/75_ansi/spidey3/keymap.c index 20259d7c3b2b..d7ffd61a499f 100644 --- a/layouts/community/75_ansi/spidey3/keymap.c +++ b/layouts/community/75_ansi/spidey3/keymap.c @@ -14,20 +14,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), // 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, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + XXXXXXX, XXXXXXX, XXXXXXX, KC_NUMLOCK, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, KC_PMNS, KC_PEQL, _______, _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PCMM, _______, _______, _______, _______, + KC_NUMLOCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, KC_PAST, KC_PENT, _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_0, SPI_KP_00, KC_PDOT, KC_PSLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), // FN [_FN] = LAYOUT_75_ansi( - RESET, SPI_NORMAL, SPI_WIDE, SPI_SCRIPT, SPI_BLOCKS, SPI_CIRCLE, SPI_SQUARE, SPI_PARENS, SPI_FRAKTR, _______, _______, _______, SPI_GFLOCK, KC_SLEP, KC_WAKE, KC_PWR, - EEP_RST, X(SAD), X(MEH), X(HAPPY), X(ANGRY), X(THUMBDN), X(THUMBUP), X(SPIDER), X_BUL, X(LOL), X(SURPRISE),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, CH_SUSP, SPI_WIN, UC_MOD, NK_TOGG, TG(_NUMPAD),SPI_OSX, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE, + RESET, SPI_NORMAL, SPI_WIDE, SPI_SCRIPT, SPI_BLOCKS, SPI_CIRCLE, SPI_SQUARE, SPI_PARENS, SPI_FRAKTR, XXXXXXX, XXXXXXX, XXXXXXX, SPI_GFLOCK, KC_SLEP, CH_SUSP, KC_PWR, + EEP_RST, X(SAD), X(MEH), X(HAPPY), X(ANGRY), X(THUMBDN), X(THUMBUP), X(SPIDER), X_BUL, X(LOL), X(SURPRISE),X_DASH, XXXXXXX, KC_PAUS, KC_SLCK, + XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, VLK_TOG, XXXXXXX, XXXXXXX, KC_BRIU, + XXXXXXX, 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, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRID, + _______, SPI_GLO, XXXXXXX, SPI_WIN, UC_MOD, NK_TOGG, TG(_NUMPAD),SPI_OSX, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE, _______, _______, _______, KC_MPLY, CH_ASST, _______, CH_CPNL, KC_MPRV, KC_VOLD, KC_MNXT ) }; diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 677cee6a862d..29cd1494199d 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -174,6 +174,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { dprintf("spi_gflock = %u\n", spi_gflock); break; + case SPI_KP_00: + tap_code(KC_KP_0); +#if TAP_CODE_DELAY > 0 + wait_ms(TAP_CODE_DELAY); +#endif + register_code(KC_KP_0); + return false; + case KC_PSCR: { uint8_t mods = get_mods(); #ifndef NO_ACTION_ONESHOT @@ -249,6 +257,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case CH_ASST: host_consumer_send(0); return false; + + case SPI_KP_00: + unregister_code(KC_KP_0); + return false; } } diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h index 03ed2724f180..e13fff54e5ec 100644 --- a/users/spidey3/spidey3.h +++ b/users/spidey3/spidey3.h @@ -30,6 +30,7 @@ enum custom_keycodes { SPI_PARENS, SPI_FRAKTR, SPI_GFLOCK, + SPI_KP_00, }; #ifdef RGBLIGHT_ENABLE From 6c235215eb1022c80faa176f0526fa856c992cc9 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sat, 23 Jan 2021 09:57:42 -0500 Subject: [PATCH 17/22] swap emdash and endash --- users/spidey3/unicode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/spidey3/unicode.h b/users/spidey3/unicode.h index db7824983b18..6182669fb051 100644 --- a/users/spidey3/unicode.h +++ b/users/spidey3/unicode.h @@ -23,6 +23,6 @@ enum unicode_names { }; # define X_BUL (XP(BUL1, BUL2)) -# define X_DASH (XP(ENDASH, EMDASH)) +# define X_DASH (XP(EMDASH, ENDASH)) #endif From 582e880e2536652e4448f09a75baad76b41ba709 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 24 Jan 2021 12:52:14 -0500 Subject: [PATCH 18/22] map shift+backspace to delete --- users/spidey3/spidey3.c | 66 +++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 29cd1494199d..befee2237979 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -50,13 +50,7 @@ void matrix_scan_user(void) { } #endif -bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uint32_t baseAlphaLower, uint32_t baseAlphaUpper, uint32_t zeroGlyph, uint32_t baseNumberOne, uint32_t spaceGlyph) { - uint8_t temp_mod = get_mods(); -#ifndef NO_ACTION_ONESHOT - uint8_t temp_osm = get_oneshot_mods(); -#else - uint8_t temp_osm = 0; -#endif +bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uint32_t baseAlphaLower, uint32_t baseAlphaUpper, uint32_t zeroGlyph, uint32_t baseNumberOne, uint32_t spaceGlyph, uint8_t temp_mod, uint8_t temp_osm) { if ((((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI))) == 0) { switch (keycode) { case KC_A ... KC_Z: @@ -126,6 +120,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rand_seeded = true; } + uint8_t mods = get_mods(); +#ifndef NO_ACTION_ONESHOT + uint8_t osm = get_oneshot_mods(); +#else + uint8_t osm = 0; +#endif + if (record->event.pressed) { switch (keycode) { #ifndef NO_DEBUG @@ -183,13 +184,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; case KC_PSCR: { - uint8_t mods = get_mods(); -#ifndef NO_ACTION_ONESHOT - uint8_t osm = get_oneshot_mods(); -#else - uint8_t osm = 0; -#endif - // It's kind of a hack, but we use unicode input mode // to determine what Print Screen key should do. The // idea here is to make it consistent across hosts. @@ -269,32 +263,54 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_SPACE: switch (spi_replace_mode) { case SPI_WIDE: - return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003); + return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003, mods, osm); case SPI_SCRIPT: - return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002, mods, osm); case SPI_BLOCKS: - return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002, mods, osm); case SPI_CIRCLE: - return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002, mods, osm); case SPI_SQUARE: - return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002, mods, osm); case SPI_PARENS: - return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002, mods, osm); case SPI_FRAKTR: - return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002); + return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002, mods, osm); } break; case KC_F1 ... KC_F12: return process_gflock(keycode, record); - } -#ifdef RGBLIGHT_ENABLE - bool res = process_record_user_rgb(keycode, record); - if (!res) return false; + case KC_BSPC: { + static bool delkey_registered; + if (record->event.pressed) { + if ((mods | osm) & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); +#ifndef NO_ACTION_ONESHOT + clear_oneshot_mods(); #endif + register_code(KC_DEL); + delkey_registered = true; + set_mods(mods); + return false; + } + } else { // on release of KC_BSPC + // In case KC_DEL is still being sent even after the release of KC_BSPC + if (delkey_registered) { + unregister_code(KC_DEL); + delkey_registered = false; + return false; + } + } + } + } +#ifdef RGBLIGHT_ENABLE + return process_record_user_rgb(keycode, record); +#else return true; +#endif } void post_process_record_user(uint16_t keycode, keyrecord_t *record) { From 241fe188a41b12942c5a88e5ce88caa4b1bc45a0 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 24 Jan 2021 13:31:39 -0500 Subject: [PATCH 19/22] removing NO_ACTION_ONSHOT makes the firmware SMALLER ?! --- layouts/community/75_ansi/spidey3/config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/layouts/community/75_ansi/spidey3/config.h b/layouts/community/75_ansi/spidey3/config.h index 7fe098f0e8a8..89bd9422ae35 100644 --- a/layouts/community/75_ansi/spidey3/config.h +++ b/layouts/community/75_ansi/spidey3/config.h @@ -1,6 +1,5 @@ #pragma once -#define NO_ACTION_ONESHOT #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION #undef LOCKING_SUPPORT_ENABLE From 7b54f647e504d3811a1d3cf7bba065f81e95cd20 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 24 Jan 2021 13:39:50 -0500 Subject: [PATCH 20/22] cformat --- users/spidey3/spidey3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index befee2237979..95171131d6f3 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -295,7 +295,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { set_mods(mods); return false; } - } else { // on release of KC_BSPC + } else { // on release of KC_BSPC // In case KC_DEL is still being sent even after the release of KC_BSPC if (delkey_registered) { unregister_code(KC_DEL); From 8e48c4ff5ff359fc6477985837e50d14e207df28 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Mon, 25 Jan 2021 14:16:27 -0500 Subject: [PATCH 21/22] improve spi_glow --- users/spidey3/layer_rgb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c index 555e09f91d3a..72872f5ee38f 100644 --- a/users/spidey3/layer_rgb.c +++ b/users/spidey3/layer_rgb.c @@ -14,8 +14,12 @@ extern uint16_t spi_replace_mode; void spidey_glow(void) { rgblight_enable(); - rgblight_mode(RGBLIGHT_MODE_TWINKLE + 4); rgblight_sethsv(213, 255, 128); + if ((RGBLIGHT_MODE_TWINKLE <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_TWINKLE_end)) { + rgblight_step(); + } else { + rgblight_mode(RGBLIGHT_MODE_TWINKLE); + } #ifdef VELOCIKEY_ENABLE if (velocikey_enabled()) velocikey_toggle(); #endif From 2c10ca8231833e25a5c969e3a0fae52eaa1849d4 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Sun, 31 Jan 2021 14:43:59 -0500 Subject: [PATCH 22/22] disable shift-backspace = delete by default --- users/spidey3/spidey3.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index 95171131d6f3..cdc2e48653a1 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -282,6 +282,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_F1 ... KC_F12: return process_gflock(keycode, record); +#ifdef SHIFT_BACKSPACE_DELETE case KC_BSPC: { static bool delkey_registered; if (record->event.pressed) { @@ -304,6 +305,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } } +#endif } #ifdef RGBLIGHT_ENABLE