]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/unicode/keymap.c
Adds support for Planck Rev 6 (#2666)
[qmk_firmware.git] / keyboards / planck / keymaps / unicode / keymap.c
1 /*
2    Copyright
3    2015 Jack Humbert <jack.humb@gmail.com>
4    2016 Francois Marlier <fmarlier@gmail.com>
5
6    This program is free software: you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation, either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19    For more info on how this works per OS, see here
20    https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
21 */
22
23
24 #pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
25 #include "planck.h"
26 #include "action_layer.h"
27 #ifdef AUDIO_ENABLE
28   #include "audio.h"
29 #endif
30 #include "eeconfig.h"
31
32 extern keymap_config_t keymap_config;
33
34 // Each layer gets a name for readability, which is then used in the keymap matrix below.
35 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
36 // Layer names don't all need to be of the same length, obviously, and you can also skip them
37 // entirely and just use numbers.
38 #define _QWERTY 0
39 #define _COLEMAK 1
40 #define _DVORAK 2
41 #define _LOWER 3
42 #define _RAISE 4
43 #define _PLOVER 5
44 #define _ADJUST 16
45
46 // Macro name shortcuts
47 #define QWERTY M(_QWERTY)
48 #define COLEMAK M(_COLEMAK)
49 #define DVORAK M(_DVORAK)
50 #define LOWER M(_LOWER)
51 #define RAISE M(_RAISE)
52 #define M_BL 5
53 #define PLOVER M(12)
54 #define EXT_PLV M(13)
55 #define TOG_OUT M(14)
56
57 // Fillers to make layering more clear
58 #define _______ KC_TRNS
59 #define XXXXXXX KC_NO
60
61
62 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63
64 /* Qwerty
65  * ,-----------------------------------------------------------------------------------.
66  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
67  * |------+------+------+------+------+-------------+------+------+------+------+------|
68  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
69  * |------+------+------+------+------+------|------+------+------+------+------+------|
70  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
71  * |------+------+------+------+------+------+------+------+------+------+------+------|
72  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
73  * `-----------------------------------------------------------------------------------'
74  */
75 [_QWERTY] = {
76   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
77   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
78   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
79   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
80 },
81
82 /* Colemak
83  * ,-----------------------------------------------------------------------------------.
84  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
85  * |------+------+------+------+------+-------------+------+------+------+------+------|
86  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
87  * |------+------+------+------+------+------|------+------+------+------+------+------|
88  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
89  * |------+------+------+------+------+------+------+------+------+------+------+------|
90  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
91  * `-----------------------------------------------------------------------------------'
92  */
93 [_COLEMAK] = {
94   {KC_TAB,  UC_q,    UC_w,    UC_f,    UC_p,    UC_g,    UC_j,    UC_l,    UC_u,    UC_y,    UC_SCLN, UC_BSPC},
95   {KC_ESC,  UC_a,    UC_r,    UC_s,    UC_t,    UC_d,    UC_h,    UC_n,    UC_e,    UC_i,    UC_o,    UC_QUOT},
96   {KC_LSFT, UC_z,    UC_x,    UC_c,    UC_v,    UC_b,    UC_k,    UC_m,    UC_COMM, UC_DOT,  UC_SLSH, KC_ENT},
97   {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
98 },
99
100 /* Dvorak
101  * ,-----------------------------------------------------------------------------------.
102  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
103  * |------+------+------+------+------+-------------+------+------+------+------+------|
104  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
105  * |------+------+------+------+------+------|------+------+------+------+------+------|
106  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
107  * |------+------+------+------+------+------+------+------+------+------+------+------|
108  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
109  * `-----------------------------------------------------------------------------------'
110  */
111 [_DVORAK] = {
112   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
113   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
114   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
115   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
116 },
117
118 /* Lower
119  * ,-----------------------------------------------------------------------------------.
120  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
121  * |------+------+------+------+------+-------------+------+------+------+------+------|
122  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
123  * |------+------+------+------+------+------|------+------+------+------+------+------|
124  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
125  * |------+------+------+------+------+------+------+------+------+------+------+------|
126  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
127  * `-----------------------------------------------------------------------------------'
128  */
129 [_LOWER] = {
130   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
131   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
132   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
133   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
134 },
135
136 /* Raise
137  * ,-----------------------------------------------------------------------------------.
138  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
139  * |------+------+------+------+------+-------------+------+------+------+------+------|
140  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
141  * |------+------+------+------+------+------|------+------+------+------+------+------|
142  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
143  * |------+------+------+------+------+------+------+------+------+------+------+------|
144  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
145  * `-----------------------------------------------------------------------------------'
146  */
147 [_RAISE] = {
148   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
149   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
150   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
151   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
152 },
153
154 /* Plover layer (http://opensteno.org)
155  * ,-----------------------------------------------------------------------------------.
156  * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
157  * |------+------+------+------+------+-------------+------+------+------+------+------|
158  * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
159  * |------+------+------+------+------+------|------+------+------+------+------+------|
160  * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
161  * |------+------+------+------+------+------+------+------+------+------+------+------|
162  * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
163  * `-----------------------------------------------------------------------------------'
164  */
165
166 [_PLOVER] = {
167   {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
168   {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
169   {TOG_OUT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
170   {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
171 },
172
173 /* Adjust (Lower + Raise)
174  * ,-----------------------------------------------------------------------------------.
175  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
176  * |------+------+------+------+------+-------------+------+------+------+------+------|
177  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
178  * |------+------+------+------+------+------|------+------+------+------+------+------|
179  * |      |Voice-|Voice+|Mus on|Musoff|      |      |      |      |      |      |      |
180  * |------+------+------+------+------+------+------+------+------+------+------+------|
181  * |      |      |      |      |      |             |      |      |      |      |      |
182  * `-----------------------------------------------------------------------------------'
183  */
184 [_ADJUST] = {
185   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
186   {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
187   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
188   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
189 }
190
191
192 };
193
194 const uint16_t PROGMEM fn_actions[] = {
195
196 };
197
198 #ifdef AUDIO_ENABLE
199
200 float tone_startup[][2]    = SONG(STARTUP_SOUND);
201 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
202 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
203 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
204 float tone_plover[][2]     = SONG(PLOVER_SOUND);
205 float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
206 float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
207
208 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
209 #endif
210
211
212
213 void persistent_default_layer_set(uint16_t default_layer) {
214   eeconfig_update_default_layer(default_layer);
215   default_layer_set(default_layer);
216 }
217
218 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
219 {
220       switch(id) {
221         case _QWERTY:
222           if (record->event.pressed) {
223             #ifdef AUDIO_ENABLE
224               PLAY_SONG(tone_qwerty);
225             #endif
226             persistent_default_layer_set(1UL<<_QWERTY);
227           }
228           break;
229         case _COLEMAK:
230           if (record->event.pressed) {
231             #ifdef AUDIO_ENABLE
232               PLAY_SONG(tone_colemak);
233             #endif
234             persistent_default_layer_set(1UL<<_COLEMAK);
235           }
236           break;
237         case _DVORAK:
238           if (record->event.pressed) {
239             #ifdef AUDIO_ENABLE
240               PLAY_SONG(tone_dvorak);
241             #endif
242             persistent_default_layer_set(1UL<<_DVORAK);
243           }
244           break;
245         case _LOWER:
246           if (record->event.pressed) {
247             layer_on(_LOWER);
248             update_tri_layer(_LOWER, _RAISE, _ADJUST);
249           } else {
250             layer_off(_LOWER);
251             update_tri_layer(_LOWER, _RAISE, _ADJUST);
252           }
253           break;
254         case _RAISE:
255           if (record->event.pressed) {
256             layer_on(_RAISE);
257             update_tri_layer(_LOWER, _RAISE, _ADJUST);
258           } else {
259             layer_off(_RAISE);
260             update_tri_layer(_LOWER, _RAISE, _ADJUST);
261           }
262           break;
263         case M_BL:
264           if (record->event.pressed) {
265             register_code(KC_RSFT);
266             #ifdef BACKLIGHT_ENABLE
267               backlight_step();
268             #endif
269           } else {
270             unregister_code(KC_RSFT);
271           }
272         break;
273         case 12:
274           if (record->event.pressed) {
275             #ifdef AUDIO_ENABLE
276               stop_all_notes();
277               PLAY_SONG(tone_plover);
278             #endif
279             layer_off(_RAISE);
280             layer_off(_LOWER);
281             layer_off(_ADJUST);
282             layer_on(_PLOVER);
283             if (!eeconfig_is_enabled()) {
284                 eeconfig_init();
285             }
286             keymap_config.raw = eeconfig_read_keymap();
287             keymap_config.nkro = 1;
288             eeconfig_update_keymap(keymap_config.raw);
289           }
290         break;
291         case 13:
292           if (record->event.pressed) {
293             #ifdef AUDIO_ENABLE
294               PLAY_SONG(tone_plover_gb);
295             #endif
296             layer_off(_PLOVER);
297           }
298         break;
299         case 14:
300           if (record->event.pressed) {
301             return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
302           }
303         break;
304       }
305     return MACRO_NONE;
306 };
307
308 void matrix_init_user(void) {
309     #ifdef AUDIO_ENABLE
310         startup_user();
311     #endif
312 }
313
314 #ifdef AUDIO_ENABLE
315
316 void startup_user()
317 {
318     _delay_ms(20); // gets rid of tick
319     PLAY_SONG(tone_startup);
320 }
321
322 void shutdown_user()
323 {
324     PLAY_SONG(tone_goodbye);
325     _delay_ms(150);
326     stop_all_notes();
327 }
328
329 void music_on_user(void)
330 {
331     music_scale_user();
332 }
333
334 void music_scale_user(void)
335 {
336     PLAY_SONG(music_scale);
337 }
338
339 #endif
340