aboutsummaryrefslogtreecommitdiff
path: root/keyboards/keebio/viterbi/keymaps/dwallace/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/keebio/viterbi/keymaps/dwallace/keymap.c')
-rw-r--r--keyboards/keebio/viterbi/keymaps/dwallace/keymap.c223
1 files changed, 223 insertions, 0 deletions
diff --git a/keyboards/keebio/viterbi/keymaps/dwallace/keymap.c b/keyboards/keebio/viterbi/keymaps/dwallace/keymap.c
new file mode 100644
index 000000000..5a797cb0b
--- /dev/null
+++ b/keyboards/keebio/viterbi/keymaps/dwallace/keymap.c
@@ -0,0 +1,223 @@
1#include "viterbi.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4#ifdef RGBLIGHT_ENABLE
5#include "rgblight.h"
6#endif
7
8extern keymap_config_t keymap_config;
9
10#define _QWERTY 0
11#define _FN 1
12
13enum custom_keycodes {
14 QWERTY = SAFE_RANGE,
15 STK_SHIFT,
16 STK_CTRL,
17 STK_ALT,
18 STK_GUI,
19 STK_META,
20 STK_CLEAR,
21 RGB_LEVEL_UP,
22 RGB_LEVEL_DOWN,
23};
24
25#define KC_ KC_TRNS
26
27#define KC_SWIN LGUI(KC_TILD) // Switch between windows
28#define KC_SAPP LGUI(KC_TAB) // Switch between applications
29#define KC_FN1 MO(_FN)
30#define KC_LCAG LCAG(KC_NO)
31#define KC_RTOG RGB_TOG
32#define KC_RGUP RGB_LEVEL_UP
33#define KC_RGDN RGB_LEVEL_DOWN
34#define KC_RST RESET
35#define KC_SSFT STK_SHIFT
36#define KC_SCTL STK_CTRL
37#define KC_SALT STK_ALT
38#define KC_SGUI STK_GUI
39#define KC_SMTA STK_META
40#define KC_SCLR STK_CLEAR
41
42const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43
44 [_QWERTY] = LAYOUT_kc(
45 //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
46 GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,BSPC,
47 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
48 TAB , Q , W , E , R , T ,LBRC, Y , U , I , O , P ,BSLS,PGUP,
49 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
50 ESC , A , S , D , F , G ,RBRC, H , J , K , L ,SCLN,QUOT,ENT ,
51 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
52 SSFT, Z , X , C , V , B ,SWIN, N , M ,COMM,DOT , UP ,SLSH,RSFT,
53 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
54 SCTL,SMTA,SALT,SGUI,SPC ,SCLR,SAPP, FN1 ,SPC ,RGUI,LEFT,DOWN,RGHT,PGDN
55 //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----'
56 ),
57
58 [_FN] = LAYOUT_kc(
59 //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
60 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , ,
61 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
62 , , , ,RST , , , , , , , , , ,
63 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
64 , , , , , , , RTOG, ,RGDN,RGUP, , , ,
65 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
66 , , , , , , , ,MUTE,VOLD,VOLU, , , ,
67 //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
68 , , , , , , , , , , , , ,
69 //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----'
70 )
71
72};
73
74#ifdef AUDIO_ENABLE
75float tone_qwerty[][2] = SONG(QWERTY_SOUND);
76#endif
77
78void persistent_default_layer_set(uint16_t default_layer) {
79 eeconfig_update_default_layer(default_layer);
80 default_layer_set(default_layer);
81}
82
83bool modifier_already_applied = false;
84uint8_t physically_held_modifiers = 0;
85uint8_t last_mods = 0xFF;
86uint8_t rgb_dimming = 0;
87#define SET_LED_RGB(val, led_num) setrgb(((val >> 16) & 0xFF) >> rgb_dimming, ((val >> 8) & 0xFF) >> rgb_dimming, (val & 0xFF) >> rgb_dimming, (LED_TYPE *)&led[led_num])
88
89void update_underglow_level(void) {
90 if (get_mods() == last_mods)
91 return;
92
93 last_mods = get_mods();
94
95 if (get_mods() == 0) {
96 uint8_t level = 0x10 >> rgb_dimming;
97 rgblight_setrgb(level, level, level);
98 return;
99 }
100
101 uint32_t mod_colors[4] = {0};
102 uint8_t mod_count = 0;
103 rgblight_setrgb(0x00, 0x00, 0x00);
104
105 if (get_mods() & MOD_BIT(KC_LSFT))
106 mod_colors[mod_count++] = 0xFF0000;
107 if (get_mods() & MOD_BIT(KC_LCTL))
108 mod_colors[mod_count++] = 0x00FF00;
109 if (get_mods() & MOD_BIT(KC_LALT))
110 mod_colors[mod_count++] = 0x0000FF;
111 if (get_mods() & MOD_BIT(KC_LGUI))
112 mod_colors[mod_count++] = 0xFFFF00;
113
114 uint8_t led_num = 0;
115 for (int m = 0; m < mod_count; m++) {
116 for (; led_num < RGBLED_NUM*(m+1)/mod_count; led_num++) {
117 SET_LED_RGB(mod_colors[m], led_num);
118 }
119 }
120 rgblight_set();
121}
122
123void add_sticky_modifier(uint16_t keycode) {
124 add_mods(MOD_BIT(keycode));
125 register_code(keycode);
126 modifier_already_applied = false;
127}
128
129void clear_sticky_modifiers(void) {
130 unregister_code(KC_LSFT);
131 unregister_code(KC_LCTL);
132 unregister_code(KC_LALT);
133 unregister_code(KC_LGUI);
134 update_underglow_level();
135}
136
137void handle_sticky_modifier_event(uint16_t keycode, bool pressed) {
138 if (pressed) {
139 add_sticky_modifier(keycode);
140 physically_held_modifiers |= MOD_BIT(keycode);
141 } else {
142 del_mods(MOD_BIT(keycode));
143 physically_held_modifiers &= ~MOD_BIT(keycode);
144 if (modifier_already_applied) {
145 clear_sticky_modifiers();
146 } else {
147 add_sticky_modifier(keycode);
148 }
149 }
150 update_underglow_level();
151}
152
153bool process_record_user(uint16_t keycode, keyrecord_t *record) {
154 switch (keycode) {
155 case QWERTY:
156 if (record->event.pressed) {
157 #ifdef AUDIO_ENABLE
158 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
159 #endif
160 persistent_default_layer_set(1UL<<_QWERTY);
161 }
162 return false;
163 break;
164 case STK_SHIFT:
165 handle_sticky_modifier_event(KC_LSFT, record->event.pressed);
166 return false;
167 break;
168 case STK_CTRL:
169 handle_sticky_modifier_event(KC_LCTL, record->event.pressed);
170 return false;
171 break;
172 case STK_ALT:
173 handle_sticky_modifier_event(KC_LALT, record->event.pressed);
174 return false;
175 break;
176 case STK_GUI:
177 handle_sticky_modifier_event(KC_LGUI, record->event.pressed);
178 return false;
179 break;
180 case STK_META:
181 handle_sticky_modifier_event(KC_LCTL, record->event.pressed);
182 handle_sticky_modifier_event(KC_LALT, record->event.pressed);
183 handle_sticky_modifier_event(KC_LGUI, record->event.pressed);
184 return false;
185 break;
186 case STK_CLEAR:
187 if (record->event.pressed) {
188 clear_sticky_modifiers();
189 }
190 return false;
191 break;
192 case RGB_LEVEL_DOWN:
193 if (record->event.pressed && rgb_dimming < 8) {
194 rgb_dimming++;
195 }
196 return false;
197 break;
198 case RGB_LEVEL_UP:
199 if (record->event.pressed && rgb_dimming > 0) {
200 rgb_dimming--;
201 }
202 return false;
203 break;
204 }
205 if (!record->event.pressed && IS_KEY(keycode)) {
206 modifier_already_applied = true;
207 if (physically_held_modifiers == 0)
208 clear_sticky_modifiers();
209 }
210 return true;
211}
212
213void matrix_init_user(void) {
214 #ifdef RGBLIGHT_ENABLE
215 rgblight_enable();
216 #endif //RGBLIGHT_ENABLE
217}
218
219void matrix_scan_user(void) {
220 #ifdef RGBLIGHT_ENABLE
221 update_underglow_level();
222 #endif //RGBLIGHT_ENABLE
223}