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