]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/pvc/keymap.c
Adds support for Planck Rev 6 (#2666)
[qmk_firmware.git] / keyboards / planck / keymaps / pvc / keymap.c
1 #pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
2 #include "planck.h"
3 #include "action_layer.h"
4 #include "eeconfig.h"
5 #include "led.h"
6 #include "mousekey.h"
7
8 #ifdef AUDIO_ENABLE
9     #include "audio.h"
10     #include "song_list.h"
11 #endif
12
13 enum keyboard_layers {
14   LAYER_QWERTY = 0,
15   LAYER_UPPER,
16   LAYER_LOWER,
17   LAYER_FUNCTION,
18   LAYER_MOUSE,
19   LAYER_ADJUST,
20 };
21 enum keyboard_macros {
22   MACRO_QWERTY = 0,
23   MACRO_UPPER,
24   MACRO_LOWER,
25   MACRO_FUNCTION,
26   MACRO_MOUSE,
27   MACRO_TIMBRE_1,
28   MACRO_TIMBRE_2,
29   MACRO_TIMBRE_3,
30   MACRO_TIMBRE_4,
31   MACRO_TEMPO_U,
32   MACRO_TEMPO_D,
33   MACRO_TONE_DEFAULT,
34   MACRO_MUSIC_TOGGLE,
35   MACRO_AUDIO_TOGGLE,
36   MACRO_INC_VOICE,
37   MACRO_DEC_VOICE,
38   MACRO_BACKLIGHT,
39   MACRO_BREATH_TOGGLE,
40   MACRO_BREATH_SPEED_INC,
41   MACRO_BREATH_SPEED_DEC,
42   MACRO_BREATH_DEFAULT,
43   MACRO_MOUSE_MOVE_UL,
44   MACRO_MOUSE_MOVE_UR,
45   MACRO_MOUSE_MOVE_DL,
46   MACRO_MOUSE_MOVE_DR,
47   MACRO_HELP_1,
48   MACRO_HELP_2,
49   MACRO_HELP_3,
50   MACRO_HELP_4,
51   MACRO_HELP_5,
52   MACRO_HELP_6,
53   MACRO_HELP_7,
54   MACRO_HELP_8,
55   MACRO_HELP_9,
56 };
57
58 #define M_QWRTY             M(MACRO_QWERTY)
59 #define M_UPPER             M(MACRO_UPPER)
60 #define M_LOWER             M(MACRO_LOWER)
61 #define M_FUNCT             M(MACRO_FUNCTION)
62 #define M_MOUSE             M(MACRO_MOUSE)
63 #define TIMBR_1             M(MACRO_TIMBRE_1)
64 #define TIMBR_2             M(MACRO_TIMBRE_2)
65 #define TIMBR_3             M(MACRO_TIMBRE_3)
66 #define TIMBR_4             M(MACRO_TIMBRE_4)
67 #define TMPO_UP             M(MACRO_TEMPO_U)
68 #define TMPO_DN             M(MACRO_TEMPO_D)
69 #define TMPO_DF             M(MACRO_TONE_DEFAULT)
70 #define M_BACKL             M(MACRO_BACKLIGHT)
71 #define M_BRTOG             M(MACRO_BREATH_TOGGLE)
72 #define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
73 #define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
74 #define M_BDFLT             M(MACRO_BREATH_DEFAULT)
75 #define M_MS_UL             M(MACRO_MOUSE_MOVE_UL)
76 #define M_MS_UR             M(MACRO_MOUSE_MOVE_UR)
77 #define M_MS_DL             M(MACRO_MOUSE_MOVE_DL)
78 #define M_MS_DR             M(MACRO_MOUSE_MOVE_DR)
79 #define M_HELP1             M(MACRO_HELP_1)
80 #define M_HELP2             M(MACRO_HELP_2)
81 #define M_HELP3             M(MACRO_HELP_3)
82 #define M_HELP4             M(MACRO_HELP_4)
83 #define M_HELP5             M(MACRO_HELP_5)
84 #define M_HELP6             M(MACRO_HELP_6)
85 #define M_HELP7             M(MACRO_HELP_7)
86 #define M_HELP8             M(MACRO_HELP_8)
87 #define M_HELP9             M(MACRO_HELP_9)
88
89
90 #define VC_UP               M(MACRO_INC_VOICE)
91 #define VC_DOWN             M(MACRO_DEC_VOICE)
92
93
94 #define SC_UNDO             LCTL(KC_Z)
95 #define SC_REDO             LCTL(KC_Y)
96 #define SC_CUT              LCTL(KC_X)
97 #define SC_COPY             LCTL(KC_C)
98 #define SC_PSTE             LCTL(KC_V)
99 #define SC_SELA             LCTL(KC_A)
100 #define SC_SAVE             LCTL(KC_S)
101 #define SC_OPEN             LCTL(KC_O)
102 #define SC_ACLS             LALT(KC_F4)
103 #define SC_CCLS             LCTL(KC_F4)
104
105 #define TG_NKRO             MAGIC_TOGGLE_NKRO
106 #define OS_SHFT             KC_FN0
107
108 #define _______             KC_TRNS
109 #define XXXXXXX             KC_NO
110 #define ________________    _______, _______
111 #define XXXXXXXXXXXXXXXX    XXXXXXX, XXXXXXX
112
113 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
114
115 /* LAYER = LAYER_QWERTY
116   .-----------------------------------------------------------------------------------------------------------.
117   | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | BACKSP |
118   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
119   | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |
120   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
121   | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | UP     | ENTER  |
122   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
123   | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  | SPACE  | LOWER  | OSHIFT | LEFT   | DOWN   | RIGHT  |
124   '-----------------------------------------------------------------------------------------------------------'
125 */
126 [LAYER_QWERTY] = {
127   { KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_BSPC },
128   { KC_ESC , KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT },
129   { KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_UP  , KC_ENT  },
130   { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }
131 },
132 /* LAYER = LAYER_UPPER
133   .-----------------------------------------------------------------------------------------------------------.
134   | PRINT  | F1     | F2     | F3     | F4     | NUM LK | KP /   | KP 7   | KP 8   | KP 9   | KP -   | DEL    |
135   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
136   | PAUSE  | F5     | F6     | F7     | F8     | SCR LK | KP *   | KP 4   | KP 5   | KP 6   | KP +   | INS    |
137   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
138   | ______ | F9     | F10    | F11    | F12    | PAUSE  | KP 0   | KP 1   | KP 2   | KP 3   | KP ENT | HOME   |
139   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
140   | ______ | ______ | ______ | ______ | UPPER  | KP 0   | KP 0   | ______ | RALT   | KP .   | KP ENT | END    |
141   '-----------------------------------------------------------------------------------------------------------'
142 */
143 [LAYER_UPPER] = {
144   { KC_PSCR, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL  },
145   { KC_PAUS, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS  },
146   { _______, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_PAUS, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME },
147   { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END  }
148 },
149 /* LAYER = LAYER_LOWER
150   .-----------------------------------------------------------------------------------------------------------.
151   | ______ | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | PG UP  |
152   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
153   | ______ | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      | PG DN  |
154   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
155   | ______ | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | HOME   |
156   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
157   | ______ | ______ | ______ | ______ | ______ | ______ | ______ | LOWER  | ______ | ______ | ______ | END    |
158   '-----------------------------------------------------------------------------------------------------------'
159 */
160 [LAYER_LOWER] = {
161   { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT  , KC_PGUP },
162   { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , KC_PGDN },
163   { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT  , KC_GT  , KC_QUES, KC_HOME },
164   { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, KC_END  }
165 },
166 /* LAYER = LAYER_FUNCTION
167   .-----------------------------------------------------------------------------------------------------------.
168   | XXXXXX | F13    | F14    | F15    | F16    | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
169   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
170   | XXXXXX | F17    | F18    | F19    | F20    | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
171   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
172   | ______ | F21    | F22    | F23    | F24    | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | VOL UP | MUTE   |
173   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
174   | ______ | ______ | FN     | ______ | ______ | PLAY   | PLAY   | ______ | ______ | PREV   | VOL DN | NEXT   |
175   '-----------------------------------------------------------------------------------------------------------'
176 */
177 [LAYER_FUNCTION] = {
178   { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
179   { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
180   { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE },
181   { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
182 },
183 /* LAYER = LAYER_MOUSE
184   .-----------------------------------------------------------------------------------------------------------.
185   | ESC    | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL  | MS U   | MS UR  | MS WHL | MS WHR |
186   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
187   | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L   | XXXXXX | MS R   | XXXXXX | MS WHU |
188   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
189   | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL  | MS D   | MS DR  | MS U   | MS WHD |
190   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
191   | ______ | ______ | ______ | ______ | ______ | MS BT1 | MS BT1 | ______ | ______ | MS L   | MS D   | MS R   |
192   '-----------------------------------------------------------------------------------------------------------'
193 */
194 [LAYER_MOUSE] = {
195   { KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, KC_WH_L, KC_WH_R },
196   { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, KC_WH_U },
197   { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, KC_MS_U, KC_WH_D },
198   { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
199 },
200 /* LAYER = LAYER_ADJUST
201   .-----------------------------------------------------------------------------------------------------------.
202   | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | MUSIC  | AUDIO  |
203   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
204   | XXXXXX | BRTOG  | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
205   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
206   | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET  | XXXXXX | MOUSE  | XXXXXX | XXXXXX | VOICE+ | XXXXXX |
207   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
208   | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER  | XXXXXX | XXXXXX | LOWER  | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
209   '-----------------------------------------------------------------------------------------------------------'
210 */
211 [LAYER_ADJUST] = {
212   { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, MU_TOG , AU_TOG  },
213   { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
214   { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET  , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
215   { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
216 },
217
218 };
219
220 #ifdef AUDIO_ENABLE
221
222 float tone_my_startup[][2] = SONG(ODE_TO_JOY);
223 float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
224
225 float tone_audio_on[][2]   = SONG(CLOSE_ENCOUNTERS_5_NOTE);
226 float tone_music_on[][2]   = SONG(DOE_A_DEER);
227 float tone_caps_on[][2]    = SONG(CAPS_LOCK_ON_SOUND);
228 float tone_caps_off[][2]   = SONG(CAPS_LOCK_OFF_SOUND);
229 float tone_numlk_on[][2]   = SONG(NUM_LOCK_ON_SOUND);
230 float tone_numlk_off[][2]  = SONG(NUM_LOCK_OFF_SOUND);
231 float tone_scroll_on[][2]  = SONG(SCROLL_LOCK_ON_SOUND);
232 float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
233 float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
234
235 #endif /* AUDIO_ENABLE */
236
237 void persistent_default_layer_set(uint16_t default_layer)
238 {
239     eeconfig_update_default_layer(default_layer);
240     default_layer_set(default_layer);
241 }
242
243 const uint16_t PROGMEM fn_actions[] = {
244     [0] = ACTION_MODS_ONESHOT(MOD_RSFT),
245 };
246
247 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
248 {
249
250     // MACRODOWN only works in this function
251     switch(id)
252     {
253
254         case MACRO_HELP_1:
255             if (record->event.pressed)
256             {
257                                 uprintf("1");
258             }
259             break;
260
261         case MACRO_HELP_2:
262             if (record->event.pressed)
263             {
264                                 uprintf("2");
265             }
266             break;
267
268         case MACRO_HELP_3:
269             if (record->event.pressed)
270             {
271                                 uprintf("3");
272             }
273             break;
274
275         case MACRO_HELP_4:
276             if (record->event.pressed)
277             {
278                                 uprintf("4");
279             }
280             break;
281
282         case MACRO_HELP_5:
283             if (record->event.pressed)
284             {
285                                 uprintf("5");
286             }
287             break;
288
289         case MACRO_HELP_6:
290             if (record->event.pressed)
291             {
292                                 uprintf("6");
293             }
294             break;
295
296         case MACRO_HELP_7:
297             if (record->event.pressed)
298             {
299                                 uprintf("7");
300             }
301             break;
302
303         case MACRO_HELP_8:
304             if (record->event.pressed)
305             {
306                                 uprintf("8");
307             }
308             break;
309
310         case MACRO_HELP_9:
311             if (record->event.pressed)
312             {
313                                 uprintf("9");
314             }
315             break;
316
317         case MACRO_BREATH_TOGGLE:
318             if (record->event.pressed)
319             {
320               #ifdef BACKLIGHT_BREATHING
321                 breathing_toggle();
322               #endif
323             }
324             break;
325
326         case MACRO_BREATH_SPEED_INC:
327             if (record->event.pressed)
328             {
329               #ifdef BACKLIGHT_BREATHING
330                 breathing_period_inc();
331               #endif
332             }
333             break;
334
335         case MACRO_BREATH_SPEED_DEC:
336             if (record->event.pressed)
337             {
338               #ifdef BACKLIGHT_BREATHING
339                 breathing_period_dec();
340               #endif
341             }
342             break;
343
344         case MACRO_BREATH_DEFAULT:
345             if (record->event.pressed)
346             {
347               #ifdef BACKLIGHT_BREATHING
348                 breathing_period_default();
349               #endif
350             }
351             break;
352
353         case MACRO_QWERTY:
354             if (record->event.pressed)
355             {
356                 persistent_default_layer_set(1UL<<LAYER_QWERTY);
357             }
358             break;
359
360         case MACRO_UPPER:
361             if (record->event.pressed)
362             {
363                 layer_on(LAYER_UPPER);
364                 #ifdef BACKLIGHT_BREATHING
365                   breathing_period_set(2);
366                   breathing_pulse();
367                 #endif
368                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
369             }
370             else
371             {
372                 layer_off(LAYER_UPPER);
373                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
374             }
375             break;
376
377         case MACRO_LOWER:
378             if (record->event.pressed)
379             {
380                 layer_on(LAYER_LOWER);
381                 #ifdef BACKLIGHT_BREATHING
382                   breathing_period_set(2);
383                   breathing_pulse();
384                 #endif
385                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
386             }
387             else
388             {
389                 layer_off(LAYER_LOWER);
390                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
391             }
392             break;
393
394         case MACRO_FUNCTION:
395             if (record->event.pressed)
396             {
397                 #ifdef BACKLIGHT_BREATHING
398                   breathing_period_set(3);
399                   breathing_enable();
400                 #endif
401                 layer_on(LAYER_FUNCTION);
402             }
403             else
404             {
405                 #ifdef BACKLIGHT_BREATHING
406                   breathing_period_set(1);
407                   breathing_self_disable();
408                 #endif
409                 layer_off(LAYER_FUNCTION);
410             }
411             break;
412
413
414 #ifdef BACKLIGHT_ENABLE
415                 case MACRO_BACKLIGHT:
416                         if (record->event.pressed)
417                         {
418                                 backlight_step();
419                         }
420 #endif
421
422 #ifdef MOUSEKEY_ENABLE
423
424         case MACRO_MOUSE:
425             if (record->event.pressed)
426             {
427                 layer_invert(LAYER_MOUSE);
428             }
429             break;
430
431         case MACRO_MOUSE_MOVE_UL:
432             if (record->event.pressed)
433             {
434               mousekey_on(KC_MS_UP);
435               mousekey_on(KC_MS_LEFT);
436             }
437             else
438             {
439               mousekey_off(KC_MS_UP);
440               mousekey_off(KC_MS_LEFT);
441             }
442             break;
443
444         case MACRO_MOUSE_MOVE_UR:
445             if (record->event.pressed)
446             {
447               mousekey_on(KC_MS_UP);
448               mousekey_on(KC_MS_RIGHT);
449             }
450             else
451             {
452               mousekey_off(KC_MS_UP);
453               mousekey_off(KC_MS_RIGHT);
454             }
455             break;
456
457         case MACRO_MOUSE_MOVE_DL:
458             if (record->event.pressed)
459             {
460               mousekey_on(KC_MS_DOWN);
461               mousekey_on(KC_MS_LEFT);
462             }
463             else
464             {
465               mousekey_off(KC_MS_DOWN);
466               mousekey_off(KC_MS_LEFT);
467             }
468             break;
469
470         case MACRO_MOUSE_MOVE_DR:
471             if (record->event.pressed)
472             {
473               mousekey_on(KC_MS_DOWN);
474               mousekey_on(KC_MS_RIGHT);
475             }
476             else
477             {
478               mousekey_off(KC_MS_DOWN);
479               mousekey_off(KC_MS_RIGHT);
480             }
481             break;
482
483 #endif /* MOUSEKEY_ENABLE */
484
485 #ifdef AUDIO_ENABLE
486
487         case MACRO_TIMBRE_1:
488             if (record->event.pressed) set_timbre(TIMBRE_12);
489             break;
490
491         case MACRO_TIMBRE_2:
492             if (record->event.pressed) set_timbre(TIMBRE_25);
493             break;
494
495         case MACRO_TIMBRE_3:
496             if (record->event.pressed) set_timbre(TIMBRE_50);
497             break;
498
499         case MACRO_TIMBRE_4:
500             if (record->event.pressed) set_timbre(TIMBRE_75);
501             break;
502
503         case MACRO_TEMPO_U:
504             if (record->event.pressed) increase_tempo(10);
505             break;
506
507         case MACRO_TEMPO_D:
508             if (record->event.pressed) decrease_tempo(10);
509             break;
510
511         case MACRO_TONE_DEFAULT:
512             if (record->event.pressed)
513             {
514                 set_timbre(TIMBRE_DEFAULT);
515                 set_tempo(TEMPO_DEFAULT);
516             }
517             break;
518
519 #endif /* AUDIO_ENABLE */
520
521         default:
522             break;
523
524     }
525     return MACRO_NONE;
526 };
527
528
529 #ifdef AUDIO_ENABLE
530
531 void matrix_init_user(void)
532 {
533     set_voice(default_voice);
534     startup_user();
535     println("Matrix Init");
536 }
537
538 void led_set_user(uint8_t usb_led)
539 {
540     static uint8_t old_usb_led = 0;
541
542     _delay_ms(10); // gets rid of tick
543
544     if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
545     {
546             // If CAPS LK LED is turning on...
547             PLAY_SONG(tone_caps_on);
548     }
549     else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
550     {
551             // If CAPS LK LED is turning off...
552             PLAY_SONG(tone_caps_off);
553     }
554     else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
555     {
556             // If NUM LK LED is turning on...
557             PLAY_SONG(tone_numlk_on);
558     }
559     else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
560     {
561             // If NUM LED is turning off...
562             PLAY_SONG(tone_numlk_off);
563     }
564     else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
565     {
566             // If SCROLL LK LED is turning on...
567             PLAY_SONG(tone_scroll_on);
568     }
569     else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
570     {
571             // If SCROLL LED is turning off...
572             PLAY_SONG(tone_scroll_off);
573     }
574     old_usb_led = usb_led;
575 }
576
577
578 void startup_user()
579 {
580     _delay_ms(10); // gets rid of tick
581     PLAY_SONG(tone_my_startup);
582 }
583
584 void shutdown_user()
585 {
586     PLAY_SONG(tone_my_goodbye);
587     _delay_ms(2000);
588     stop_all_notes();
589 }
590
591 void audio_on_user(void)
592 {
593         PLAY_SONG(tone_audio_on);
594 }
595
596 void music_on_user(void)
597 {
598         PLAY_SONG(tone_music_on);
599 }
600
601 void music_scale_user(void)
602 {
603         PLAY_SONG(music_scale);
604 }
605
606 #endif /* AUDIO_ENABLE */