]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboard/preonic/keymaps/default/keymap.c
Adding Musical Notes
[qmk_firmware.git] / keyboard / preonic / keymaps / default / keymap.c
1 #include "preonic.h"
2 #include "action_layer.h"
3 #include "eeconfig.h"
4 #ifdef AUDIO_ENABLE
5   #include "audio.h"
6   #define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
7               0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
8               0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
9               0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
10               0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
11 #endif
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 _ADJUST 5
23 #define _MUSIC 6
24
25 // Macro name shortcuts
26 #define QWERTY M(_QWERTY)
27 #define COLEMAK M(_COLEMAK)
28 #define DVORAK M(_DVORAK)
29 #define LOWER M(_LOWER)
30 #define RAISE M(_RAISE)
31 #define M_BL 5
32 #ifdef AUDIO_ENABLE
33   #define AUD_OFF M(6)
34   #define AUD_ON M(7)
35 #endif
36 #define MUS_OFF M(8)
37 #define MUS_ON M(9)
38
39 // Fillers to make layering more clear
40 #define _______ KC_TRNS
41 #define XXXXXXX KC_NO
42
43 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
44
45 /* Qwerty
46  * ,-----------------------------------------------------------------------------------.
47  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
48  * |------+------+------+------+------+------+------+------+------+------+------+------|
49  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
50  * |------+------+------+------+------+-------------+------+------+------+------+------|
51  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
52  * |------+------+------+------+------+------|------+------+------+------+------+------|
53  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
54  * |------+------+------+------+------+------+------+------+------+------+------+------|
55  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
56  * `-----------------------------------------------------------------------------------'
57  */
58 [_QWERTY] = {
59   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
60   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL},
61   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
62   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
63   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
64 },
65
66 /* Colemak
67  * ,-----------------------------------------------------------------------------------.
68  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
69  * |------+------+------+------+------+------+------+------+------+------+------+------|
70  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
71  * |------+------+------+------+------+-------------+------+------+------+------+------|
72  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
73  * |------+------+------+------+------+------|------+------+------+------+------+------|
74  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
75  * |------+------+------+------+------+------+------+------+------+------+------+------|
76  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
77  * `-----------------------------------------------------------------------------------'
78  */
79 [_COLEMAK] = {
80   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
81   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL},
82   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
83   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
84   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
85 },
86
87 /* Dvorak
88  * ,-----------------------------------------------------------------------------------.
89  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
90  * |------+------+------+------+------+------+------+------+------+------+------+------|
91  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Del  |
92  * |------+------+------+------+------+-------------+------+------+------+------+------|
93  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
94  * |------+------+------+------+------+------|------+------+------+------+------+------|
95  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
96  * |------+------+------+------+------+------+------+------+------+------+------+------|
97  * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
98  * `-----------------------------------------------------------------------------------'
99  */
100 [_DVORAK] = {
101   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
102   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL},
103   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
104   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
105   {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
106 },
107
108 /* Lower
109  * ,-----------------------------------------------------------------------------------.
110  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
111  * |------+------+------+------+------+-------------+------+------+------+------+------|
112  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
113  * |------+------+------+------+------+-------------+------+------+------+------+------|
114  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
115  * |------+------+------+------+------+------|------+------+------+------+------+------|
116  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
117  * |------+------+------+------+------+------+------+------+------+------+------+------|
118  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
119  * `-----------------------------------------------------------------------------------'
120  */
121 [_LOWER] = {
122   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
123   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
124   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
125   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
126   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
127 },
128
129 /* Raise
130  * ,-----------------------------------------------------------------------------------.
131  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
132  * |------+------+------+------+------+------+------+------+------+------+------+------|
133  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
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_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL},
145   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
146   {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______},
147   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
148 },
149
150 /* Adjust (Lower + Raise)
151  * ,-----------------------------------------------------------------------------------.
152  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
153  * |------+------+------+------+------+------+------+------+------+------+------+------|
154  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
155  * |------+------+------+------+------+-------------+------+------+------+------+------|
156  * |      |      |      |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
157  * |------+------+------+------+------+------|------+------+------+------+------+------|
158  * |      |      |      |Musoff|Mus on|      |      |      |      |      |      |      |
159  * |------+------+------+------+------+------+------+------+------+------+------+------|
160  * |      |      |      |      |      |             |      |      |      |      |      |
161  * `-----------------------------------------------------------------------------------'
162  */
163 [_ADJUST] = {
164   {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12},
165   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
166   {_______, _______, _______, AUD_ON,  AUD_OFF, AG_NORM, AG_SWAP,  QWERTY,  COLEMAK, DVORAK,  _______, _______},
167   {_______, _______, _______, MUS_ON,  MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
168   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
169 },
170
171 /* Music (reserved for process_action_user)
172  *
173  */
174 [_MUSIC] = {
175   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
176   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
177   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
178   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
179   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
180 }
181 };
182
183 const uint16_t PROGMEM fn_actions[] = {
184
185 };
186
187 #ifdef AUDIO_ENABLE
188 float start_up[][2] = {
189   {440.0*pow(2.0,(50)/12.0), 20},
190   {440.0*pow(2.0,(62)/12.0), 8},
191   {440.0*pow(2.0,(54)/12.0), 20},
192   {440.0*pow(2.0,(62)/12.0), 8}
193 };
194
195 float tone_qwerty[][2] = {
196   {440.0*pow(2.0,(59)/12.0), 8},
197   {440.0*pow(2.0,(60)/12.0), 8},
198   {0, 4},
199   {440.0*pow(2.0,(67)/12.0), 16}
200 };
201
202 float tone_colemak[][2] = {
203   {440.0*pow(2.0,(59)/12.0), 8},
204   {440.0*pow(2.0,(60)/12.0), 8},
205   {0, 4},
206   {440.0*pow(2.0,(67)/12.0), 12},
207   {0, 4},
208   {440.0*pow(2.0,(71)/12.0), 12}
209 };
210
211 float tone_dvorak[][2] = {
212   {440.0*pow(2.0,(59)/12.0), 8},
213   {440.0*pow(2.0,(60)/12.0), 8},
214   {0, 4},
215   {440.0*pow(2.0,(67)/12.0), 8},
216   {0, 4},
217   {440.0*pow(2.0,(69)/12.0), 8},
218   {0, 4},
219   {440.0*pow(2.0,(67)/12.0), 8}
220 };
221
222 float tone_music[][2] = {
223   {440.0*pow(2.0,(48)/12.0), 8},
224   {440.0*pow(2.0,(50)/12.0), 8},
225   {440.0*pow(2.0,(52)/12.0), 8},
226   {440.0*pow(2.0,(53)/12.0), 8},
227   {440.0*pow(2.0,(55)/12.0), 8},
228   {440.0*pow(2.0,(57)/12.0), 8},
229   {440.0*pow(2.0,(59)/12.0), 8},
230   {440.0*pow(2.0,(60)/12.0), 8}
231 };
232 #endif
233
234 void persistant_default_layer_set(uint16_t default_layer) {
235   eeconfig_write_default_layer(default_layer);
236   default_layer_set(default_layer);
237 }
238
239 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
240 {
241       switch(id) {
242         case _QWERTY:
243           if (record->event.pressed) {
244             #ifdef AUDIO_ENABLE
245               play_notes(&tone_qwerty, 4, false);
246             #endif
247             persistant_default_layer_set(1UL<<_QWERTY);
248           }
249           break;
250         case _COLEMAK:
251           if (record->event.pressed) {
252             #ifdef AUDIO_ENABLE
253               play_notes(&tone_colemak, 6, false);
254             #endif
255             persistant_default_layer_set(1UL<<_COLEMAK);
256           }
257           break;
258         case _DVORAK:
259           if (record->event.pressed) {
260             #ifdef AUDIO_ENABLE
261               play_notes(&tone_dvorak, 8, false);
262             #endif
263             persistant_default_layer_set(1UL<<_DVORAK);
264           }
265           break;
266         case _LOWER:
267           if (record->event.pressed) {
268             layer_on(_LOWER);
269             update_tri_layer(_LOWER, _RAISE, _ADJUST);
270           } else {
271             layer_off(_LOWER);
272             update_tri_layer(_LOWER, _RAISE, _ADJUST);
273           }
274           break;
275         case _RAISE:
276           if (record->event.pressed) {
277             layer_on(_RAISE);
278             update_tri_layer(_LOWER, _RAISE, _ADJUST);
279           } else {
280             layer_off(_RAISE);
281             update_tri_layer(_LOWER, _RAISE, _ADJUST);
282           }
283           break;
284         case M_BL:
285           if (record->event.pressed) {
286             register_code(KC_RSFT);
287             #ifdef BACKLIGHT_ENABLE
288               backlight_step();
289             #endif
290           } else {
291             unregister_code(KC_RSFT);
292           }
293         break;
294         case 6:
295           if (record->event.pressed) {
296             #ifdef AUDIO_ENABLE
297               audio_off();
298             #endif
299           }
300         break;
301         case 7:
302           if (record->event.pressed) {
303             #ifdef AUDIO_ENABLE
304               audio_on();
305               play_notes(&start_up, 4, false);
306             #endif
307           }
308         break;
309         case 8:
310           if (record->event.pressed) {
311             #ifdef AUDIO_ENABLE
312               layer_off(_MUSIC);
313               stop_all_notes();
314             #endif
315           }
316         break;
317         case 9:
318           if (record->event.pressed) {
319             #ifdef AUDIO_ENABLE
320               play_notes(&tone_music, 8, false);
321               layer_on(_MUSIC);
322             #endif
323           }
324         break;
325       }
326     return MACRO_NONE;
327 };
328
329 uint8_t starting_note = 0x0C;
330 int offset = 7;
331
332 void process_action_user(keyrecord_t *record) {
333
334   if (IS_LAYER_ON(_MUSIC)) {
335     if (record->event.pressed) {
336         play_note(((double)261.626)*pow(2.0, -2.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
337     } else {
338         stop_note(((double)261.626)*pow(2.0, -2.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
339     }
340   }
341
342 }
343
344 void matrix_init_user(void) {
345   #ifdef AUDIO_ENABLE
346     init_notes();
347     play_notes(&start_up, 4, false);
348   #endif
349 }