process_records.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. #include "drashna.h"
  2. uint16_t copy_paste_timer;
  3. __attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
  4. __attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; }
  5. // Defines actions tor my global custom keycodes. Defined in drashna.h file
  6. // Then runs the _keymap's record handier if not processed here
  7. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  8. // If console is enabled, it will print the matrix position and status of each key pressed
  9. #ifdef KEYLOGGER_ENABLE
  10. # if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_keebio_iris_rev2)
  11. xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.row, record->event.key.col, record->event.pressed);
  12. # else
  13. xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
  14. # endif
  15. #endif // KEYLOGGER_ENABLE
  16. #ifdef OLED_DRIVER_ENABLE
  17. process_record_user_oled(keycode, record);
  18. #endif // OLED
  19. if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
  20. #ifdef RGB_MATRIX_ENABLE
  21. && process_record_user_rgb_matrix(keycode, record)
  22. #endif
  23. #ifdef RGBLIGHT_ENABLE
  24. && process_record_user_rgb_light(keycode, record)
  25. #endif
  26. ) {
  27. switch (keycode) {
  28. case KC_QWERTY ... KC_WORKMAN:
  29. if (record->event.pressed) {
  30. uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
  31. if (!mods) {
  32. set_single_persistent_default_layer(keycode - KC_QWERTY);
  33. } else if (mods & MOD_MASK_SHIFT) {
  34. set_single_persistent_default_layer(keycode - KC_QWERTY + 4);
  35. } else if (mods & MOD_MASK_CTRL) {
  36. set_single_persistent_default_layer(keycode - KC_QWERTY + 8);
  37. }
  38. }
  39. break;
  40. case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
  41. if (!record->event.pressed) {
  42. #ifndef MAKE_BOOTLOADER
  43. uint8_t temp_mod = mod_config(get_mods());
  44. uint8_t temp_osm = mod_config(get_oneshot_mods());
  45. clear_mods();
  46. clear_oneshot_mods();
  47. #endif
  48. send_string_with_delay_P(PSTR("bin/qmk"), TAP_CODE_DELAY);
  49. #ifndef MAKE_BOOTLOADER
  50. if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
  51. #endif
  52. {
  53. send_string_with_delay_P(PSTR(" flash "), TAP_CODE_DELAY);
  54. #ifndef MAKE_BOOTLOADER
  55. } else {
  56. send_string_with_delay_P(PSTR(" compile "), TAP_CODE_DELAY);
  57. #endif
  58. }
  59. send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY);
  60. #ifdef RGB_MATRIX_SPLIT_RIGHT
  61. send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY);
  62. # ifndef OLED_DRIVER_ENABLE
  63. send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY);
  64. # endif
  65. #endif
  66. send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
  67. }
  68. break;
  69. case VRSN: // Prints firmware version
  70. if (record->event.pressed) {
  71. send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
  72. }
  73. break;
  74. case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
  75. #ifdef TAP_DANCE_ENABLE
  76. if (record->event.pressed) {
  77. for (uint8_t index = 0; index < 4; index++) {
  78. diablo_timer[index].key_interval = 0;
  79. }
  80. }
  81. #endif // TAP_DANCE_ENABLE
  82. break;
  83. case KC_CCCV: // One key copy/paste
  84. if (record->event.pressed) {
  85. copy_paste_timer = timer_read();
  86. } else {
  87. if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
  88. tap_code16(LCTL(KC_C));
  89. } else { // Tap, paste
  90. tap_code16(LCTL(KC_V));
  91. }
  92. }
  93. break;
  94. #ifdef UNICODE_ENABLE
  95. case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
  96. if (record->event.pressed) {
  97. send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
  98. }
  99. break;
  100. case UC_TABL: // ┬─┬ノ( º _ ºノ)
  101. if (record->event.pressed) {
  102. send_unicode_string("┬─┬ノ( º _ ºノ)");
  103. }
  104. break;
  105. case UC_SHRG: // ¯\_(ツ)_/¯
  106. if (record->event.pressed) {
  107. send_unicode_string("¯\\_(ツ)_/¯");
  108. }
  109. break;
  110. case UC_DISA: // ಠ_ಠ
  111. if (record->event.pressed) {
  112. send_unicode_string("ಠ_ಠ");
  113. }
  114. break;
  115. #endif
  116. case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
  117. #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
  118. if (record->event.pressed) {
  119. userspace_config.rgb_layer_change ^= 1;
  120. dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
  121. eeconfig_update_user(userspace_config.raw);
  122. if (userspace_config.rgb_layer_change) {
  123. # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
  124. rgblight_enable_noeeprom();
  125. # endif
  126. layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
  127. # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
  128. } else {
  129. rgblight_disable_noeeprom();
  130. # endif
  131. }
  132. }
  133. #endif // RGBLIGHT_ENABLE
  134. break;
  135. #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
  136. case RGB_TOG:
  137. // Split keyboards need to trigger on key-up for edge-case issue
  138. # ifndef SPLIT_KEYBOARD
  139. if (record->event.pressed) {
  140. # else
  141. if (!record->event.pressed) {
  142. # endif
  143. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  144. rgblight_toggle();
  145. # endif
  146. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  147. rgb_matrix_toggle();
  148. # endif
  149. }
  150. return false;
  151. break;
  152. case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
  153. if (record->event.pressed) {
  154. bool is_eeprom_updated;
  155. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  156. // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
  157. if (userspace_config.rgb_layer_change) {
  158. userspace_config.rgb_layer_change = false;
  159. dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
  160. is_eeprom_updated = true;
  161. }
  162. # endif
  163. # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
  164. if (userspace_config.rgb_matrix_idle_anim) {
  165. userspace_config.rgb_matrix_idle_anim = false;
  166. dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
  167. is_eeprom_updated = true;
  168. }
  169. # endif
  170. if (is_eeprom_updated) {
  171. eeconfig_update_user(userspace_config.raw);
  172. }
  173. }
  174. # if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES)
  175. if (keycode == RGB_MODE_FORWARD && record->event.pressed) {
  176. uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
  177. if (shifted) {
  178. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  179. rgblight_step_reverse();
  180. # endif
  181. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  182. rgb_matrix_step_reverse();
  183. # endif
  184. } else {
  185. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  186. rgblight_step();
  187. # endif
  188. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  189. rgb_matrix_step();
  190. # endif
  191. }
  192. } else if (keycode == RGB_MODE_REVERSE && record->event.pressed) {
  193. uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
  194. if (shifted) {
  195. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  196. rgblight_step();
  197. # endif
  198. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  199. rgb_matrix_step();
  200. # endif
  201. } else {
  202. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  203. rgblight_step_reverse();
  204. # endif
  205. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  206. rgb_matrix_step_reverse();
  207. # endif
  208. }
  209. } else if (keycode == RGB_HUI) {
  210. # ifndef SPLIT_KEYBOARD
  211. if (record->event.pressed) {
  212. # else
  213. if (!record->event.pressed) {
  214. # endif
  215. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  216. rgblight_increase_hue();
  217. # endif
  218. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  219. rgb_matrix_increase_hue();
  220. # endif
  221. }
  222. } else if (keycode == RGB_HUD) {
  223. # ifndef SPLIT_KEYBOARD
  224. if (record->event.pressed) {
  225. # else
  226. if (!record->event.pressed) {
  227. # endif
  228. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  229. rgblight_decrease_hue();
  230. # endif
  231. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  232. rgb_matrix_decrease_hue();
  233. # endif
  234. }
  235. } else if (keycode == RGB_SAI) {
  236. # ifndef SPLIT_KEYBOARD
  237. if (record->event.pressed) {
  238. # else
  239. if (!record->event.pressed) {
  240. # endif
  241. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  242. rgblight_increase_sat();
  243. # endif
  244. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  245. rgb_matrix_increase_sat();
  246. # endif
  247. }
  248. } else if (keycode == RGB_SAD) {
  249. # ifndef SPLIT_KEYBOARD
  250. if (record->event.pressed) {
  251. # else
  252. if (!record->event.pressed) {
  253. # endif
  254. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  255. rgblight_decrease_sat();
  256. # endif
  257. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  258. rgb_matrix_decrease_sat();
  259. # endif
  260. }
  261. } else if (keycode == RGB_VAI) {
  262. # ifndef SPLIT_KEYBOARD
  263. if (record->event.pressed) {
  264. # else
  265. if (!record->event.pressed) {
  266. # endif
  267. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  268. rgblight_increase_val();
  269. # endif
  270. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  271. rgb_matrix_increase_val();
  272. # endif
  273. }
  274. } else if (keycode == RGB_VAD) {
  275. # ifndef SPLIT_KEYBOARD
  276. if (record->event.pressed) {
  277. # else
  278. if (!record->event.pressed) {
  279. # endif
  280. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  281. rgblight_decrease_val();
  282. # endif
  283. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  284. rgb_matrix_decrease_val();
  285. # endif
  286. }
  287. } else if (keycode == RGB_SPI) {
  288. if (record->event.pressed) {
  289. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  290. rgblight_increase_speed();
  291. # endif
  292. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  293. rgb_matrix_increase_speed();
  294. # endif
  295. }
  296. } else if (keycode == RGB_SPD) {
  297. if (record->event.pressed) {
  298. # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
  299. rgblight_decrease_speed();
  300. # endif
  301. # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
  302. rgb_matrix_decrease_speed();
  303. # endif
  304. }
  305. }
  306. return false;
  307. # endif
  308. #endif
  309. }
  310. }
  311. return true;
  312. }