2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / keyboards / planck / keymaps / emilyh / keymap.c
1 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2 // this is the style you want to emulate.
3
4 #include QMK_KEYBOARD_H
5
6 extern keymap_config_t keymap_config;
7
8 // Each layer gets a name for readability, which is then used in the keymap matrix below.
9 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
10 // Layer names don't all need to be of the same length, obviously, and you can also skip them
11 // entirely and just use numbers.
12
13 enum planck_layers {
14 _QWERTY,
15 _COLEMAK,
16 _DVORAK,
17 _LOWER,
18 _RAISE,
19 _PLOVER,
20 _ADJUST
21 };
22
23 enum planck_keycodes {
24 QWERTY = SAFE_RANGE,
25 COLEMAK,
26 DVORAK,
27 PLOVER,
28 LOWER,
29 RAISE,
30 BACKLIT,
31 EXT_PLV
32 };
33
34 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35
36 /* Qwerty
37 * ,-----------------------------------------------------------------------------------.
38 * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
39 * |------+------+------+------+------+-------------+------+------+------+------+------|
40 * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
41 * |------+------+------+------+------+------|------+------+------+------+------+------|
42 * | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter |
43 * |------+------+------+------+------+------+------+------+------+------+------+------|
44 * | Ctrl | Brite| GUI | Alt |Lower | Space |Raise | / | Left | Down |Right |
45 * `-----------------------------------------------------------------------------------'
46 */
47 [_QWERTY] = LAYOUT_planck_grid(
48 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
49 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
50 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT ,
51 KC_LCTL, BACKLIT, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
52 ),
53
54 /* Colemak
55 * ,-----------------------------------------------------------------------------------.
56 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
57 * |------+------+------+------+------+-------------+------+------+------+------+------|
58 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
59 * |------+------+------+------+------+------|------+------+------+------+------+------|
60 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
61 * |------+------+------+------+------+------+------+------+------+------+------+------|
62 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
63 * `-----------------------------------------------------------------------------------'
64 */
65 [_COLEMAK] = LAYOUT_planck_grid(
66 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
67 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
68 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
69 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
70 ),
71
72 /* Dvorak
73 * ,-----------------------------------------------------------------------------------.
74 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
75 * |------+------+------+------+------+-------------+------+------+------+------+------|
76 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
77 * |------+------+------+------+------+------|------+------+------+------+------+------|
78 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
79 * |------+------+------+------+------+------+------+------+------+------+------+------|
80 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
81 * `-----------------------------------------------------------------------------------'
82 */
83 [_DVORAK] = LAYOUT_planck_grid(
84 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
85 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
86 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
87 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
88 ),
89
90 /* Lower
91 * ,-----------------------------------------------------------------------------------.
92 * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
93 * |------+------+------+------+------+-------------+------+------+------+------+------|
94 * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
95 * |------+------+------+------+------+------|------+------+------+------+------+------|
96 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ | Home | Next | Vol+ | Mute |
97 * |------+------+------+------+------+------+------+------+------+------+------+------|
98 * | | | | | | | | End | Prev | Vol- | Play |
99 * `-----------------------------------------------------------------------------------'
100 */
101 [_LOWER] = LAYOUT_planck_grid(
102 _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
103 KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
104 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), KC_HOME, KC_MNXT, KC_VOLU, KC_MUTE,
105 _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_MPRV, KC_VOLD, KC_MPLY
106 ),
107
108 /* Raise
109 * ,-----------------------------------------------------------------------------------.
110 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
111 * |------+------+------+------+------+-------------+------+------+------+------+------|
112 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
113 * |------+------+------+------+------+------|------+------+------+------+------+------|
114 * | | F7 | F8 | F9 | F10 | F11 | F12 |Plover|Pg Up | Next | Vol+ | Mute |
115 * |------+------+------+------+------+------+------+------+------+------+------+------|
116 * | | | | | | | |Pg Dn | Prev | Vol- | Play |
117 * `-----------------------------------------------------------------------------------'
118 */
119 [_RAISE] = LAYOUT_planck_grid(
120 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
121 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
122 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TO(_PLOVER), KC_PGUP, KC_MNXT, KC_VOLU, KC_MUTE,
123 _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_MPRV, KC_VOLD, KC_MPLY
124 ),
125
126 /* Numpad Layer
127 * ,-----------------------------------------------------------------------------------.
128 * | ESC | | | ( | ) | | | 7 | 8 | 9 | + | Bksp |
129 * |------+------+------+------+------+-------------+------+------+------+------+------|
130 * | Tab | + | - | * | / | | | 4 | 5 | 6 | - | |
131 * |------+------+------+------+------+------|------+------+------+------+------+------|
132 * | | | Up | | | | | 1 | 2 | 3 | Up | |
133 * |------+------+------+------+------+------+------+------+------+------+------+------|
134 * |ToQrty| Left | Down |Right | | Space | 0 | . | Left | Down |Right |
135 * `-----------------------------------------------------------------------------------'
136 */
137
138 [_PLOVER] = LAYOUT_planck_grid(
139 KC_ESC , XXXXXXX, XXXXXXX, KC_LPRN, KC_RPRN,XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_BSPC,
140 KC_TAB , KC_PPLS, KC_PMNS, KC_PAST, KC_PSLS,XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX,
141 XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_UP, _______,
142 TO(_QWERTY),KC_LEFT,KC_DOWN,KC_RGHT,XXXXXXX, KC_SPC, KC_SPC, KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT
143 ),
144
145 /* Adjust (Lower + Raise)
146 * ,-----------------------------------------------------------------------------------.
147 * | | Reset| | | | | | | | | | Del |
148 * |------+------+------+------+------+-------------+------+------+------+------+------|
149 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
150 * |------+------+------+------+------+------|------+------+------+------+------+------|
151 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
152 * |------+------+------+------+------+------+------+------+------+------+------+------|
153 * | | | | | | | | | | | |
154 * `-----------------------------------------------------------------------------------'
155 */
156 [_ADJUST] = LAYOUT_planck_grid(
157 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
158 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
159 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
160 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
161 )
162
163
164 };
165
166 #ifdef AUDIO_ENABLE
167
168 float tone_startup[][2] = SONG(STARTUP_SOUND);
169 float tone_qwerty[][2] = SONG(QWERTY_SOUND);
170 float tone_dvorak[][2] = SONG(DVORAK_SOUND);
171 float tone_colemak[][2] = SONG(COLEMAK_SOUND);
172 float tone_plover[][2] = SONG(PLOVER_SOUND);
173 float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
174 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
175
176 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
177 #endif
178
179
180 void persistant_default_layer_set(uint16_t default_layer) {
181 eeconfig_update_default_layer(default_layer);
182 default_layer_set(default_layer);
183 }
184
185 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
186 switch (keycode) {
187 case QWERTY:
188 if (record->event.pressed) {
189 #ifdef AUDIO_ENABLE
190 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
191 #endif
192 persistant_default_layer_set(1UL<<_QWERTY);
193 }
194 return false;
195 break;
196 case COLEMAK:
197 if (record->event.pressed) {
198 #ifdef AUDIO_ENABLE
199 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
200 #endif
201 persistant_default_layer_set(1UL<<_COLEMAK);
202 }
203 return false;
204 break;
205 case DVORAK:
206 if (record->event.pressed) {
207 #ifdef AUDIO_ENABLE
208 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
209 #endif
210 persistant_default_layer_set(1UL<<_DVORAK);
211 }
212 return false;
213 break;
214 case LOWER:
215 if (record->event.pressed) {
216 layer_on(_LOWER);
217 update_tri_layer(_LOWER, _RAISE, _ADJUST);
218 } else {
219 layer_off(_LOWER);
220 update_tri_layer(_LOWER, _RAISE, _ADJUST);
221 }
222 return false;
223 break;
224 case RAISE:
225 if (record->event.pressed) {
226 layer_on(_RAISE);
227 update_tri_layer(_LOWER, _RAISE, _ADJUST);
228 } else {
229 layer_off(_RAISE);
230 update_tri_layer(_LOWER, _RAISE, _ADJUST);
231 }
232 return false;
233 break;
234 case BACKLIT:
235 if (record->event.pressed) {
236 register_code(KC_RSFT);
237 #ifdef BACKLIGHT_ENABLE
238 backlight_step();
239 #endif
240 } else {
241 unregister_code(KC_RSFT);
242 }
243 return false;
244 break;
245 case PLOVER:
246 if (record->event.pressed) {
247 #ifdef AUDIO_ENABLE
248 stop_all_notes();
249 PLAY_NOTE_ARRAY(tone_plover, false, 0);
250 #endif
251 layer_off(_RAISE);
252 layer_off(_LOWER);
253 layer_off(_ADJUST);
254 layer_on(_PLOVER);
255 if (!eeconfig_is_enabled()) {
256 eeconfig_init();
257 }
258 keymap_config.raw = eeconfig_read_keymap();
259 keymap_config.nkro = 1;
260 eeconfig_update_keymap(keymap_config.raw);
261 }
262 return false;
263 break;
264 case EXT_PLV:
265 if (record->event.pressed) {
266 #ifdef AUDIO_ENABLE
267 PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
268 #endif
269 layer_off(_PLOVER);
270 }
271 return false;
272 break;
273 }
274 return true;
275 }
276
277 void matrix_init_user(void) {
278 #ifdef AUDIO_ENABLE
279 startup_user();
280 #endif
281 }
282
283 #ifdef AUDIO_ENABLE
284
285 void startup_user()
286 {
287 _delay_ms(20); // gets rid of tick
288 PLAY_NOTE_ARRAY(tone_startup, false, 0);
289 }
290
291 void shutdown_user()
292 {
293 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
294 _delay_ms(150);
295 stop_all_notes();
296 }
297
298 void music_on_user(void)
299 {
300 music_scale_user();
301 }
302
303 void music_scale_user(void)
304 {
305 PLAY_NOTE_ARRAY(music_scale, false, 0);
306 }
307
308 #endif