]> git.donarmstrong.com Git - qmk_firmware.git/blob - quantum/process_keycode/process_magic.c
[Keyboard] Clueboard 60 fix col 11 12 mixup (#7685)
[qmk_firmware.git] / quantum / process_keycode / process_magic.c
1 /* Copyright 2019 Jack Humbert
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16 #include "process_magic.h"
17
18 #ifdef AUDIO_ENABLE
19 #    ifndef AG_NORM_SONG
20 #        define AG_NORM_SONG SONG(AG_NORM_SOUND)
21 #    endif
22 #    ifndef AG_SWAP_SONG
23 #        define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
24 #    endif
25 #    ifndef CG_NORM_SONG
26 #        define CG_NORM_SONG SONG(AG_NORM_SOUND)
27 #    endif
28 #    ifndef CG_SWAP_SONG
29 #        define CG_SWAP_SONG SONG(AG_SWAP_SOUND)
30 #    endif
31 float ag_norm_song[][2] = AG_NORM_SONG;
32 float ag_swap_song[][2] = AG_SWAP_SONG;
33 float cg_norm_song[][2] = CG_NORM_SONG;
34 float cg_swap_song[][2] = CG_SWAP_SONG;
35 #endif
36
37 /**
38  * MAGIC actions (BOOTMAGIC without the boot)
39  */
40 bool process_magic(uint16_t keycode, keyrecord_t *record) {
41     // skip anything that isn't a keyup
42     if (record->event.pressed) {
43         switch (keycode) {
44             case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:
45             case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:
46                 /* keymap config */
47                 keymap_config.raw = eeconfig_read_keymap();
48                 switch (keycode) {
49                     case MAGIC_SWAP_CONTROL_CAPSLOCK:
50                         keymap_config.swap_control_capslock = true;
51                         break;
52                     case MAGIC_CAPSLOCK_TO_CONTROL:
53                         keymap_config.capslock_to_control = true;
54                         break;
55                     case MAGIC_SWAP_LALT_LGUI:
56                         keymap_config.swap_lalt_lgui = true;
57                         break;
58                     case MAGIC_SWAP_RALT_RGUI:
59                         keymap_config.swap_ralt_rgui = true;
60                         break;
61                     case MAGIC_SWAP_LCTL_LGUI:
62                         keymap_config.swap_lctl_lgui = true;
63                         break;
64                     case MAGIC_SWAP_RCTL_RGUI:
65                         keymap_config.swap_rctl_rgui = true;
66                         break;
67                     case MAGIC_NO_GUI:
68                         keymap_config.no_gui = true;
69                         break;
70                     case MAGIC_SWAP_GRAVE_ESC:
71                         keymap_config.swap_grave_esc = true;
72                         break;
73                     case MAGIC_SWAP_BACKSLASH_BACKSPACE:
74                         keymap_config.swap_backslash_backspace = true;
75                         break;
76                     case MAGIC_HOST_NKRO:
77                         clear_keyboard();  // clear first buffer to prevent stuck keys
78                         keymap_config.nkro = true;
79                         break;
80                     case MAGIC_SWAP_ALT_GUI:
81                         keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
82 #ifdef AUDIO_ENABLE
83                         PLAY_SONG(ag_swap_song);
84 #endif
85                         break;
86                     case MAGIC_SWAP_CTL_GUI:
87                         keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true;
88 #ifdef AUDIO_ENABLE
89                         PLAY_SONG(cg_swap_song);
90 #endif
91                         break;
92                     case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
93                         keymap_config.swap_control_capslock = false;
94                         break;
95                     case MAGIC_UNCAPSLOCK_TO_CONTROL:
96                         keymap_config.capslock_to_control = false;
97                         break;
98                     case MAGIC_UNSWAP_LALT_LGUI:
99                         keymap_config.swap_lalt_lgui = false;
100                         break;
101                     case MAGIC_UNSWAP_RALT_RGUI:
102                         keymap_config.swap_ralt_rgui = false;
103                         break;
104                     case MAGIC_UNSWAP_LCTL_LGUI:
105                         keymap_config.swap_lctl_lgui = false;
106                         break;
107                     case MAGIC_UNSWAP_RCTL_RGUI:
108                         keymap_config.swap_rctl_rgui = false;
109                         break;
110                     case MAGIC_UNNO_GUI:
111                         keymap_config.no_gui = false;
112                         break;
113                     case MAGIC_UNSWAP_GRAVE_ESC:
114                         keymap_config.swap_grave_esc = false;
115                         break;
116                     case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
117                         keymap_config.swap_backslash_backspace = false;
118                         break;
119                     case MAGIC_UNHOST_NKRO:
120                         clear_keyboard();  // clear first buffer to prevent stuck keys
121                         keymap_config.nkro = false;
122                         break;
123                     case MAGIC_UNSWAP_ALT_GUI:
124                         keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
125 #ifdef AUDIO_ENABLE
126                         PLAY_SONG(ag_norm_song);
127 #endif
128                         break;
129                     case MAGIC_UNSWAP_CTL_GUI:
130                         keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false;
131 #ifdef AUDIO_ENABLE
132                         PLAY_SONG(cg_norm_song);
133 #endif
134                         break;
135                     case MAGIC_TOGGLE_ALT_GUI:
136                         keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
137                         keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
138 #ifdef AUDIO_ENABLE
139                         if (keymap_config.swap_ralt_rgui) {
140                             PLAY_SONG(ag_swap_song);
141                         } else {
142                             PLAY_SONG(ag_norm_song);
143                         }
144 #endif
145                         break;
146                     case MAGIC_TOGGLE_CTL_GUI:
147                         keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui;
148                         keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui;
149 #ifdef AUDIO_ENABLE
150                         if (keymap_config.swap_rctl_rgui) {
151                             PLAY_SONG(cg_swap_song);
152                         } else {
153                             PLAY_SONG(cg_norm_song);
154                         }
155 #endif
156                         break;
157                     case MAGIC_TOGGLE_NKRO:
158                         clear_keyboard();  // clear first buffer to prevent stuck keys
159                         keymap_config.nkro = !keymap_config.nkro;
160                         break;
161                     case MAGIC_EE_HANDS_LEFT:
162                         eeconfig_update_handedness(true);
163                         break;
164                     case MAGIC_EE_HANDS_RIGHT:
165                         eeconfig_update_handedness(false);
166                         break;
167                 }
168
169                 eeconfig_update_keymap(keymap_config.raw);
170                 clear_keyboard();  // clear to prevent stuck keys
171
172                 return false;
173         }
174     }
175
176     // Not a magic keycode so continue processing
177     return true;
178 }