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