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