aboutsummaryrefslogtreecommitdiff
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
-rw-r--r--users/bbaserdem/rules.mk3
-rw-r--r--users/bcat/rules.mk1
-rw-r--r--users/bocaj/wrappers.h14
-rw-r--r--users/brandonschlack/brandonschlack.h1
-rw-r--r--users/callum/callum.c4
-rw-r--r--users/drashna/readme_keycodes.md2
-rw-r--r--users/hvp/hvp.h3
-rwxr-xr-xusers/ishtob/config.h3
-rw-r--r--users/romus/rules.mk3
-rw-r--r--users/spidey3/config.h5
-rw-r--r--users/spidey3/init.c7
-rw-r--r--users/spidey3/layer_rgb.c397
-rw-r--r--users/spidey3/rules.mk2
-rw-r--r--users/spidey3/spidey3.c168
-rw-r--r--users/spidey3/spidey3.h5
-rw-r--r--users/spidey3/unicode.h2
-rw-r--r--users/yanfali/config.h2
17 files changed, 429 insertions, 193 deletions
diff --git a/users/bbaserdem/rules.mk b/users/bbaserdem/rules.mk
index 24c98fdc9..94f01cdff 100644
--- a/users/bbaserdem/rules.mk
+++ b/users/bbaserdem/rules.mk
@@ -6,7 +6,7 @@ UNICODE_ENABLE = yes # Used for unicode character emulation
6EXTRAKEY_ENABLE = yes # OS signals like volume control 6EXTRAKEY_ENABLE = yes # OS signals like volume control
7 7
8# DISABLE 8# DISABLE
9ifndef BLUETOOTH_ENABLE 9ifndef BLUETOOTH_ENABLE
10 BLUETOOTH_ENABLE = no # No bluetooth 10 BLUETOOTH_ENABLE = no # No bluetooth
11endif 11endif
12COMMAND_ENABLE = no # Some bootmagic thing i dont use 12COMMAND_ENABLE = no # Some bootmagic thing i dont use
@@ -15,7 +15,6 @@ CONSOLE_ENABLE = no # Allows console output with a command
15SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. 15SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested.
16NKRO_ENABLE = no # Default is 6KRO which is plenty 16NKRO_ENABLE = no # Default is 6KRO which is plenty
17MIDI_ENABLE = no # Untested feature 17MIDI_ENABLE = no # Untested feature
18FAUXCLICKY_ENABLE = no # Emulates clicks using speaker
19KEY_LOCK_ENABLE = no # Allows locking any key. Not used 18KEY_LOCK_ENABLE = no # Allows locking any key. Not used
20API_SYSEX_ENABLE = no # Allows OS to send signals. 19API_SYSEX_ENABLE = no # Allows OS to send signals.
21KEY_LOCK_ENABLE = no # Allows locking any key. Not used 20KEY_LOCK_ENABLE = no # Allows locking any key. Not used
diff --git a/users/bcat/rules.mk b/users/bcat/rules.mk
index f87974ed9..3442a78ac 100644
--- a/users/bcat/rules.mk
+++ b/users/bcat/rules.mk
@@ -23,7 +23,6 @@ MOUSEKEY_ENABLE = no
23TERMINAL_ENABLE = no 23TERMINAL_ENABLE = no
24 24
25# Disable unused hardware options on all keyboards. 25# Disable unused hardware options on all keyboards.
26FAUXCLICKY_ENABLE = no
27MIDI_ENABLE = no 26MIDI_ENABLE = no
28SLEEP_LED_ENABLE = no 27SLEEP_LED_ENABLE = no
29 28
diff --git a/users/bocaj/wrappers.h b/users/bocaj/wrappers.h
index c76820f49..0f18d346a 100644
--- a/users/bocaj/wrappers.h
+++ b/users/bocaj/wrappers.h
@@ -12,7 +12,7 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
12 12
13// clang-format off 13// clang-format off
14#define WRAPPER_ergodox_pretty(...) LAYOUT_ergodox_pretty(__VA_ARGS__) 14#define WRAPPER_ergodox_pretty(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
15#define WRAPPER_ortho_4x12(...) LAYOUT_planck_mit(__VA_ARGS__) 15#define WRAPPER_ortho_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__)
16 16
17/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */ 17/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
18#define WRAPPER_ergodox_bocaj( \ 18#define WRAPPER_ergodox_bocaj( \
@@ -62,25 +62,25 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
62 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \ 62 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
63 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \ 63 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
64 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ 64 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
65 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \ 65 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
66)\ 66)\
67 WRAPPER_ortho_4x12( \ 67 WRAPPER_ortho_4x12( \
68 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \ 68 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
69 K11, K12, SFT_T(K13), GUI_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), GUI_T(K19), SFT_T(K1A), K1B, K1C, \ 69 K11, K12, SFT_T(K13), GUI_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), GUI_T(K19), SFT_T(K1A), K1B, K1C, \
70 K21, CTL_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, CTL_T(K2B), K2C, \ 70 K21, CTL_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, CTL_T(K2B), K2C, \
71 K31, K32, K33, K34, LT(_LOWER, K35), K36, LT(_RAISE, K37), K38, K39, K3A, K3B ) 71 K31, K32, K33, K34, LT(_LOWER, K35), K36, K37, LT(_RAISE, K38), K39, K3A, K3B, K3C )
72 72
73#define WRAPPER_planck_bocaj_WIN( \ 73#define WRAPPER_planck_bocaj_WIN( \
74 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \ 74 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
75 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \ 75 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
76 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ 76 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
77 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \ 77 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
78)\ 78)\
79 WRAPPER_ortho_4x12( \ 79 WRAPPER_ortho_4x12( \
80 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \ 80 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
81 K11, K12, SFT_T(K13), CTL_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), CTL_T(K19), SFT_T(K1A), K1B, K1C, \ 81 K11, K12, SFT_T(K13), CTL_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), CTL_T(K19), SFT_T(K1A), K1B, K1C, \
82 K21, GUI_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, GUI_T(K2B), K2C, \ 82 K21, GUI_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, GUI_T(K2B), K2C, \
83 K31, K32, K33, K34, LT(_LOWER, K35), K36, LT(_RAISE, K37), K38, K39, K3A, K3B ) 83 K31, K32, K33, K34, LT(_LOWER, K35), K36, K37, LT(_RAISE, K38), K39, K3A, K3B, K3C )
84 84
85#define WRAPPER_planck_bocaj_base( \ 85#define WRAPPER_planck_bocaj_base( \
86 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ 86 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -91,7 +91,7 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
91 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \ 91 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
92 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \ 92 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \
93 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \ 93 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \
94 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \ 94 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \
95 ) 95 )
96 96
97#define WRAPPER_planck_bocaj_base_WIN( \ 97#define WRAPPER_planck_bocaj_base_WIN( \
@@ -103,7 +103,7 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
103 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \ 103 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
104 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \ 104 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \
105 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \ 105 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \
106 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \ 106 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \
107 ) 107 )
108 108
109/* 109/*
diff --git a/users/brandonschlack/brandonschlack.h b/users/brandonschlack/brandonschlack.h
index d7dbc0ea4..4fbf6906d 100644
--- a/users/brandonschlack/brandonschlack.h
+++ b/users/brandonschlack/brandonschlack.h
@@ -46,6 +46,7 @@ enum bs_layers {
46 _ADJUST = 15 // 15: Change keyboard settings 46 _ADJUST = 15 // 15: Change keyboard settings
47}; 47};
48 48
49#define _MACRO _M1
49#define _LOWER _FN1 50#define _LOWER _FN1
50#define _RAISE _FN2 51#define _RAISE _FN2
51 52
diff --git a/users/callum/callum.c b/users/callum/callum.c
index 4661902af..b3254a9cf 100644
--- a/users/callum/callum.c
+++ b/users/callum/callum.c
@@ -10,7 +10,7 @@
10#define TABL G(S(KC_LBRC)) 10#define TABL G(S(KC_LBRC))
11#define TABR G(S(KC_RBRC)) 11#define TABR G(S(KC_RBRC))
12#define SPCL A(G(KC_LEFT)) 12#define SPCL A(G(KC_LEFT))
13#define SPCR A(G(KC_RGHT)) 13#define SPC_R A(G(KC_RGHT))
14#define LA_SYM MO(SYM) 14#define LA_SYM MO(SYM)
15#define LA_NAV MO(NAV) 15#define LA_NAV MO(NAV)
16 16
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 [NAV] = LAYOUT_callum( 50 [NAV] = LAYOUT_callum(
51 KC_TAB, SW_WIN, TABL, TABR, KC_VOLU, RESET, HOME, KC_UP, END, KC_DEL, 51 KC_TAB, SW_WIN, TABL, TABR, KC_VOLU, RESET, HOME, KC_UP, END, KC_DEL,
52 OS_SHFT, OS_CTRL, OS_ALT, OS_CMD, KC_VOLD, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, 52 OS_SHFT, OS_CTRL, OS_ALT, OS_CMD, KC_VOLD, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
53 SPCL, SPCR, BACK, FWD, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, SW_LANG, KC_ENT, 53 SPCL, SPC_R, BACK, FWD, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, SW_LANG, KC_ENT,
54 _______, _______, _______, _______ 54 _______, _______, _______, _______
55 ), 55 ),
56 56
diff --git a/users/drashna/readme_keycodes.md b/users/drashna/readme_keycodes.md
index f5e6fb271..af4dd54bc 100644
--- a/users/drashna/readme_keycodes.md
+++ b/users/drashna/readme_keycodes.md
@@ -5,6 +5,6 @@ Keycodes are defined in the drashna.h file and need to be included in the keymap
5 5
6A bunch of macros are present and are only included on boards that are not the Ergodox EZ or Orthodox, as they are not needed for those boards. 6A bunch of macros are present and are only included on boards that are not the Ergodox EZ or Orthodox, as they are not needed for those boards.
7 7
8Included is a custom macro for compiling my keyboards. This includes the bootloader target (`:teensy`, `:avrdude`, or `:dfu`), and keeps RGBLIGHT, AUDIO and/or FAUXCLICKY enabled, if it previously was (regardless of the rules file). 8Included is a custom macro for compiling my keyboards. This includes the bootloader target (`:teensy`, `:avrdude`, or `:dfu`), and keeps RGBLIGHT, AUDIO enabled, if it previously was (regardless of the rules file).
9 9
10This also includes a modified RESET keycode as well, that sets the underglow to red. 10This also includes a modified RESET keycode as well, that sets the underglow to red.
diff --git a/users/hvp/hvp.h b/users/hvp/hvp.h
index 99da258aa..b016da9e2 100644
--- a/users/hvp/hvp.h
+++ b/users/hvp/hvp.h
@@ -5,8 +5,9 @@
5#endif 5#endif
6#include "quantum.h" 6#include "quantum.h"
7 7
8#undef TAPPING_TERM
8#define TAPPING_TERM 150 9#define TAPPING_TERM 150
9 10
10// Keys 11// Keys
11 12
12#define D_NAVI MT(MOD_LCTL | MOD_LSFT, KC_D) \ No newline at end of file 13#define D_NAVI MT(MOD_LCTL | MOD_LSFT, KC_D)
diff --git a/users/ishtob/config.h b/users/ishtob/config.h
index 1f567f4a5..6c07d2f2f 100755
--- a/users/ishtob/config.h
+++ b/users/ishtob/config.h
@@ -50,9 +50,6 @@
50 * MIDI options 50 * MIDI options
51 */ 51 */
52 52
53/* Prevent use of disabled MIDI features in the keymap */
54//#define MIDI_ENABLE_STRICT 1
55
56/* enable basic MIDI features: 53/* enable basic MIDI features:
57 - MIDI notes can be sent when in Music mode is on 54 - MIDI notes can be sent when in Music mode is on
58*/ 55*/
diff --git a/users/romus/rules.mk b/users/romus/rules.mk
index 78ce2e93f..12bbabb02 100644
--- a/users/romus/rules.mk
+++ b/users/romus/rules.mk
@@ -6,7 +6,7 @@ UNICODE_ENABLE = yes # Used for unicode character emulation
6EXTRAKEY_ENABLE = yes # OS signals like volume control 6EXTRAKEY_ENABLE = yes # OS signals like volume control
7 7
8# DISABLE 8# DISABLE
9ifndef BLUETOOTH_ENABLE 9ifndef BLUETOOTH_ENABLE
10 BLUETOOTH_ENABLE = no # No bluetooth 10 BLUETOOTH_ENABLE = no # No bluetooth
11endif 11endif
12COMMAND_ENABLE = no # Some bootmagic thing i dont use 12COMMAND_ENABLE = no # Some bootmagic thing i dont use
@@ -15,7 +15,6 @@ CONSOLE_ENABLE = no # Allows console output with a command
15SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. 15SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested.
16NKRO_ENABLE = no # Default is 6KRO which is plenty 16NKRO_ENABLE = no # Default is 6KRO which is plenty
17MIDI_ENABLE = no # Untested feature 17MIDI_ENABLE = no # Untested feature
18FAUXCLICKY_ENABLE = no # Emulates clicks using speaker
19KEY_LOCK_ENABLE = no # Allows locking any key. Not used 18KEY_LOCK_ENABLE = no # Allows locking any key. Not used
20API_SYSEX_ENABLE = no # Allows OS to send signals. 19API_SYSEX_ENABLE = no # Allows OS to send signals.
21 20
diff --git a/users/spidey3/config.h b/users/spidey3/config.h
index 053240718..7062fde03 100644
--- a/users/spidey3/config.h
+++ b/users/spidey3/config.h
@@ -3,9 +3,10 @@
3#define LED_DISABLE_WHEN_USB_SUSPENDED true 3#define LED_DISABLE_WHEN_USB_SUSPENDED true
4#define RGB_DISABLE_WHEN_USB_SUSPENDED true 4#define RGB_DISABLE_WHEN_USB_SUSPENDED true
5#define RGBLIGHT_LAYERS 5#define RGBLIGHT_LAYERS
6#define RGBLIGHT_MAX_LAYERS 16 6#define RGBLIGHT_MAX_LAYERS 17
7#define RGBLIGHT_LAYER_BLINK 7#define RGBLIGHT_LAYER_BLINK
8#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF 8#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
9#define RGBLIGHT_STARTUP_ANIMATION
9 10
10#undef RGBLIGHT_ANIMATIONS 11#undef RGBLIGHT_ANIMATIONS
11#define RGBLIGHT_EFFECT_BREATHING 12#define RGBLIGHT_EFFECT_BREATHING
@@ -17,6 +18,8 @@
17#define RGBLIGHT_EFFECT_ALTERNATING 18#define RGBLIGHT_EFFECT_ALTERNATING
18#define RGBLIGHT_EFFECT_TWINKLE 19#define RGBLIGHT_EFFECT_TWINKLE
19 20
21#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC
22
20#define SPI_DEBUG_SCAN_RATE 23#define SPI_DEBUG_SCAN_RATE
21 24
22#undef MANUFACTURER 25#undef MANUFACTURER
diff --git a/users/spidey3/init.c b/users/spidey3/init.c
index 273c2b289..8db41a5f4 100644
--- a/users/spidey3/init.c
+++ b/users/spidey3/init.c
@@ -18,11 +18,6 @@ void eeconfig_init_user(void) {
18#endif 18#endif
19} 19}
20 20
21void shutdown_user() {
22#ifdef RGBLIGHT_ENABLE 21#ifdef RGBLIGHT_ENABLE
23 clear_rgb_layers(); 22void shutdown_user(void) { shutdown_user_rgb(); }
24 rgblight_enable();
25 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
26 rgblight_sethsv_noeeprom(HSV_RED);
27#endif 23#endif
28}
diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c
index 160cc4317..37e59579c 100644
--- a/users/spidey3/layer_rgb.c
+++ b/users/spidey3/layer_rgb.c
@@ -2,6 +2,7 @@
2 2
3#include "spidey3.h" 3#include "spidey3.h"
4#include "velocikey.h" 4#include "velocikey.h"
5#include <lib/lib8tion/lib8tion.h>
5 6
6uint32_t rgb_mode; 7uint32_t rgb_mode;
7uint16_t rgb_hue; 8uint16_t rgb_hue;
@@ -9,10 +10,17 @@ uint8_t rgb_sat;
9uint8_t rgb_val; 10uint8_t rgb_val;
10bool rgb_saved = 0; 11bool rgb_saved = 0;
11 12
13extern bool spi_gflock;
14extern uint16_t spi_replace_mode;
15
12void spidey_glow(void) { 16void spidey_glow(void) {
13 rgblight_enable(); 17 rgblight_enable();
14 rgblight_mode(RGBLIGHT_MODE_TWINKLE + 4);
15 rgblight_sethsv(213, 255, 128); 18 rgblight_sethsv(213, 255, 128);
19 if ((RGBLIGHT_MODE_TWINKLE <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_TWINKLE_end)) {
20 rgblight_step();
21 } else {
22 rgblight_mode(RGBLIGHT_MODE_TWINKLE);
23 }
16#ifdef VELOCIKEY_ENABLE 24#ifdef VELOCIKEY_ENABLE
17 if (velocikey_enabled()) velocikey_toggle(); 25 if (velocikey_enabled()) velocikey_toggle();
18#endif 26#endif
@@ -23,6 +31,7 @@ void eeconfig_init_user_rgb(void) { spidey_glow(); }
23// clang-format off 31// clang-format off
24 32
25// Convenience macros 33// Convenience macros
34#define NONE { RGBLIGHT_END_SEGMENTS }
26#define CORNER_BL(color) { 0, 1, color } 35#define CORNER_BL(color) { 0, 1, color }
27#define CORNER_BR(color) { RGBLED_NUM / 2 - 1, 1, color } 36#define CORNER_BR(color) { RGBLED_NUM / 2 - 1, 1, color }
28#define CORNER_FR(color) { RGBLED_NUM / 2, 1, color } 37#define CORNER_FR(color) { RGBLED_NUM / 2, 1, color }
@@ -31,10 +40,12 @@ void eeconfig_init_user_rgb(void) { spidey_glow(); }
31#define FRONT(inset, color) { RGBLED_NUM / 2 + inset, RGBLED_NUM / 2 - 2 * inset, color } 40#define FRONT(inset, color) { RGBLED_NUM / 2 + inset, RGBLED_NUM / 2 - 2 * inset, color }
32#define BACK(inset, color) { inset, RGBLED_NUM / 2 - 2 * inset, color } 41#define BACK(inset, color) { inset, RGBLED_NUM / 2 - 2 * inset, color }
33 42
43const rgblight_segment_t PROGMEM _none[] = NONE;
44
34#define LAYER_OFFSET 0 45#define LAYER_OFFSET 0
35const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_PURPLE)); 46// No indicator for base layer
36const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_MAGENTA)); 47const rgblight_segment_t PROGMEM _layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_MAGENTA)); // _NUMPAD
37const rgblight_segment_t PROGMEM _layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_GREEN)); 48const rgblight_segment_t PROGMEM _layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_GREEN)); // _FN
38 49
39#define LOCK_OFFSET 3 50#define LOCK_OFFSET 3
40const rgblight_segment_t PROGMEM _numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(3, HSV_YELLOW)); 51const rgblight_segment_t PROGMEM _numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(3, HSV_YELLOW));
@@ -49,12 +60,20 @@ const rgblight_segment_t PROGMEM _glyphreplace_layer[] = RGBLIGHT_LAYER_SEGMENTS
49const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_RED)); 60const rgblight_segment_t PROGMEM _no_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_RED));
50const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_GREEN)); 61const rgblight_segment_t PROGMEM _yes_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_GREEN));
51const rgblight_segment_t PROGMEM _meh_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_YELLOW)); 62const rgblight_segment_t PROGMEM _meh_layer[] = RGBLIGHT_LAYER_SEGMENTS(FRONT(1, HSV_YELLOW));
63const rgblight_segment_t PROGMEM _huh_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNERS(HSV_YELLOW), FRONT(1, HSV_BLUE), BACK(1, HSV_BLUE));
64
65#define UNICODE_OFFSET 12
66const rgblight_segment_t PROGMEM _uc_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_PURPLE));
67// No indicator for UC_LNX
68// UC_WIN disabled in config.h
69// UC_BSD not implemented
70const rgblight_segment_t PROGMEM _uc_winc_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_CYAN));
52 71
53// Now define the array of layers. Higher numbered layers take precedence. 72// Now define the array of layers. Higher numbered layers take precedence.
54const rgblight_segment_t *const PROGMEM _rgb_layers[] = { 73const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
55 [LAYER_OFFSET + 0] = _layer1_layer, 74 [LAYER_OFFSET + _BASE] = _none,
56 [LAYER_OFFSET + 1] = _layer2_layer, 75 [LAYER_OFFSET + _NUMPAD] = _layer1_layer,
57 [LAYER_OFFSET + 2] = _layer3_layer, 76 [LAYER_OFFSET + _FN] = _layer2_layer,
58 77
59 [LOCK_OFFSET + USB_LED_NUM_LOCK] = _numlock_layer, 78 [LOCK_OFFSET + USB_LED_NUM_LOCK] = _numlock_layer,
60 [LOCK_OFFSET + USB_LED_CAPS_LOCK] = _capslock_layer, 79 [LOCK_OFFSET + USB_LED_CAPS_LOCK] = _capslock_layer,
@@ -66,11 +85,18 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
66 [ACK_OFFSET + ACK_NO] = _no_layer, 85 [ACK_OFFSET + ACK_NO] = _no_layer,
67 [ACK_OFFSET + ACK_YES] = _yes_layer, 86 [ACK_OFFSET + ACK_YES] = _yes_layer,
68 [ACK_OFFSET + ACK_MEH] = _meh_layer, 87 [ACK_OFFSET + ACK_MEH] = _meh_layer,
88 [ACK_OFFSET + ACK_HUH] = _huh_layer,
89
90 [UNICODE_OFFSET + UC_MAC] = _uc_mac_layer,
91 [UNICODE_OFFSET + UC_LNX] = _none,
92 [UNICODE_OFFSET + UC_WIN] = _none,
93 [UNICODE_OFFSET + UC_BSD] = _none,
94 [UNICODE_OFFSET + UC_WINC] = _uc_winc_layer,
69 95
70 [ACK_OFFSET + ACK_MEH + 1] = NULL 96 [UNICODE_OFFSET + UC__COUNT] = NULL
71}; 97};
72 98
73// clang-format on 99// clang-format on
74 100
75const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1; 101const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1;
76 102
@@ -84,118 +110,259 @@ void clear_rgb_layers() {
84void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) { 110void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) {
85 for (uint8_t i = start; i < end; i++) { 111 for (uint8_t i = start; i < end; i++) {
86 bool is_on = layer_state_cmp(state, i); 112 bool is_on = layer_state_cmp(state, i);
87 dprintf("layer[%u]=%u\n", i, is_on); 113 dprintf("layer[%u]=rl[%u]=%u\n", i, LAYER_OFFSET + i, is_on);
88 rgblight_set_layer_state(LAYER_OFFSET + i - 1, is_on); 114 rgblight_set_layer_state(LAYER_OFFSET + i, is_on);
89 } 115 }
90} 116}
91 117
118void do_rgb_unicode(void) {
119 uint8_t uc_mode = get_unicode_input_mode();
120 for (uint8_t i = 0; i < UC__COUNT; i++) {
121 bool is_on = i == uc_mode;
122 dprintf("unicode[%u]=rl[%u]=%u\n", i, UNICODE_OFFSET + i, is_on);
123 rgblight_set_layer_state(UNICODE_OFFSET + i, is_on);
124 }
125}
126
127void do_rgb_all(void) {
128 do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT, LAYER_BASE_REGULAR);
129 do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END);
130 do_rgb_unicode();
131 rgblight_set_layer_state(MISC_OFFSET + 0, spi_gflock);
132 rgblight_set_layer_state(MISC_OFFSET + 1, spi_replace_mode != SPI_NORMAL);
133}
134
135// flags. 0 = no change, 1 = increment, -1 = decrement.
136int8_t change_hue = 0;
137int8_t change_sat = 0;
138int8_t change_val = 0;
139
140// timer to control color change speed
141uint16_t change_timer = 0;
142const uint16_t change_tick = 15;
143
92extern rgblight_config_t rgblight_config; 144extern rgblight_config_t rgblight_config;
93extern rgblight_status_t rgblight_status; 145extern rgblight_status_t rgblight_status;
94static bool startup_animation_done = false; 146
147#if defined(RGBLIGHT_STARTUP_ANIMATION)
148
149#define STARTUP_ANIMATION_SATURATION 200
150#define STARTUP_ANIMATION_VALUE 255
151#define STARTUP_ANIMATION_FADE_STEP 5
152#define STARTUP_ANIMATION_CYCLE_STEP 2
153#define STARTUP_ANIMATION_RAMP_TO_STEPS 70
154#define STARTUP_ANIMATION_STEP_TIME 10
155#define STARTUP_ANIMATION_INITIAL_DELAY 0 // milliseconds, must be < 255 * STEP_TIME
156
157typedef enum {
158 DISABLED,
159 WAITING,
160 RESTART,
161 START,
162 FADE_OLD,
163 FADE_IN,
164 CYCLE,
165 RAMP_DOWN,
166 RAMP_TO,
167 CLEAN_UP,
168 DONE
169} startup_animation_state_t;
170
171static rgblight_config_t old_config;
172static uint8_t old_base_mode;
173static startup_animation_state_t startup_animation_state = DISABLED;
174static uint16_t rgblight_startup_loop_timer;
175
176void startup_animation_init(void) {
177 old_config.raw = rgblight_config.raw;
178 old_base_mode = rgblight_status.base_mode;
179
180 if (!old_config.enable)
181 rgblight_enable_noeeprom();
182}
183#endif
95 184
96void keyboard_post_init_user_rgb(void) { 185void keyboard_post_init_user_rgb(void) {
97 // Enable the LED layers 186 // Enable the LED layers
98 rgblight_layers = _rgb_layers; 187 rgblight_layers = _rgb_layers;
99 do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT + 1, LAYER_BASE_REGULAR); 188 do_rgb_all();
100 do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END);
101 189
102 // Startup animation 190#if defined(RGBLIGHT_STARTUP_ANIMATION)
103 { 191 startup_animation_init();
104 bool is_enabled = rgblight_config.enable; 192 startup_animation_state = STARTUP_ANIMATION_INITIAL_DELAY ? WAITING : START;
105 uint8_t old_hue = rgblight_config.hue; 193#endif
106 uint8_t old_sat = rgblight_config.sat; 194}
107 uint8_t old_val = rgblight_config.val;
108 uint8_t old_mode = rgblight_config.mode;
109 195
110 bool ramp_down = 196void matrix_scan_user_rgb(void) {
197#if defined(RGBLIGHT_STARTUP_ANIMATION)
198 if (startup_animation_state != DONE && is_keyboard_master()) {
199 if (startup_animation_state == START || timer_elapsed(rgblight_startup_loop_timer) > STARTUP_ANIMATION_STEP_TIME) {
200 static uint8_t counter;
201 rgblight_startup_loop_timer = timer_read();
202
203 switch (startup_animation_state) {
204 case WAITING:
205#ifdef STARTUP_ANIMATION_DEBUG
206 dprintf("sua WAITING counter=%u\n", counter);
207#endif
208 if (counter < STARTUP_ANIMATION_INITIAL_DELAY / STARTUP_ANIMATION_STEP_TIME) {
209 counter++;
210 } else {
211 startup_animation_state = START;
212 }
213 break;
214
215 case RESTART:
216 dprintln("sua RESTART");
217 startup_animation_init();
218 case START:
219 dprintln("sua START");
220 startup_animation_state = FADE_OLD;
221 counter = old_config.val;
222 // No break! Just roll into FADE_OLD in the same iteration...
223
224 case FADE_OLD:
225#ifdef STARTUP_ANIMATION_DEBUG
226 dprintf("sua FADE_OLD counter=%u\n", counter);
227#endif
228 if (counter >= STARTUP_ANIMATION_FADE_STEP) {
229 rgblight_sethsv_noeeprom(old_config.hue, old_config.sat, counter);
230 counter -= STARTUP_ANIMATION_FADE_STEP;
231 } else {
232 counter = 0;
233 startup_animation_state = FADE_IN;
234 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
235 }
236 break;
237
238 case FADE_IN:
239#ifdef STARTUP_ANIMATION_DEBUG
240 dprintf("sua FADE_IN counter=%u\n", counter);
241#endif
242 if (counter < STARTUP_ANIMATION_VALUE) {
243 rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter);
244 counter += STARTUP_ANIMATION_FADE_STEP;
245 } else {
246 counter = 255;
247 startup_animation_state = CYCLE;
248 }
249 break;
250
251 case CYCLE:
252#ifdef STARTUP_ANIMATION_DEBUG
253 dprintf("sua CYCLE counter=%u\n", counter);
254#endif
255 if (counter >= STARTUP_ANIMATION_CYCLE_STEP) {
256 rgblight_sethsv_noeeprom((counter + old_config.hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE);
257 counter -= STARTUP_ANIMATION_CYCLE_STEP;
258 } else {
259 if (
111#ifdef RGBLIGHT_EFFECT_BREATHING 260#ifdef RGBLIGHT_EFFECT_BREATHING
112 (rgblight_status.base_mode == RGBLIGHT_MODE_BREATHING) || 261 (old_base_mode == RGBLIGHT_MODE_BREATHING) ||
113#endif 262#endif
114#ifdef RGBLIGHT_EFFECT_SNAKE 263#ifdef RGBLIGHT_EFFECT_SNAKE
115 (rgblight_status.base_mode == RGBLIGHT_MODE_SNAKE) || 264 (old_base_mode == RGBLIGHT_MODE_SNAKE) ||
116#endif 265#endif
117#ifdef RGBLIGHT_EFFECT_KNIGHT 266#ifdef RGBLIGHT_EFFECT_KNIGHT
118 (rgblight_status.base_mode == RGBLIGHT_MODE_KNIGHT) || 267 (old_base_mode == RGBLIGHT_MODE_KNIGHT) ||
119#endif 268#endif
120#ifdef RGBLIGHT_EFFECT_TWINKLE 269#ifdef RGBLIGHT_EFFECT_TWINKLE
121 (rgblight_status.base_mode == RGBLIGHT_MODE_TWINKLE) || 270 (old_base_mode == RGBLIGHT_MODE_TWINKLE) ||
122#endif 271#endif
123 !is_enabled; 272 !old_config.enable) {
124 273 counter = STARTUP_ANIMATION_VALUE;
125 bool ramp_to = 274 startup_animation_state = RAMP_DOWN;
275 } else if (
126#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT 276#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
127 (rgblight_status.base_mode == RGBLIGHT_MODE_STATIC_GRADIENT) || 277 (old_base_mode == RGBLIGHT_MODE_STATIC_GRADIENT) ||
128#endif 278#endif
129#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD 279#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
130 (rgblight_status.base_mode == RGBLIGHT_MODE_RAINBOW_MOOD) || 280 (old_base_mode == RGBLIGHT_MODE_RAINBOW_MOOD) ||
131#endif 281#endif
132#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL 282#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
133 (rgblight_status.base_mode == RGBLIGHT_MODE_RAINBOW_SWIRL) || 283 (old_base_mode == RGBLIGHT_MODE_RAINBOW_SWIRL) ||
134#endif 284#endif
135#ifdef RGBLIGHT_EFFECT_RAINBOW_CHRISTMAS 285#ifdef RGBLIGHT_EFFECT_RAINBOW_CHRISTMAS
136 (rgblight_status.base_mode == RGBLIGHT_MODE_CHRISTMAS) || 286 (old_base_mode == RGBLIGHT_MODE_CHRISTMAS) ||
137#endif 287#endif
138#ifdef RGBLIGHT_EFFECT_RAINBOW_RGB_TEST_ 288#ifdef RGBLIGHT_EFFECT_RAINBOW_RGB_TEST_
139 (rgblight_status.base_mode == RGBLIGHT_MODE_RGB_TEST) || 289 (old_base_mode == RGBLIGHT_MODE_RGB_TEST) ||
140#endif 290#endif
141 (rgblight_status.base_mode == RGBLIGHT_MODE_STATIC_LIGHT); 291 (old_base_mode == RGBLIGHT_MODE_STATIC_LIGHT)) {
142 292 counter = 0;
143#define STARTUP_ANIMATION_SATURATION 200 293 startup_animation_state = RAMP_TO;
144#define STARTUP_ANIMATION_VALUE 255 294 } else {
145#define STARTUP_ANIMATION_STEP 5 295 startup_animation_state = CLEAN_UP;
146 296 }
147 rgblight_enable_noeeprom(); 297 }
148 if (rgblight_config.enable) { 298 break;
149 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); 299
150 for (uint8_t i = 0; i < STARTUP_ANIMATION_VALUE; i += STARTUP_ANIMATION_STEP) { 300 case RAMP_DOWN:
151 rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, i); 301#ifdef STARTUP_ANIMATION_DEBUG
152 matrix_scan(); 302 dprintf("sua RAMP_DOWN counter=%u\n", counter);
153 wait_ms(10); 303#endif
154 } 304 if (counter >= STARTUP_ANIMATION_FADE_STEP) {
155 for (uint8_t i = 255; i > 0; i -= STARTUP_ANIMATION_STEP) { 305 rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter);
156 rgblight_sethsv_noeeprom((i + old_hue) % 255, STARTUP_ANIMATION_SATURATION, STARTUP_ANIMATION_VALUE); 306 counter -= STARTUP_ANIMATION_FADE_STEP;
157 matrix_scan(); 307 } else {
158 wait_ms(10); 308 startup_animation_state = CLEAN_UP;
159 } 309 }
160 310 break;
161 if (ramp_down) { 311
162 dprintln("ramp_down"); 312 case RAMP_TO:
163 for (uint8_t i = STARTUP_ANIMATION_VALUE; i > 0; i -= STARTUP_ANIMATION_STEP) { 313 {
164 rgblight_sethsv_noeeprom(old_hue, STARTUP_ANIMATION_SATURATION, i); 314#ifdef STARTUP_ANIMATION_DEBUG
165 matrix_scan(); 315 dprintf("sua RAMP_TO s=%u, v=%u, counter=%u\n", old_config.sat, old_config.val, counter);
166 wait_ms(10); 316#endif
167 } 317 uint8_t steps = STARTUP_ANIMATION_RAMP_TO_STEPS;
168 } else if (ramp_to) { 318 if (counter < steps) {
169 dprintf("ramp_to s=%u, v=%u\n", old_sat, old_val); 319 uint8_t s = STARTUP_ANIMATION_SATURATION + counter * (((float)old_config.sat - STARTUP_ANIMATION_SATURATION) / (float)steps);
170 uint8_t steps = 50; 320 uint8_t v = STARTUP_ANIMATION_VALUE + counter * (((float)old_config.val - STARTUP_ANIMATION_VALUE) / (float)steps);
171 for (uint8_t i = 0; i < steps; i++) { 321 rgblight_sethsv_noeeprom(old_config.hue, s, v);
172 uint8_t s = STARTUP_ANIMATION_SATURATION + i * (((float)old_sat - STARTUP_ANIMATION_SATURATION) / (float)steps); 322 counter++;
173 uint8_t v = STARTUP_ANIMATION_VALUE + i * (((float)old_val - STARTUP_ANIMATION_VALUE) / (float)steps); 323 } else {
174 rgblight_sethsv_noeeprom(old_hue, s, v); 324 startup_animation_state = CLEAN_UP;
175 matrix_scan(); 325 }
176 wait_ms(10); 326 }
177 } 327 break;
328
329 case CLEAN_UP:
330 dprintln("sua CLEAN_UP");
331 rgblight_reload_from_eeprom();
332 startup_animation_state = DONE;
333 dprintln("sua DONE");
334 break;
335
336 default:
337 break;
178 } 338 }
179 rgblight_mode_noeeprom(old_mode);
180 } 339 }
181 if (is_enabled) { 340 }
182 rgblight_sethsv_noeeprom(old_hue, old_sat, old_val); 341#endif
183 } else { 342
184 rgblight_disable_noeeprom(); 343 if (change_hue != 0 || change_val != 0 || change_sat != 0) {
185 // Hack! 344 if (timer_elapsed(change_timer) > change_tick) {
186 // rgblight_sethsv_noeeprom() doesn't update these if rgblight is disabled, 345 HSV hsv = rgblight_get_hsv();
187 // but if do it before disabling we get an ugly flash. 346 hsv.h += change_hue;
188 rgblight_config.hue = old_hue; 347 hsv.s = change_sat > 0 ? qadd8(hsv.s, (uint8_t) change_sat) : qsub8(hsv.s, (uint8_t) -change_sat);
189 rgblight_config.sat = old_sat; 348 hsv.v = change_val > 0 ? qadd8(hsv.v, (uint8_t) change_val) : qsub8(hsv.v, (uint8_t) -change_val);
190 rgblight_config.val = old_val; 349 rgblight_sethsv_noeeprom(hsv.h, hsv.s, hsv.v);
350 change_timer = timer_read();
191 } 351 }
192 dprint("done\n"); 352 }
193 startup_animation_done = true; 353}
354
355void shutdown_user_rgb(void) {
356 clear_rgb_layers();
357 rgblight_enable_noeeprom();
358 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
359 for (int i = 0; i < RGBLED_NUM; i++) {
360 rgblight_setrgb_at(0xFF, 0x80 * (i % 2), 0, i);
194 } 361 }
195} 362}
196 363
197layer_state_t default_layer_state_set_user_rgb(layer_state_t state) { 364layer_state_t default_layer_state_set_user_rgb(layer_state_t state) {
198 do_rgb_layers(state, 1u, LAYER_BASE_REGULAR); 365 do_rgb_layers(state, LAYER_BASE_DEFAULT, LAYER_BASE_REGULAR);
199 return state; 366 return state;
200} 367}
201 368
@@ -225,15 +392,45 @@ void rgb_layer_ack(layer_ack_t n) {
225extern keymap_config_t keymap_config; 392extern keymap_config_t keymap_config;
226extern rgblight_config_t rgblight_config; 393extern rgblight_config_t rgblight_config;
227 394
228extern bool spi_gflock;
229extern uint16_t spi_replace_mode;
230
231bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { 395bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
232 if (record->event.pressed) { 396 if (record->event.pressed) {
233 switch (keycode) { 397 switch (keycode) {
234 case SPI_GLO: 398 case SPI_GLO:
235 spidey_glow(); 399 spidey_glow();
236 return false; 400 return false;
401
402 // clang-format off
403 case RGB_HUI: change_timer = timer_read(); change_hue = 1; return false;
404 case RGB_HUD: change_timer = timer_read(); change_hue = -1; return false;
405 case RGB_SAI: change_timer = timer_read(); change_sat = 1; return false;
406 case RGB_SAD: change_timer = timer_read(); change_sat = -1; return false;
407 case RGB_VAI: change_timer = timer_read(); change_val = 1; return false;
408 case RGB_VAD: change_timer = timer_read(); change_val = -1; return false;
409 // clang-format on
410 }
411 } else {
412 bool rgb_done = false;
413 switch (keycode) {
414 case RGB_HUI:
415 case RGB_HUD:
416 change_hue = 0;
417 rgb_done = true;
418 break;
419 case RGB_SAI:
420 case RGB_SAD:
421 change_sat = 0;
422 rgb_done = true;
423 break;
424 case RGB_VAI:
425 case RGB_VAD:
426 change_val = 0;
427 rgb_done = true;
428 break;
429 }
430
431 if (rgb_done) {
432 HSV final = rgblight_get_hsv();
433 rgblight_sethsv(final.h, final.s, final.v);
237 } 434 }
238 } 435 }
239 436
@@ -244,13 +441,12 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
244 switch (keycode) { 441 switch (keycode) {
245 // Acks follow... 442 // Acks follow...
246 case DEBUG: 443 case DEBUG:
247 rgb_layer_ack_yn(debug_enable); 444 if (debug_matrix || debug_keyboard)
248 break; 445 rgb_layer_ack(ACK_HUH);
249 446 else if (debug_enable)
250 case SPI_LNX: 447 rgb_layer_ack(ACK_YES);
251 case SPI_OSX: 448 else
252 case SPI_WIN: 449 rgb_layer_ack(ACK_NO);
253 rgb_layer_ack(ACK_MEH);
254 break; 450 break;
255 451
256 case SPI_GFLOCK: 452 case SPI_GFLOCK:
@@ -280,5 +476,16 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
280 rgb_layer_ack_yn(keymap_config.nkro); 476 rgb_layer_ack_yn(keymap_config.nkro);
281 break; 477 break;
282#endif 478#endif
479
480#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
481 case SPI_LNX:
482 case SPI_OSX:
483 case SPI_WIN:
484 case UC_MOD:
485 case UC_RMOD:
486 rgb_layer_ack(ACK_MEH);
487 do_rgb_unicode();
488 break;
489#endif
283 } 490 }
284} 491}
diff --git a/users/spidey3/rules.mk b/users/spidey3/rules.mk
index 2d4da2294..bd378f545 100644
--- a/users/spidey3/rules.mk
+++ b/users/spidey3/rules.mk
@@ -1,4 +1,6 @@
1BOOTMAGIC_ENABLE = lite 1BOOTMAGIC_ENABLE = lite
2CONSOLE_ENABLE = yes # Console for debug
3BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
2LTO_ENABLE = yes 4LTO_ENABLE = yes
3 5
4SRC += init.c 6SRC += init.c
diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c
index a8dafcb7b..df73c903d 100644
--- a/users/spidey3/spidey3.c
+++ b/users/spidey3/spidey3.c
@@ -14,49 +14,44 @@ static uint32_t matrix_scan_count = 0;
14static bool reported_version = false; 14static bool reported_version = false;
15 15
16# if defined(SPI_DEBUG_SCAN_RATE) 16# if defined(SPI_DEBUG_SCAN_RATE)
17static uint32_t matrix_timer = 0; 17static uint32_t matrix_timer = 0;
18static uint32_t last_matrix_scan_count = 0;
19# endif 18# endif
20 19
20void report_version(void) {
21 uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
22 reported_version = true;
23}
24#endif
25
21void matrix_scan_user(void) { 26void matrix_scan_user(void) {
27#if defined(CONSOLE_ENABLE) && !defined(NO_DEBUG)
22# if defined(SPI_DEBUG_SCAN_RATE) 28# if defined(SPI_DEBUG_SCAN_RATE)
23 matrix_scan_count++; 29 matrix_scan_count++;
24 if (debug_enable) { 30 if (debug_enable) {
25 uint32_t timer_now = timer_read32(); 31 uint32_t timer_now = timer_read32();
26 if (matrix_timer == 0) { 32 if (matrix_timer == 0) {
27 matrix_timer = timer_now; 33 matrix_timer = timer_now;
28 last_matrix_scan_count = matrix_scan_count; 34 matrix_scan_count = 0;
29 matrix_scan_count = 0;
30 } else if (TIMER_DIFF_32(timer_now, matrix_timer) > SPI_SCAN_RATE_INTERVAL * 1000) { 35 } else if (TIMER_DIFF_32(timer_now, matrix_timer) > SPI_SCAN_RATE_INTERVAL * 1000) {
31 matrix_timer = timer_now; 36 matrix_timer = timer_now;
32 last_matrix_scan_count = matrix_scan_count; 37 uprintf("scan rate: %lu/s\n", matrix_scan_count / SPI_SCAN_RATE_INTERVAL);
33 matrix_scan_count = 0; 38 matrix_scan_count = 0;
34 if (!reported_version) { 39 if (!reported_version) report_version();
35 uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
36 reported_version = true;
37 }
38 uprintf("scan rate: %lu/s\n", last_matrix_scan_count / SPI_SCAN_RATE_INTERVAL);
39 } 40 }
40 } 41 }
41# else 42# else
42 if (!reported_version) { 43 if (!reported_version) {
43 matrix_scan_count++; 44 matrix_scan_count++;
44 if (matrix_scan_count > 300) { 45 if (matrix_scan_count > 300) report_version();
45 uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
46 reported_version = true;
47 }
48 } 46 }
49# endif 47# endif
50}
51#endif 48#endif
52 49#ifdef RGBLIGHT_ENABLE
53bool 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) { 50 matrix_scan_user_rgb();
54 uint8_t temp_mod = get_mods();
55#ifndef NO_ACTION_ONESHOT
56 uint8_t temp_osm = get_oneshot_mods();
57#else
58 uint8_t temp_osm = 0;
59#endif 51#endif
52}
53
54bool 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) {
60 if ((((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI))) == 0) { 55 if ((((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI))) == 0) {
61 switch (keycode) { 56 switch (keycode) {
62 case KC_A ... KC_Z: 57 case KC_A ... KC_Z:
@@ -121,21 +116,43 @@ bool process_gflock(uint16_t keycode, keyrecord_t *record) {
121} 116}
122 117
123bool process_record_user(uint16_t keycode, keyrecord_t *record) { 118bool process_record_user(uint16_t keycode, keyrecord_t *record) {
119 dprintf("key event: kc: %02X, col: %02u, row: %02u, pressed: %u mods: %08b "
120#if !defined(NO_ACTION_ONESHOT)
121 "os: %08b "
122#endif
123 "weak: %08b\n",
124 keycode, record->event.key.col, record->event.key.row, record->event.pressed, bitrev(get_mods()),
125#if !defined(NO_ACTION_ONESHOT)
126 bitrev(get_oneshot_mods()),
127#endif
128 bitrev(get_weak_mods()));
129
124 if (!rand_seeded) { 130 if (!rand_seeded) {
125 srand(record->event.time % keycode); 131 srand(record->event.time % keycode);
126 rand_seeded = true; 132 rand_seeded = true;
127 } 133 }
128 134
135 uint8_t mods = get_mods();
136#ifndef NO_ACTION_ONESHOT
137 uint8_t osm = get_oneshot_mods();
138#else
139 uint8_t osm = 0;
140#endif
141
129 if (record->event.pressed) { 142 if (record->event.pressed) {
130 switch (keycode) { 143 switch (keycode) {
131#ifndef NO_DEBUG 144#ifndef NO_DEBUG
132 // Re-implement this here, but fix the persistence! 145 // Re-implement this here, but fix the persistence!
133 case DEBUG: 146 case DEBUG:
134 if (!debug_enable) { 147 if (get_mods() & MOD_MASK_SHIFT) {
148 debug_enable = 0;
149 debug_keyboard = 0;
150 debug_matrix = 0;
151 } else if (!debug_enable) {
135 debug_enable = 1; 152 debug_enable = 1;
136# if defined(SPI_DEBUG_SCAN_RATE) 153# if defined(SPI_DEBUG_SCAN_RATE)
137 matrix_timer = 0; 154 matrix_timer = 0;
138 reported_version = false; 155 report_version();
139# endif 156# endif
140 } else if (!debug_keyboard) { 157 } else if (!debug_keyboard) {
141 debug_keyboard = 1; 158 debug_keyboard = 1;
@@ -157,31 +174,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
157 case CH_ASST: host_consumer_send(AL_ASSISTANT); return false; 174 case CH_ASST: host_consumer_send(AL_ASSISTANT); return false;
158 case CH_SUSP: tap_code16(LGUI(LSFT(KC_L))); return true; 175 case CH_SUSP: tap_code16(LGUI(LSFT(KC_L))); return true;
159 176
160 // clang-format on 177#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
161 178 case SPI_LNX: set_unicode_input_mode(UC_LNX); break;
162 case SPI_LNX: 179 case SPI_OSX: set_unicode_input_mode(UC_OSX); break;
163 dprint("SPI_LNX\n"); 180 case SPI_WIN: set_unicode_input_mode(UC_WINC); break;
164 set_single_persistent_default_layer(_BASE);
165 layer_off(_OSX);
166#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
167 set_unicode_input_mode(UC_LNX);
168#endif 181#endif
169 break; 182 // clang-format on
170 case SPI_OSX:
171 dprint("SPI_OSX\n");
172 set_single_persistent_default_layer(_OSX);
173#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
174 set_unicode_input_mode(UC_OSX);
175#endif
176 break;
177 case SPI_WIN:
178 dprint("SPI_WIN\n");
179 set_single_persistent_default_layer(_BASE);
180 layer_off(_OSX);
181#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
182 set_unicode_input_mode(UC_WINC);
183#endif
184 break;
185 183
186 case SPI_NORMAL ... SPI_FRAKTR: 184 case SPI_NORMAL ... SPI_FRAKTR:
187 spi_replace_mode = (spi_replace_mode == keycode) ? SPI_NORMAL : keycode; 185 spi_replace_mode = (spi_replace_mode == keycode) ? SPI_NORMAL : keycode;
@@ -193,14 +191,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
193 dprintf("spi_gflock = %u\n", spi_gflock); 191 dprintf("spi_gflock = %u\n", spi_gflock);
194 break; 192 break;
195 193
196 case KC_PSCR: { 194 case SPI_KP_00:
197 uint8_t mods = get_mods(); 195 tap_code(KC_KP_0);
198#ifndef NO_ACTION_ONESHOT 196#if TAP_CODE_DELAY > 0
199 uint8_t osm = get_oneshot_mods(); 197 wait_ms(TAP_CODE_DELAY);
200#else
201 uint8_t osm = 0;
202#endif 198#endif
199 register_code(KC_KP_0);
200 return false;
203 201
202 case KC_PSCR: {
203 // It's kind of a hack, but we use unicode input mode
204 // to determine what Print Screen key should do. The
205 // idea here is to make it consistent across hosts.
204 switch (get_unicode_input_mode()) { 206 switch (get_unicode_input_mode()) {
205 case UC_MAC: 207 case UC_MAC:
206 if ((mods | osm) & MOD_MASK_ALT) { 208 if ((mods | osm) & MOD_MASK_ALT) {
@@ -265,6 +267,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
265 case CH_ASST: 267 case CH_ASST:
266 host_consumer_send(0); 268 host_consumer_send(0);
267 return false; 269 return false;
270
271 case SPI_KP_00:
272 unregister_code(KC_KP_0);
273 return false;
268 } 274 }
269 } 275 }
270 276
@@ -273,32 +279,56 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
273 case KC_SPACE: 279 case KC_SPACE:
274 switch (spi_replace_mode) { 280 switch (spi_replace_mode) {
275 case SPI_WIDE: 281 case SPI_WIDE:
276 return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003); 282 return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003, mods, osm);
277 case SPI_SCRIPT: 283 case SPI_SCRIPT:
278 return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002); 284 return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002, mods, osm);
279 case SPI_BLOCKS: 285 case SPI_BLOCKS:
280 return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002); 286 return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002, mods, osm);
281 case SPI_CIRCLE: 287 case SPI_CIRCLE:
282 return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002); 288 return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002, mods, osm);
283 case SPI_SQUARE: 289 case SPI_SQUARE:
284 return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002); 290 return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002, mods, osm);
285 case SPI_PARENS: 291 case SPI_PARENS:
286 return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002); 292 return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002, mods, osm);
287 case SPI_FRAKTR: 293 case SPI_FRAKTR:
288 return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002); 294 return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002, mods, osm);
289 } 295 }
290 break; 296 break;
291 297
292 case KC_F1 ... KC_F12: 298 case KC_F1 ... KC_F12:
293 return process_gflock(keycode, record); 299 return process_gflock(keycode, record);
294 }
295 300
296#ifdef RGBLIGHT_ENABLE 301#ifdef SHIFT_BACKSPACE_DELETE
297 bool res = process_record_user_rgb(keycode, record); 302 case KC_BSPC: {
298 if (!res) return false; 303 static bool delkey_registered;
304 if (record->event.pressed) {
305 if ((mods | osm) & MOD_MASK_SHIFT) {
306 del_mods(MOD_MASK_SHIFT);
307#ifndef NO_ACTION_ONESHOT
308 clear_oneshot_mods();
309#endif
310 register_code(KC_DEL);
311 delkey_registered = true;
312 set_mods(mods);
313 return false;
314 }
315 } else { // on release of KC_BSPC
316 // In case KC_DEL is still being sent even after the release of KC_BSPC
317 if (delkey_registered) {
318 unregister_code(KC_DEL);
319 delkey_registered = false;
320 return false;
321 }
322 }
323 }
299#endif 324#endif
325 }
300 326
327#ifdef RGBLIGHT_ENABLE
328 return process_record_user_rgb(keycode, record);
329#else
301 return true; 330 return true;
331#endif
302} 332}
303 333
304void post_process_record_user(uint16_t keycode, keyrecord_t *record) { 334void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h
index 5bfba4e59..d018e5def 100644
--- a/users/spidey3/spidey3.h
+++ b/users/spidey3/spidey3.h
@@ -8,7 +8,6 @@
8 8
9enum userspace_layers { 9enum userspace_layers {
10 _BASE = 0, 10 _BASE = 0,
11 _OSX,
12 _NUMPAD, 11 _NUMPAD,
13 _FN, 12 _FN,
14}; 13};
@@ -31,6 +30,7 @@ enum custom_keycodes {
31 SPI_PARENS, 30 SPI_PARENS,
32 SPI_FRAKTR, 31 SPI_FRAKTR,
33 SPI_GFLOCK, 32 SPI_GFLOCK,
33 SPI_KP_00,
34}; 34};
35 35
36#ifdef RGBLIGHT_ENABLE 36#ifdef RGBLIGHT_ENABLE
@@ -45,12 +45,14 @@ typedef enum layer_ack {
45 ACK_NO = 0, 45 ACK_NO = 0,
46 ACK_YES, 46 ACK_YES,
47 ACK_MEH, 47 ACK_MEH,
48 ACK_HUH,
48} layer_ack_t; 49} layer_ack_t;
49 50
50# define RGB_LAYER_ACK_DURATION 500 51# define RGB_LAYER_ACK_DURATION 500
51 52
52void eeconfig_init_user_rgb(void); 53void eeconfig_init_user_rgb(void);
53void matrix_init_user_rgb(void); 54void matrix_init_user_rgb(void);
55void matrix_scan_user_rgb(void);
54void keyboard_post_init_user_rgb(void); 56void keyboard_post_init_user_rgb(void);
55bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record); 57bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
56void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record); 58void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
@@ -60,6 +62,7 @@ bool led_update_user_rgb(led_t led_state);
60void rgb_layer_ack(layer_ack_t n); 62void rgb_layer_ack(layer_ack_t n);
61void rgb_layer_ack_yn(bool yn); 63void rgb_layer_ack_yn(bool yn);
62void clear_rgb_layers(void); 64void clear_rgb_layers(void);
65void shutdown_user_rgb(void);
63#endif 66#endif
64 67
65#ifdef UNICODEMAP_ENABLE 68#ifdef UNICODEMAP_ENABLE
diff --git a/users/spidey3/unicode.h b/users/spidey3/unicode.h
index db7824983..6182669fb 100644
--- a/users/spidey3/unicode.h
+++ b/users/spidey3/unicode.h
@@ -23,6 +23,6 @@ enum unicode_names {
23}; 23};
24 24
25# define X_BUL (XP(BUL1, BUL2)) 25# define X_BUL (XP(BUL1, BUL2))
26# define X_DASH (XP(ENDASH, EMDASH)) 26# define X_DASH (XP(EMDASH, ENDASH))
27 27
28#endif 28#endif
diff --git a/users/yanfali/config.h b/users/yanfali/config.h
index 26517a9f6..a39e95c9d 100644
--- a/users/yanfali/config.h
+++ b/users/yanfali/config.h
@@ -2,7 +2,7 @@
2 2
3#ifdef KEYBOARD_evyd13_plain60 3#ifdef KEYBOARD_evyd13_plain60
4 4
5#define B7_AUDIO 5#define AUDIO_PIN B7
6#ifdef AUDIO_ENABLE 6#ifdef AUDIO_ENABLE
7 #define STARTUP_SONG SONG(GUITAR_SOUND) 7 #define STARTUP_SONG SONG(GUITAR_SOUND)
8#endif 8#endif