aboutsummaryrefslogtreecommitdiff
path: root/users/spidey3/spidey3.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/spidey3/spidey3.c')
-rw-r--r--users/spidey3/spidey3.c271
1 files changed, 229 insertions, 42 deletions
diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c
index 8be99dea0..9d696494f 100644
--- a/users/spidey3/spidey3.c
+++ b/users/spidey3/spidey3.c
@@ -1,80 +1,267 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H
2 2
3#include "spidey3.h" 3#include "spidey3.h"
4#include "version.h"
5#include <stdlib.h>
4 6
5bool process_record_user(uint16_t keycode, keyrecord_t *record) { 7static bool rand_seeded = false;
6 8
7// If console is enabled, it will print the matrix position and status of each key pressed 9uint16_t spi_replace_mode = SPI_NORMAL;
8// dprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); 10bool spi_gflock = false;
9 11
10 if (record->event.pressed) { 12#if defined(CONSOLE_ENABLE) && !defined(NO_DEBUG)
11 switch (keycode) { 13static uint32_t matrix_scan_count = 0;
12#ifndef NO_DEBUG 14static bool reported_version = false;
13 // Re-implement this here, but fix the persistence! 15
14 case DEBUG: 16# if defined(SPI_DEBUG_SCAN_RATE)
15 debug_enable ^= 1; 17static uint32_t matrix_timer = 0;
16 if (debug_enable) { 18static uint32_t last_matrix_scan_count = 0;
17 print("DEBUG: enabled.\n"); 19# endif
18 } else { 20
19 print("DEBUG: disabled.\n"); 21void matrix_scan_user(void) {
22# if defined(SPI_DEBUG_SCAN_RATE)
23 matrix_scan_count++;
24 if (debug_enable) {
25 uint32_t timer_now = timer_read32();
26 if (matrix_timer == 0) {
27 matrix_timer = timer_now;
28 last_matrix_scan_count = matrix_scan_count;
29 matrix_scan_count = 0;
30 } else if (TIMER_DIFF_32(timer_now, matrix_timer) > SPI_SCAN_RATE_INTERVAL * 1000) {
31 matrix_timer = timer_now;
32 last_matrix_scan_count = matrix_scan_count;
33 matrix_scan_count = 0;
34 if (!reported_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 }
41# else
42 if (!reported_version) {
43 matrix_scan_count++;
44 if (matrix_scan_count > 300) {
45 uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
46 reported_version = true;
20 } 47 }
21 eeconfig_update_debug(debug_config.raw); 48 }
49# endif
50}
51#endif
52
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) {
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
60 if ((((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI))) == 0) {
61 switch (keycode) {
62 case KC_A ... KC_Z:
63 if (record->event.pressed) {
64 clear_mods();
65#ifndef NO_ACTION_ONESHOT
66 clear_oneshot_mods();
67#endif
68
69 unicode_input_start();
70 uint32_t base = ((temp_mod | temp_osm) & MOD_MASK_SHIFT) ? baseAlphaUpper : baseAlphaLower;
71 register_hex32(base + (keycode - KC_A));
72 unicode_input_finish();
73
74 set_mods(temp_mod);
75 }
76 return false;
77 case KC_0:
78 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) { // skip shifted numbers, so that we can still use symbols etc.
79 return true;
80 }
81 if (record->event.pressed) {
82 unicode_input_start();
83 register_hex32(zeroGlyph);
84 unicode_input_finish();
85 }
86 return false;
87 case KC_1 ... KC_9:
88 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) { // skip shifted numbers, so that we can still use symbols etc.
89 return true;
90 }
91 if (record->event.pressed) {
92 unicode_input_start();
93 register_hex32(baseNumberOne + (keycode - KC_1));
94 unicode_input_finish();
95 }
96 return false;
97 case KC_SPACE:
98 if (record->event.pressed) {
99 unicode_input_start();
100 register_hex32(spaceGlyph); // em space
101 unicode_input_finish();
102 }
103 return false;
104 }
105 }
106
107 return true;
108}
109
110bool process_gflock(uint16_t keycode, keyrecord_t *record) {
111 if (!spi_gflock) {
112 return true;
113 }
114
115 if (record->event.pressed) {
116 register_code16(G(keycode));
117 } else {
118 unregister_code16(G(keycode));
119 }
120 return false;
121}
122
123bool process_record_user(uint16_t keycode, keyrecord_t *record) {
124 if (!rand_seeded) {
125 srand(record->event.time % keycode);
126 rand_seeded = true;
127 }
128
129 if (record->event.pressed) {
130 switch (keycode) {
131#ifndef NO_DEBUG
132 // Re-implement this here, but fix the persistence!
133 case DEBUG:
134 if (!debug_enable) {
135 debug_enable = 1;
136# if defined(SPI_DEBUG_SCAN_RATE)
137 matrix_timer = 0;
138 reported_version = false;
139# endif
140 } else if (!debug_keyboard) {
141 debug_keyboard = 1;
142 } else if (!debug_matrix) {
143 debug_matrix = 1;
144 } else {
145 debug_enable = 0;
146 debug_keyboard = 0;
147 debug_matrix = 0;
148 }
149 uprintf("DEBUG: enable=%u, keyboard=%u, matrix=%u\n", debug_enable, debug_keyboard, debug_matrix);
150 eeconfig_update_debug(debug_config.raw);
151 return false;
22#endif 152#endif
23 break; 153
24 case SPI_LNX: 154 // clang-format off
25 dprint("SPI_LNX\n"); 155
26 set_single_persistent_default_layer(_BASE); 156 case CH_CPNL: host_consumer_send(AL_CONTROL_PANEL); return false;
27 layer_off(_OSX); 157 case CH_ASST: host_consumer_send(AL_ASSISTANT); return false;
158 case CH_SUSP: tap_code16(LGUI(LSFT(KC_L))); return true;
159
160 // clang-format on
161
162 case SPI_LNX:
163 dprint("SPI_LNX\n");
164 set_single_persistent_default_layer(_BASE);
165 layer_off(_OSX);
28#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) 166#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
29 set_unicode_input_mode(UC_LNX); 167 set_unicode_input_mode(UC_LNX);
30#endif 168#endif
31 break; 169 break;
32 case SPI_OSX: 170 case SPI_OSX:
33 dprint("SPI_OSX\n"); 171 dprint("SPI_OSX\n");
34 set_single_persistent_default_layer(_OSX); 172 set_single_persistent_default_layer(_OSX);
35#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) 173#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
36 set_unicode_input_mode(UC_OSX); 174 set_unicode_input_mode(UC_OSX);
37#endif 175#endif
38 break; 176 break;
39 case SPI_WIN: 177 case SPI_WIN:
40 dprint("SPI_WIN\n"); 178 dprint("SPI_WIN\n");
41 set_single_persistent_default_layer(_BASE); 179 set_single_persistent_default_layer(_BASE);
42 layer_off(_OSX); 180 layer_off(_OSX);
43#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) 181#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
44 set_unicode_input_mode(UC_WINC); 182 set_unicode_input_mode(UC_WINC);
45#endif 183#endif
46 break; 184 break;
185
186 case SPI_NORMAL ... SPI_FRAKTR:
187 spi_replace_mode = (spi_replace_mode == keycode) ? SPI_NORMAL : keycode;
188 dprintf("spi_replace_mode = %u\n", spi_replace_mode);
189 break;
190
191 case SPI_GFLOCK:
192 spi_gflock = !spi_gflock;
193 dprintf("spi_gflock = %u\n", spi_gflock);
194 break;
195 }
196 } else {
197 switch (keycode) {
198 case CH_CPNL:
199 case CH_ASST:
200 host_consumer_send(0);
201 return false;
202 }
203 }
204
205 switch (keycode) {
206 case KC_A ... KC_0:
207 case KC_SPACE:
208 switch (spi_replace_mode) {
209 case SPI_WIDE:
210 return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003);
211 case SPI_SCRIPT:
212 return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002);
213 case SPI_BLOCKS:
214 return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002);
215 case SPI_CIRCLE:
216 return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002);
217 case SPI_SQUARE:
218 return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002);
219 case SPI_PARENS:
220 return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002);
221 case SPI_FRAKTR:
222 return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002);
223 }
224 break;
225
226 case KC_F1 ... KC_F24:
227 return process_gflock(keycode, record);
47 } 228 }
48 }
49 229
50#ifdef RGBLIGHT_ENABLE 230#ifdef RGBLIGHT_ENABLE
51 bool res = process_record_user_rgb(keycode, record); 231 bool res = process_record_user_rgb(keycode, record);
52 if (res) return true; 232 if (!res) return false;
53#endif 233#endif
54 234
55 return false; 235 return true;
236}
237
238void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
239#ifdef RGBLIGHT_ENABLE
240 post_process_record_user_rgb(keycode, record);
241#endif
242 return;
56} 243}
57 244
58layer_state_t default_layer_state_set_user(layer_state_t state) { 245layer_state_t default_layer_state_set_user(layer_state_t state) {
59#ifdef RGBLIGHT_ENABLE 246#ifdef RGBLIGHT_ENABLE
60 return default_layer_state_set_user_rgb(state); 247 return default_layer_state_set_user_rgb(state);
61#else 248#else
62 return state; 249 return state;
63#endif 250#endif
64} 251}
65 252
66layer_state_t layer_state_set_user(layer_state_t state) { 253layer_state_t layer_state_set_user(layer_state_t state) {
67#ifdef RGBLIGHT_ENABLE 254#ifdef RGBLIGHT_ENABLE
68 return layer_state_set_user_rgb(state); 255 return layer_state_set_user_rgb(state);
69#else 256#else
70 return state; 257 return state;
71#endif 258#endif
72} 259}
73 260
74bool led_update_user(led_t led_state) { 261bool led_update_user(led_t led_state) {
75#ifdef RGBLIGHT_ENABLE 262#ifdef RGBLIGHT_ENABLE
76 return led_update_user_rgb(led_state); 263 return led_update_user_rgb(led_state);
77#else 264#else
78 return true; 265 return true;
79#endif 266#endif
80} 267}