]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/zrichard/keymap.c
backlight breathing overhaul (#2187)
[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                 breathing_toggle();
329             }
330             break;
331
332         case MACRO_BREATH_SPEED_INC:
333             if (record->event.pressed)
334             {
335                 breathing_period_inc();
336             }
337             break;
338
339         case MACRO_BREATH_SPEED_DEC:
340             if (record->event.pressed)
341             {
342                 breathing_period_dec();
343             }
344             break;
345
346         case MACRO_BREATH_DEFAULT:
347             if (record->event.pressed)
348             {
349                 breathing_defaults();
350             }
351             break;
352
353         case MACRO_QWERTY:
354             if (record->event.pressed)
355             {
356                 persistant_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                 breathing_period_set(2);
365                 breathing_pulse();
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                 breathing_period_set(2);
380                 breathing_pulse();
381                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
382             }
383             else
384             {
385                 layer_off(LAYER_LOWER);
386                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
387             }
388             break;
389
390         case MACRO_FUNCTION:
391             if (record->event.pressed)
392             {
393                 breathing_period_set(3);
394                 breathing_enable();
395                 layer_on(LAYER_FUNCTION);
396             }
397             else
398             {
399                 breathing_period_set(1);
400                 breathing_self_disable();
401                 layer_off(LAYER_FUNCTION);
402             }
403             break;
404
405         case MACRO_MINE:
406                 if(record->event.pressed)
407                 {
408                         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 );
409                 }
410                 break;
411
412         /*
413         case MACRO_SHENT:
414                 if (record->event.pressed)
415                 {
416                         start = timer_read();
417                         return MACRO( D(LSHIFT), END );
418                 }
419                 else
420                 {
421                         if (timer_elapsed(start) > 100) 
422                         {
423                                 return MACRO( U(LSHIFT), END);
424                         }
425                         else
426                         {
427                                 return MACRO( U(LSHIFT), T(ENTER), END);
428                         }
429                 }
430                 break;
431                 */
432
433
434 #ifdef BACKLIGHT_ENABLE
435                 case MACRO_BACKLIGHT:
436                         if (record->event.pressed)
437                         {
438                                 backlight_step();
439                         }
440 #endif
441
442 #ifdef MOUSEKEY_ENABLE
443
444         case MACRO_MOUSE:
445             if (record->event.pressed)
446             {
447                 layer_invert(LAYER_MOUSE);
448             }
449             break;
450
451         case MACRO_MOUSE_MOVE_UL:
452             if (record->event.pressed)
453             {
454               mousekey_on(KC_MS_UP);
455               mousekey_on(KC_MS_LEFT);
456             }
457             else
458             {
459               mousekey_off(KC_MS_UP);
460               mousekey_off(KC_MS_LEFT);
461             }
462             break;
463
464         case MACRO_MOUSE_MOVE_UR:
465             if (record->event.pressed)
466             {
467               mousekey_on(KC_MS_UP);
468               mousekey_on(KC_MS_RIGHT);
469             }
470             else
471             {
472               mousekey_off(KC_MS_UP);
473               mousekey_off(KC_MS_RIGHT);
474             }
475             break;
476
477         case MACRO_MOUSE_MOVE_DL:
478             if (record->event.pressed)
479             {
480               mousekey_on(KC_MS_DOWN);
481               mousekey_on(KC_MS_LEFT);
482             }
483             else
484             {
485               mousekey_off(KC_MS_DOWN);
486               mousekey_off(KC_MS_LEFT);
487             }
488             break;
489
490         case MACRO_MOUSE_MOVE_DR:
491             if (record->event.pressed)
492             {
493               mousekey_on(KC_MS_DOWN);
494               mousekey_on(KC_MS_RIGHT);
495             }
496             else
497             {
498               mousekey_off(KC_MS_DOWN);
499               mousekey_off(KC_MS_RIGHT);
500             }
501             break;
502
503 #endif /* MOUSEKEY_ENABLE */
504
505 #ifdef AUDIO_ENABLE
506
507         case MACRO_TIMBRE_1:
508             if (record->event.pressed) set_timbre(TIMBRE_12);
509             break;
510
511         case MACRO_TIMBRE_2:
512             if (record->event.pressed) set_timbre(TIMBRE_25);
513             break;
514
515         case MACRO_TIMBRE_3:
516             if (record->event.pressed) set_timbre(TIMBRE_50);
517             break;
518
519         case MACRO_TIMBRE_4:
520             if (record->event.pressed) set_timbre(TIMBRE_75);
521             break;
522
523         case MACRO_TEMPO_U:
524             if (record->event.pressed) increase_tempo(10);
525             break;
526
527         case MACRO_TEMPO_D:
528             if (record->event.pressed) decrease_tempo(10);
529             break;
530
531         case MACRO_TONE_DEFAULT:
532             if (record->event.pressed)
533             {
534                 set_timbre(TIMBRE_DEFAULT);
535                 set_tempo(TEMPO_DEFAULT);
536             }
537             break;
538
539 #endif /* AUDIO_ENABLE */
540
541         default:
542             break;
543
544     }
545     return MACRO_NONE;
546 };
547
548
549
550 #ifdef AUDIO_ENABLE
551
552 void matrix_init_user(void)
553 {
554     set_voice(default_voice);
555     startup_user();
556     println("Matrix Init");
557 }
558
559 void led_set_user(uint8_t usb_led)
560 {
561     static uint8_t old_usb_led = 0;
562
563     _delay_ms(10); // gets rid of tick
564
565     if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
566     {
567             // If CAPS LK LED is turning on...
568             PLAY_SONG(tone_caps_on);
569     }
570     else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
571     {
572             // If CAPS LK LED is turning off...
573             PLAY_SONG(tone_caps_off);
574     }
575     else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
576     {
577             // If NUM LK LED is turning on...
578             PLAY_SONG(tone_numlk_on);
579     }
580     else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
581     {
582             // If NUM LED is turning off...
583             PLAY_SONG(tone_numlk_off);
584     }
585     else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
586     {
587             // If SCROLL LK LED is turning on...
588             PLAY_SONG(tone_scroll_on);
589     }
590     else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
591     {
592             // If SCROLL LED is turning off...
593             PLAY_SONG(tone_scroll_off);
594     }
595     old_usb_led = usb_led;
596 }
597
598
599 void startup_user()
600 {
601     _delay_ms(10); // gets rid of tick
602     PLAY_SONG(tone_my_startup);
603 }
604
605 void shutdown_user()
606 {
607     PLAY_SONG(tone_my_goodbye);
608     _delay_ms(2000);
609     stop_all_notes();
610 }
611
612 void audio_on_user(void)
613 {
614         PLAY_SONG(tone_audio_on);
615 }
616
617 void music_on_user(void)
618 {
619         PLAY_SONG(tone_music_on);
620 }
621
622 void music_scale_user(void)
623 {
624         PLAY_SONG(music_scale);
625 }
626
627 #endif /* AUDIO_ENABLE */