logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

process_magic.c (8041B)


  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. #include "keycode_config.h"
  18. #include "keycodes.h"
  19. #include "eeconfig.h"
  20. #ifdef AUDIO_ENABLE
  21. # include "audio.h"
  22. # ifndef AG_NORM_SONG
  23. # define AG_NORM_SONG SONG(AG_NORM_SOUND)
  24. # endif
  25. # ifndef AG_SWAP_SONG
  26. # define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
  27. # endif
  28. # ifndef CG_NORM_SONG
  29. # define CG_NORM_SONG SONG(AG_NORM_SOUND)
  30. # endif
  31. # ifndef CG_SWAP_SONG
  32. # define CG_SWAP_SONG SONG(AG_SWAP_SOUND)
  33. # endif
  34. float ag_norm_song[][2] = AG_NORM_SONG;
  35. float ag_swap_song[][2] = AG_SWAP_SONG;
  36. float cg_norm_song[][2] = CG_NORM_SONG;
  37. float cg_swap_song[][2] = CG_SWAP_SONG;
  38. #endif
  39. /**
  40. * MAGIC actions (BOOTMAGIC without the boot)
  41. */
  42. bool process_magic(uint16_t keycode, keyrecord_t *record) {
  43. // skip anything that isn't a keyup
  44. if (record->event.pressed) {
  45. if (IS_MAGIC_KEYCODE(keycode)) {
  46. /* keymap config */
  47. eeconfig_read_keymap(&keymap_config);
  48. switch (keycode) {
  49. case QK_MAGIC_SWAP_CONTROL_CAPS_LOCK:
  50. keymap_config.swap_control_capslock = true;
  51. break;
  52. case QK_MAGIC_SWAP_ESCAPE_CAPS_LOCK:
  53. keymap_config.swap_escape_capslock = true;
  54. break;
  55. case QK_MAGIC_CAPS_LOCK_AS_CONTROL_ON:
  56. keymap_config.capslock_to_control = true;
  57. break;
  58. case QK_MAGIC_SWAP_LALT_LGUI:
  59. keymap_config.swap_lalt_lgui = true;
  60. break;
  61. case QK_MAGIC_SWAP_RALT_RGUI:
  62. keymap_config.swap_ralt_rgui = true;
  63. break;
  64. case QK_MAGIC_SWAP_LCTL_LGUI:
  65. keymap_config.swap_lctl_lgui = true;
  66. break;
  67. case QK_MAGIC_SWAP_RCTL_RGUI:
  68. keymap_config.swap_rctl_rgui = true;
  69. break;
  70. case QK_MAGIC_GUI_OFF:
  71. keymap_config.no_gui = true;
  72. break;
  73. case QK_MAGIC_SWAP_GRAVE_ESC:
  74. keymap_config.swap_grave_esc = true;
  75. break;
  76. case QK_MAGIC_SWAP_BACKSLASH_BACKSPACE:
  77. keymap_config.swap_backslash_backspace = true;
  78. break;
  79. case QK_MAGIC_NKRO_ON:
  80. clear_keyboard(); // clear first buffer to prevent stuck keys
  81. keymap_config.nkro = true;
  82. break;
  83. case QK_MAGIC_SWAP_ALT_GUI:
  84. keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
  85. #ifdef AUDIO_ENABLE
  86. PLAY_SONG(ag_swap_song);
  87. #endif
  88. break;
  89. case QK_MAGIC_SWAP_CTL_GUI:
  90. keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true;
  91. #ifdef AUDIO_ENABLE
  92. PLAY_SONG(cg_swap_song);
  93. #endif
  94. break;
  95. case QK_MAGIC_UNSWAP_CONTROL_CAPS_LOCK:
  96. keymap_config.swap_control_capslock = false;
  97. break;
  98. case QK_MAGIC_UNSWAP_ESCAPE_CAPS_LOCK:
  99. keymap_config.swap_escape_capslock = false;
  100. break;
  101. case QK_MAGIC_CAPS_LOCK_AS_CONTROL_OFF:
  102. keymap_config.capslock_to_control = false;
  103. break;
  104. case QK_MAGIC_UNSWAP_LALT_LGUI:
  105. keymap_config.swap_lalt_lgui = false;
  106. break;
  107. case QK_MAGIC_UNSWAP_RALT_RGUI:
  108. keymap_config.swap_ralt_rgui = false;
  109. break;
  110. case QK_MAGIC_UNSWAP_LCTL_LGUI:
  111. keymap_config.swap_lctl_lgui = false;
  112. break;
  113. case QK_MAGIC_UNSWAP_RCTL_RGUI:
  114. keymap_config.swap_rctl_rgui = false;
  115. break;
  116. case QK_MAGIC_GUI_ON:
  117. keymap_config.no_gui = false;
  118. break;
  119. case QK_MAGIC_UNSWAP_GRAVE_ESC:
  120. keymap_config.swap_grave_esc = false;
  121. break;
  122. case QK_MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
  123. keymap_config.swap_backslash_backspace = false;
  124. break;
  125. case QK_MAGIC_NKRO_OFF:
  126. clear_keyboard(); // clear first buffer to prevent stuck keys
  127. keymap_config.nkro = false;
  128. break;
  129. case QK_MAGIC_UNSWAP_ALT_GUI:
  130. keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
  131. #ifdef AUDIO_ENABLE
  132. PLAY_SONG(ag_norm_song);
  133. #endif
  134. break;
  135. case QK_MAGIC_UNSWAP_CTL_GUI:
  136. keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false;
  137. #ifdef AUDIO_ENABLE
  138. PLAY_SONG(cg_norm_song);
  139. #endif
  140. break;
  141. case QK_MAGIC_TOGGLE_ALT_GUI:
  142. keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
  143. keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
  144. #ifdef AUDIO_ENABLE
  145. if (keymap_config.swap_ralt_rgui) {
  146. PLAY_SONG(ag_swap_song);
  147. } else {
  148. PLAY_SONG(ag_norm_song);
  149. }
  150. #endif
  151. break;
  152. case QK_MAGIC_TOGGLE_CTL_GUI:
  153. keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui;
  154. keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui;
  155. #ifdef AUDIO_ENABLE
  156. if (keymap_config.swap_rctl_rgui) {
  157. PLAY_SONG(cg_swap_song);
  158. } else {
  159. PLAY_SONG(cg_norm_song);
  160. }
  161. #endif
  162. break;
  163. case QK_MAGIC_TOGGLE_BACKSLASH_BACKSPACE:
  164. keymap_config.swap_backslash_backspace = !keymap_config.swap_backslash_backspace;
  165. break;
  166. case QK_MAGIC_TOGGLE_NKRO:
  167. clear_keyboard(); // clear first buffer to prevent stuck keys
  168. keymap_config.nkro = !keymap_config.nkro;
  169. break;
  170. case QK_MAGIC_EE_HANDS_LEFT:
  171. eeconfig_update_handedness(true);
  172. break;
  173. case QK_MAGIC_EE_HANDS_RIGHT:
  174. eeconfig_update_handedness(false);
  175. break;
  176. case QK_MAGIC_TOGGLE_GUI:
  177. keymap_config.no_gui = !keymap_config.no_gui;
  178. break;
  179. case QK_MAGIC_TOGGLE_CONTROL_CAPS_LOCK:
  180. keymap_config.swap_control_capslock = !keymap_config.swap_control_capslock;
  181. break;
  182. case QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK:
  183. keymap_config.swap_escape_capslock = !keymap_config.swap_escape_capslock;
  184. break;
  185. }
  186. eeconfig_update_keymap(&keymap_config);
  187. clear_keyboard(); // clear to prevent stuck keys
  188. return false;
  189. }
  190. }
  191. // Not a magic keycode so continue processing
  192. return true;
  193. }