]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/unicode/keymap.c
[Keyboard] Add QMK configurator JSON for Alice PCB (#6397)
[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 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
58
59 /* Qwerty
60  * ,-----------------------------------------------------------------------------------.
61  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
62  * |------+------+------+------+------+-------------+------+------+------+------+------|
63  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
64  * |------+------+------+------+------+------|------+------+------+------+------+------|
65  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
66  * |------+------+------+------+------+------+------+------+------+------+------+------|
67  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
68  * `-----------------------------------------------------------------------------------'
69  */
70 [_QWERTY] = {
71   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
72   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
73   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
74   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
75 },
76
77 /* Colemak
78  * ,-----------------------------------------------------------------------------------.
79  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
80  * |------+------+------+------+------+-------------+------+------+------+------+------|
81  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
82  * |------+------+------+------+------+------|------+------+------+------+------+------|
83  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
84  * |------+------+------+------+------+------+------+------+------+------+------+------|
85  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
86  * `-----------------------------------------------------------------------------------'
87  */
88 [_COLEMAK] = {
89   {KC_TAB,  UC_q,    UC_w,    UC_f,    UC_p,    UC_g,    UC_j,    UC_l,    UC_u,    UC_y,    UC_SCLN, UC_BSPC},
90   {KC_ESC,  UC_a,    UC_r,    UC_s,    UC_t,    UC_d,    UC_h,    UC_n,    UC_e,    UC_i,    UC_o,    UC_QUOT},
91   {KC_LSFT, UC_z,    UC_x,    UC_c,    UC_v,    UC_b,    UC_k,    UC_m,    UC_COMM, UC_DOT,  UC_SLSH, KC_ENT},
92   {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
93 },
94
95 /* Dvorak
96  * ,-----------------------------------------------------------------------------------.
97  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
98  * |------+------+------+------+------+-------------+------+------+------+------+------|
99  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
100  * |------+------+------+------+------+------|------+------+------+------+------+------|
101  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
102  * |------+------+------+------+------+------+------+------+------+------+------+------|
103  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
104  * `-----------------------------------------------------------------------------------'
105  */
106 [_DVORAK] = {
107   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
108   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
109   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
110   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
111 },
112
113 /* Lower
114  * ,-----------------------------------------------------------------------------------.
115  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
116  * |------+------+------+------+------+-------------+------+------+------+------+------|
117  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
118  * |------+------+------+------+------+------|------+------+------+------+------+------|
119  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
120  * |------+------+------+------+------+------+------+------+------+------+------+------|
121  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
122  * `-----------------------------------------------------------------------------------'
123  */
124 [_LOWER] = {
125   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
126   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
127   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
128   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
129 },
130
131 /* Raise
132  * ,-----------------------------------------------------------------------------------.
133  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
134  * |------+------+------+------+------+-------------+------+------+------+------+------|
135  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
136  * |------+------+------+------+------+------|------+------+------+------+------+------|
137  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
138  * |------+------+------+------+------+------+------+------+------+------+------+------|
139  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
140  * `-----------------------------------------------------------------------------------'
141  */
142 [_RAISE] = {
143   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
144   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
145   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
146   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
147 },
148
149 /* Plover layer (http://opensteno.org)
150  * ,-----------------------------------------------------------------------------------.
151  * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
152  * |------+------+------+------+------+-------------+------+------+------+------+------|
153  * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
154  * |------+------+------+------+------+------|------+------+------+------+------+------|
155  * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
156  * |------+------+------+------+------+------+------+------+------+------+------+------|
157  * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
158  * `-----------------------------------------------------------------------------------'
159  */
160
161 [_PLOVER] = {
162   {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
163   {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
164   {TOG_OUT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
165   {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
166 },
167
168 /* Adjust (Lower + Raise)
169  * ,-----------------------------------------------------------------------------------.
170  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
171  * |------+------+------+------+------+-------------+------+------+------+------+------|
172  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
173  * |------+------+------+------+------+------|------+------+------+------+------+------|
174  * |      |Voice-|Voice+|Mus on|Musoff|      |      |      |      |      |      |      |
175  * |------+------+------+------+------+------+------+------+------+------+------+------|
176  * |      |      |      |      |      |             |      |      |      |      |      |
177  * `-----------------------------------------------------------------------------------'
178  */
179 [_ADJUST] = {
180   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
181   {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
182   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
183   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
184 }
185
186
187 };
188
189 #ifdef AUDIO_ENABLE
190
191 float tone_startup[][2]    = SONG(STARTUP_SOUND);
192 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
193 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
194 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
195 float tone_plover[][2]     = SONG(PLOVER_SOUND);
196 float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
197 float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
198
199 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
200 #endif
201
202
203
204 void persistent_default_layer_set(uint16_t default_layer) {
205   eeconfig_update_default_layer(default_layer);
206   default_layer_set(default_layer);
207 }
208
209 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
210 {
211       switch(id) {
212         case _QWERTY:
213           if (record->event.pressed) {
214             #ifdef AUDIO_ENABLE
215               PLAY_SONG(tone_qwerty);
216             #endif
217             persistent_default_layer_set(1UL<<_QWERTY);
218           }
219           break;
220         case _COLEMAK:
221           if (record->event.pressed) {
222             #ifdef AUDIO_ENABLE
223               PLAY_SONG(tone_colemak);
224             #endif
225             persistent_default_layer_set(1UL<<_COLEMAK);
226           }
227           break;
228         case _DVORAK:
229           if (record->event.pressed) {
230             #ifdef AUDIO_ENABLE
231               PLAY_SONG(tone_dvorak);
232             #endif
233             persistent_default_layer_set(1UL<<_DVORAK);
234           }
235           break;
236         case _LOWER:
237           if (record->event.pressed) {
238             layer_on(_LOWER);
239             update_tri_layer(_LOWER, _RAISE, _ADJUST);
240           } else {
241             layer_off(_LOWER);
242             update_tri_layer(_LOWER, _RAISE, _ADJUST);
243           }
244           break;
245         case _RAISE:
246           if (record->event.pressed) {
247             layer_on(_RAISE);
248             update_tri_layer(_LOWER, _RAISE, _ADJUST);
249           } else {
250             layer_off(_RAISE);
251             update_tri_layer(_LOWER, _RAISE, _ADJUST);
252           }
253           break;
254         case M_BL:
255           if (record->event.pressed) {
256             register_code(KC_RSFT);
257             #ifdef BACKLIGHT_ENABLE
258               backlight_step();
259             #endif
260           } else {
261             unregister_code(KC_RSFT);
262           }
263         break;
264         case 12:
265           if (record->event.pressed) {
266             #ifdef AUDIO_ENABLE
267               stop_all_notes();
268               PLAY_SONG(tone_plover);
269             #endif
270             layer_off(_RAISE);
271             layer_off(_LOWER);
272             layer_off(_ADJUST);
273             layer_on(_PLOVER);
274             if (!eeconfig_is_enabled()) {
275                 eeconfig_init();
276             }
277             keymap_config.raw = eeconfig_read_keymap();
278             keymap_config.nkro = 1;
279             eeconfig_update_keymap(keymap_config.raw);
280           }
281         break;
282         case 13:
283           if (record->event.pressed) {
284             #ifdef AUDIO_ENABLE
285               PLAY_SONG(tone_plover_gb);
286             #endif
287             layer_off(_PLOVER);
288           }
289         break;
290         case 14:
291           if (record->event.pressed) {
292             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 );
293           }
294         break;
295       }
296     return MACRO_NONE;
297 };
298
299 void matrix_init_user(void) {
300     #ifdef AUDIO_ENABLE
301         startup_user();
302     #endif
303 }
304
305 #ifdef AUDIO_ENABLE
306
307 void startup_user()
308 {
309     _delay_ms(20); // gets rid of tick
310     PLAY_SONG(tone_startup);
311 }
312
313 void shutdown_user()
314 {
315     PLAY_SONG(tone_goodbye);
316     _delay_ms(150);
317     stop_all_notes();
318 }
319
320 void music_on_user(void)
321 {
322     music_scale_user();
323 }
324
325 void music_scale_user(void)
326 {
327     PLAY_SONG(music_scale);
328 }
329
330 #endif
331