2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / keyboards / planck / keymaps / premek / keymap.c
CommitLineData
5abb05ca 1
26eef35f 2#include QMK_KEYBOARD_H
5abb05ca 3
4extern keymap_config_t keymap_config;
5
6// Each layer gets a name for readability, which is then used in the keymap matrix below.
7// The underscores don't mean anything - you can have a layer called STUFF or any other name.
8// Layer names don't all need to be of the same length, obviously, and you can also skip them
9// entirely and just use numbers.
10#define _QWERTY 0
11#define _COLEMAK 1
12#define _DVORAK 2
13#define _LOWER 3
14#define _RAISE 4
15#define _PLOVER 5
16#define _ADJUST 16
17
18enum planck_keycodes {
19 QWERTY = SAFE_RANGE,
20 COLEMAK,
21 DVORAK,
22 PLOVER,
23 LOWER,
24 RAISE,
25 BACKLIT,
26 EXT_PLV
27};
28
5abb05ca 29const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30
26eef35f
JY
31[_QWERTY] = LAYOUT_planck_grid(
32 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DEL, KC_Y, KC_U, KC_I, KC_O, KC_P ,
33 KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
34 KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
35 KC_LGUI, _______, _______, KC_LALT, LOWER, MT(MOD_LSFT, KC_SPC), KC_ENT, KC_SPC, RAISE, KC_RALT, _______, KC_RGUI
36),
37[_COLEMAK] = LAYOUT_planck_grid(
38 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
39 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
40 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
41 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
42),
43[_DVORAK] = LAYOUT_planck_grid(
44 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
45 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
46 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
47 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
48),
49[_LOWER] = LAYOUT_planck_grid(
50 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_6, KC_7, KC_8, KC_9, KC_0,
51 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
52 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F12, KC_PLUS, KC_PIPE, KC_LCBR, KC_RCBR,
53 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
54),
55[_RAISE] = LAYOUT_planck_grid(
56 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
57 _______, _______, _______, KC_QUOT, KC_MINS, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
58 _______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, _______, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR,
59 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MS_BTN3
60),
5abb05ca 61
26eef35f
JY
62[_PLOVER] = LAYOUT_planck_grid(
63 KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
64 XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
65 XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
66 EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
67),
68[_ADJUST] = LAYOUT_planck_grid(
69 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
70 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
71 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
73)
5abb05ca 74
75
76};
77
78#ifdef AUDIO_ENABLE
79
80float tone_startup[][2] = SONG(STARTUP_SOUND);
81float tone_qwerty[][2] = SONG(QWERTY_SOUND);
82float tone_dvorak[][2] = SONG(DVORAK_SOUND);
83float tone_colemak[][2] = SONG(COLEMAK_SOUND);
84float tone_plover[][2] = SONG(PLOVER_SOUND);
85float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
86float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
87
88float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
89#endif
90
91
8ddbf7f5 92void persistent_default_layer_set(uint16_t default_layer) {
5abb05ca 93 eeconfig_update_default_layer(default_layer);
94 default_layer_set(default_layer);
95}
96
97bool process_record_user(uint16_t keycode, keyrecord_t *record) {
98 switch (keycode) {
99 case QWERTY:
100 if (record->event.pressed) {
101 #ifdef AUDIO_ENABLE
fe60cbd9 102 PLAY_SONG(tone_qwerty);
5abb05ca 103 #endif
8ddbf7f5 104 persistent_default_layer_set(1UL<<_QWERTY);
5abb05ca 105 }
106 return false;
107 break;
108 case COLEMAK:
109 if (record->event.pressed) {
110 #ifdef AUDIO_ENABLE
fe60cbd9 111 PLAY_SONG(tone_colemak);
5abb05ca 112 #endif
8ddbf7f5 113 persistent_default_layer_set(1UL<<_COLEMAK);
5abb05ca 114 }
115 return false;
116 break;
117 case DVORAK:
118 if (record->event.pressed) {
119 #ifdef AUDIO_ENABLE
fe60cbd9 120 PLAY_SONG(tone_dvorak);
5abb05ca 121 #endif
8ddbf7f5 122 persistent_default_layer_set(1UL<<_DVORAK);
5abb05ca 123 }
124 return false;
125 break;
126 case LOWER:
127 if (record->event.pressed) {
128 layer_on(_LOWER);
129 update_tri_layer(_LOWER, _RAISE, _ADJUST);
130 } else {
131 layer_off(_LOWER);
132 update_tri_layer(_LOWER, _RAISE, _ADJUST);
133 }
134 return false;
135 break;
136 case RAISE:
137 if (record->event.pressed) {
138 layer_on(_RAISE);
139 update_tri_layer(_LOWER, _RAISE, _ADJUST);
140 } else {
141 layer_off(_RAISE);
142 update_tri_layer(_LOWER, _RAISE, _ADJUST);
143 }
144 return false;
145 break;
146 case BACKLIT:
147 if (record->event.pressed) {
148 register_code(KC_RSFT);
149 #ifdef BACKLIGHT_ENABLE
150 backlight_step();
151 #endif
152 } else {
153 unregister_code(KC_RSFT);
154 }
155 return false;
156 break;
157 case PLOVER:
158 if (record->event.pressed) {
159 #ifdef AUDIO_ENABLE
160 stop_all_notes();
fe60cbd9 161 PLAY_SONG(tone_plover);
5abb05ca 162 #endif
163 layer_off(_RAISE);
164 layer_off(_LOWER);
165 layer_off(_ADJUST);
166 layer_on(_PLOVER);
167 if (!eeconfig_is_enabled()) {
168 eeconfig_init();
169 }
170 keymap_config.raw = eeconfig_read_keymap();
171 keymap_config.nkro = 1;
172 eeconfig_update_keymap(keymap_config.raw);
173 }
174 return false;
175 break;
176 case EXT_PLV:
177 if (record->event.pressed) {
178 #ifdef AUDIO_ENABLE
fe60cbd9 179 PLAY_SONG(tone_plover_gb);
5abb05ca 180 #endif
181 layer_off(_PLOVER);
182 }
183 return false;
184 break;
185 }
186 return true;
187}
188
189void matrix_init_user(void) {
190 #ifdef AUDIO_ENABLE
191 startup_user();
192 #endif
193}
194
195#ifdef AUDIO_ENABLE
196
197void startup_user()
198{
199 _delay_ms(20); // gets rid of tick
fe60cbd9 200 PLAY_SONG(tone_startup);
5abb05ca 201}
202
203void shutdown_user()
204{
fe60cbd9 205 PLAY_SONG(tone_goodbye);
5abb05ca 206 _delay_ms(150);
207 stop_all_notes();
208}
209
210void music_on_user(void)
211{
212 music_scale_user();
213}
214
215void music_scale_user(void)
216{
fe60cbd9 217 PLAY_SONG(music_scale);
5abb05ca 218}
219
220#endif