From 317ad7cdbedb63b1577bfaf07845e8f7546e887b Mon Sep 17 00:00:00 2001 From: Allen Choi <37539914+Thunderbird2086@users.noreply.github.com> Date: Sun, 11 Jun 2023 04:35:15 +0800 Subject: [PATCH] [Keymap] thunderbird2086 layer status with RGB lighting/matrix (#21063) --- .../crkbd/keymaps/thunderbird2086/config.h | 76 ++++++++++++------- .../crkbd/keymaps/thunderbird2086/keycodes.h | 5 +- .../crkbd/keymaps/thunderbird2086/keymap.c | 10 +++ .../keymaps/thunderbird2086/layers_block.h | 4 +- .../keymaps/thunderbird2086/process_records.c | 36 ++++++--- .../crkbd/keymaps/thunderbird2086/readme.md | 2 +- keyboards/crkbd/keymaps/thunderbird2086/rgb.c | 61 +++++++++++++++ .../crkbd/keymaps/thunderbird2086/rules.mk | 1 + 8 files changed, 151 insertions(+), 44 deletions(-) create mode 100644 keyboards/crkbd/keymaps/thunderbird2086/rgb.c diff --git a/keyboards/crkbd/keymaps/thunderbird2086/config.h b/keyboards/crkbd/keymaps/thunderbird2086/config.h index ad2bfcabc7c7..8251bc9b8fc2 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/config.h +++ b/keyboards/crkbd/keymaps/thunderbird2086/config.h @@ -14,6 +14,7 @@ # undef TAPPING_TERM #endif #define TAPPING_TERM 200 +#define VER_NEWLINE_WAIT 200 // in milliseconds #define NO_ACTION_ONESHOT @@ -32,63 +33,80 @@ #define RGBLIGHT_SLEEP #if defined(RGBLIGHT_ENABLE) +# define RGBLIGHT_LAYERS # define RGBLIGHT_LIMIT_VAL 150 # define RGBLIGHT_HUE_STEP 16 # define RGBLIGHT_SAT_STEP 32 # define RGBLIGHT_VAL_STEP 32 +# define RGBLIGHT_EFFECT_ALTERING +# define RGBLIGHT_EFFECT_BREATHING +# define RGBLIGHT_EFFECT_CHRISTMAS +# define RGBLIGHT_EFFECT_KNIGHT # define RGBLIGHT_EFFECT_RAINBOW_MOOD # define RGBLIGHT_EFFECT_RAINBOW_SWIRL -# define RGBLIGHT_EFFECT_KNIGHT +# define RGBLIGHT_EFFECT_RGB_TEST +# define RGBLIGHT_EFFECT_SNAKE +# define RGBLIGHT_EFFECT_STATIC_GRADIENT +# define RGBLIGHT_EFFECT_TWINKLE #endif #if defined(RGB_MATRIX_ENABLE) -# define RGB_MATRIX_KEYPRESSES // reacts to keypresses -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended -# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 +# define SPLIT_LAYER_STATE_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. -# define RGB_MATRIX_HUE_STEP 32 -# define RGB_MATRIX_SAT_STEP 64 -# define RGB_MATRIX_VAL_STEP 64 -# define RGB_MATRIX_SPD_STEP 20 -# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR +# define RGB_MATRIX_HUE_STEP 32 +# define RGB_MATRIX_SAT_STEP 64 +# define RGB_MATRIX_VAL_STEP 64 +# define RGB_MATRIX_SPD_STEP 20 +# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR /* Disable the animations you don't want/need. You will need to disable a good number of these * * because they take up a lot of space. Disable until you can successfully compile your firmware. */ -# undef ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_ALPHAS_MODS # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -# define ENABLE_RGB_MATRIX_BREATHING +# undef ENABLE_RGB_MATRIX_BREATHING # undef ENABLE_RGB_MATRIX_BAND_SAT # undef ENABLE_RGB_MATRIX_BAND_VAL # undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT # undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL # undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT # undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -# define ENABLE_RGB_MATRIX_CYCLE_ALL -# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# undef ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT # undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -# undef ENABLE_RGB_MATRIX_DUAL_BEACON # undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL # undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL -# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON +# undef ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON # undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS # undef ENABLE_RGB_MATRIX_RAINDROPS # undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# undef ENABLE_RGB_MATRIX_HUE_BREATHING +# undef ENABLE_RGB_MATRIX_HUE_PENDULUM +# undef ENABLE_RGB_MATRIX_HUE_WAVE +# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# undef ENABLE_RGB_MATRIX_PIXEL_RAIN # undef ENABLE_RGB_MATRIX_TYPING_HEATMAP -# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS -# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS -# define ENABLE_RGB_MATRIX_SPLASH -# undef ENABLE_RGB_MATRIX_MULTISPLASH -# undef ENABLE_RGB_MATRIX_SOLID_SPLASH -# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN + +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# undef ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# undef ENABLE_RGB_MATRIX_SOLID_SPLASH +# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH #endif diff --git a/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h b/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h index cb10a3ac0748..90b26b88a4e0 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h +++ b/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h @@ -5,12 +5,15 @@ enum custom_keycodes { // Layer Macros - COLEMAK = SAFE_RANGE, + COLEMAK = QK_USER, QWERTY, FUNCTION, CODE, ADJUST, +# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) RGBRST, +# endif + VRSN, // Secret Macros M_XXX1, M_XXX2, diff --git a/keyboards/crkbd/keymaps/thunderbird2086/keymap.c b/keyboards/crkbd/keymaps/thunderbird2086/keymap.c index 7bc23db8aa78..69c5d25fd445 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/keymap.c +++ b/keyboards/crkbd/keymaps/thunderbird2086/keymap.c @@ -80,6 +80,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; // clang-format off +#if defined(RGBLIGHT_ENABLE) +__attribute__((weak)) +void set_rgb_by_layer(layer_state_t state) { + return; +} +#endif + layer_state_t layer_state_set_user(layer_state_t state) { +# if defined(RGBLIGHT_ENABLE) + set_rgb_by_layer(state); +# endif return update_tri_layer_state(state, _FUNCTION, _ADJUST, _SECRET); } diff --git a/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h b/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h index ba41cd922349..db47ea65ed6d 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h +++ b/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h @@ -48,10 +48,10 @@ #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) # define ________________________ADJUST_L2________________________ RGBRST , XXXXXXX , RGB_SPI , RGB_SAI , RGB_HUI , RGB_VAI -# define ________________________ADJUST_L3________________________ EE_CLR , XXXXXXX , RGB_SPD , RGB_SAD , RGB_HUD , RGB_VAD +# define ________________________ADJUST_L3________________________ EE_CLR , VRSN , RGB_SPD , RGB_SAD , RGB_HUD , RGB_VAD #else # define ________________________ADJUST_L2________________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX -# define ________________________ADJUST_L3________________________ EE_CLR , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX +# define ________________________ADJUST_L3________________________ EE_CLR , VRSN , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX #endif #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) diff --git a/keyboards/crkbd/keymaps/thunderbird2086/process_records.c b/keyboards/crkbd/keymaps/thunderbird2086/process_records.c index 381cf281e5cc..46b9126677f3 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/process_records.c +++ b/keyboards/crkbd/keymaps/thunderbird2086/process_records.c @@ -4,6 +4,7 @@ #include QMK_KEYBOARD_H #include "keycodes.h" +#include "version.h" __attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { @@ -23,18 +24,31 @@ bool process_record_oled(uint16_t keycode, keyrecord_t *record) { #endif bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - - case COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_COLEMAK); - } - break; - case QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_QWERTY); + if (record->event.pressed) { + switch (keycode) { + case COLEMAK: + set_single_persistent_default_layer(_COLEMAK); + break; + case QWERTY: + set_single_persistent_default_layer(_QWERTY); + break; +# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) + case RGBRST: +# if defined(RGBLIGHT_ENABLE) + eeconfig_update_rgblight_default(); + rgblight_enable(); +# else + eeconfig_update_rgb_matrix_default(); +# endif + break; +# endif + case VRSN: + send_string( + "# qmk " QMK_VERSION "\n" SS_DELAY(VER_NEWLINE_WAIT) + "# " QMK_KEYBOARD "/" QMK_KEYMAP "\n" SS_DELAY(VER_NEWLINE_WAIT) + "# built on: " QMK_BUILDDATE "\n"); + break; } - break; } return process_record_keymap(keycode, record) && process_record_secrets(keycode, record) diff --git a/keyboards/crkbd/keymaps/thunderbird2086/readme.md b/keyboards/crkbd/keymaps/thunderbird2086/readme.md index 6400309fe8d7..cb57f20aecbd 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/readme.md +++ b/keyboards/crkbd/keymaps/thunderbird2086/readme.md @@ -54,7 +54,7 @@ The concept is Mac and **baby finger** friendly keymap. | --- | --- | --- | | ESC | Caps lock | | -- ADJUST: RGB control, Power control, default layer setting and reset +- ADJUST: RGB control, Power control, default layer setting, QMK version and reset ![adjust](https://i.imgur.com/uDIhigd.png) - SECRET: hold `ADJUST` and `FUNCTION` to activate diff --git a/keyboards/crkbd/keymaps/thunderbird2086/rgb.c b/keyboards/crkbd/keymaps/thunderbird2086/rgb.c new file mode 100644 index 000000000000..d9b0003c8817 --- /dev/null +++ b/keyboards/crkbd/keymaps/thunderbird2086/rgb.c @@ -0,0 +1,61 @@ +// Copyright 2023 Allen Choi (@thunderbird2086) +// SPDX-License-Identifier: GPL-2.0-or-later + +#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) +# include QMK_KEYBOARD_H + +# include "keycodes.h" + +# ifdef RGBLIGHT_ENABLE + +const rgblight_segment_t PROGMEM _rgb_layer_0[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 56, HSV_BLUE} +); +const rgblight_segment_t PROGMEM _rgb_layer_1[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 56, HSV_GREEN} +); +const rgblight_segment_t PROGMEM _rgb_layer_2[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 56, HSV_YELLOW} +); + +const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST( + _rgb_layer_0, + _rgb_layer_1, + _rgb_layer_2 +); + +void keyboard_post_init_user(void) { + // Enable the LED layers + rgblight_layers = _rgb_layers; +} + +void set_rgb_by_layer(layer_state_t state) { + rgblight_set_layer_state(0, layer_state_cmp(state, _CODE)); + rgblight_set_layer_state(1, layer_state_cmp(state, _FUNCTION)); + rgblight_set_layer_state(2, layer_state_cmp(state, _ADJUST)); +} + +# else + +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + for (uint8_t i = led_min; i < led_max; i++) { + switch(get_highest_layer(layer_state|default_layer_state)) { + case _CODE: + rgb_matrix_set_color(i, RGB_BLUE); + break; + case _FUNCTION: + rgb_matrix_set_color(i, RGB_GREEN); + break; + case _ADJUST: + rgb_matrix_set_color(i, RGB_YELLOW); + // RGB_WHITE caused crash + break; + default: + break; + } + } + return false; +} + +# endif +#endif diff --git a/keyboards/crkbd/keymaps/thunderbird2086/rules.mk b/keyboards/crkbd/keymaps/thunderbird2086/rules.mk index 4da48db08e39..adc61ea60d3d 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/rules.mk +++ b/keyboards/crkbd/keymaps/thunderbird2086/rules.mk @@ -11,6 +11,7 @@ TAP_DANCE_ENABLE = yes SRC += oled.c SRC += process_records.c +SRC += rgb.c SRC += tap_dances.c ifneq ("$(wildcard keyboards/crkbd/keymaps/thunderbird2086/secrets.c)","")