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