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