keymap.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. #ifdef BACKLIGHT_ENABLE
  4. #include "backlight.h"
  5. #endif
  6. #ifdef AUDIO_ENABLE
  7. #include "audio.h"
  8. #endif
  9. void backlight_toggle(void){
  10. };
  11. enum roadkit_layers {
  12. _NUMPAD,
  13. _NAVIGATION,
  14. _EXCEL,
  15. _ADJUST,
  16. _DYN
  17. };
  18. enum minivan_keycodes {
  19. NUMPAD = SAFE_RANGE,
  20. NAVIGATION,
  21. EXCEL,
  22. NUMPAD_LOCK,
  23. NAVIGATION_LOCK,
  24. EXCEL_LOCK,
  25. PARENS,
  26. BRACKETS,
  27. BRACES,
  28. BACKLIT,
  29. MACSLEEP,
  30. DYNAMIC_MACRO_RANGE,
  31. };
  32. #include "dynamic_macro.h"
  33. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  34. [_NUMPAD] = LAYOUT_numpad_4x4( /* Numpad */
  35. KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
  36. KC_KP_4, KC_KP_5, KC_KP_6, \
  37. KC_KP_1, KC_KP_2, KC_KP_3, NAVIGATION, \
  38. EXCEL, KC_KP_DOT
  39. ),
  40. [_EXCEL] = LAYOUT_numpad_4x4( /* Excel related */
  41. KC_KP_SLASH, KC_KP_ASTERISK, KC_MINS, KC_TAB, \
  42. KC_QUOT, KC_KP_EQUAL, PARENS, \
  43. KC_DQT, BRACKETS, BRACES, _______, \
  44. _______, MO(_DYN)
  45. ),
  46. [_NAVIGATION] = LAYOUT_numpad_4x4( /* Navigation */
  47. KC_HOME, _______, KC_PGUP, KC_TAB, \
  48. KC_END, KC_UP, KC_PGDN, \
  49. KC_LEFT, KC_DOWN, KC_RIGHT, _______, \
  50. _______, MO(_DYN)
  51. ),
  52. [_ADJUST] = LAYOUT_numpad_4x4( /* Adjustments */
  53. KC_NUMLOCK, MACSLEEP, BACKLIT, _______, \
  54. KC_BSPC, _______, KC_DEL, \
  55. EXCEL_LOCK, NUMPAD_LOCK, NAVIGATION_LOCK, _______, \
  56. _______, _______
  57. ),
  58. [_DYN] = LAYOUT_numpad_4x4( /* DYNAMIC MACRO */
  59. DYN_REC_START1, DYN_REC_START2, _______, _______, \
  60. _______, _______, _______, \
  61. DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
  62. _______, _______
  63. ),
  64. };
  65. #ifdef AUDIO_ENABLE
  66. float tone_startup[][2] = SONG(STARTUP_SOUND);
  67. float tone_numpad[][2] = SONG(QWERTY_SOUND);
  68. float tone_excel[][2] = SONG(DVORAK_SOUND);
  69. float tone_navigation[][2] = SONG(COLEMAK_SOUND);
  70. float tone_plover[][2] = SONG(PLOVER_SOUND);
  71. float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
  72. float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
  73. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  74. #endif
  75. void persistant_default_layer_set(uint16_t default_layer) {
  76. eeconfig_update_default_layer(default_layer);
  77. default_layer_set(default_layer);
  78. }
  79. bool fn_tap_used = false; // sets to false when space is pressed,
  80. // sets to true when any other key is pressed,
  81. //when space is lifted, if another key was prssed, don't send space.
  82. uint16_t fn_keycode = 0; // stores which spacebar was used, either raise or lower...
  83. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  84. if (!process_record_dynamic_macro(keycode, record)) {
  85. return false;
  86. }
  87. switch (keycode) {
  88. case NAVIGATION: // This key is enter if tapped, navigation if held
  89. if (record->event.pressed) {
  90. fn_keycode = NAVIGATION; // these two lines figure out if the next action is
  91. fn_tap_used = false;
  92. layer_on(_NAVIGATION);
  93. update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
  94. } else {
  95. layer_off(_NAVIGATION);
  96. update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
  97. if(!fn_tap_used && fn_keycode == NAVIGATION ){
  98. register_code(KC_KP_ENTER);
  99. unregister_code(KC_KP_ENTER);
  100. fn_keycode = 0;
  101. fn_tap_used = false;
  102. }
  103. }
  104. return false;
  105. break;
  106. case EXCEL:
  107. if (record->event.pressed) {
  108. fn_keycode = EXCEL;
  109. fn_tap_used = false;
  110. layer_on(_EXCEL);
  111. update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
  112. } else {
  113. layer_off(_EXCEL);
  114. update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
  115. if(!fn_tap_used && fn_keycode == EXCEL ){
  116. register_code(KC_KP_0);
  117. unregister_code(KC_KP_0);
  118. fn_keycode = 0;
  119. fn_tap_used = false;
  120. }
  121. }
  122. return false;
  123. break;
  124. default:
  125. fn_tap_used = true;
  126. break; // don't return because this just handles the spacebars.
  127. }
  128. // this is the normal keycode processing switch from Planck default layout.
  129. switch (keycode) {
  130. case NUMPAD_LOCK:
  131. if (record->event.pressed) {
  132. #ifdef AUDIO_ENABLE
  133. PLAY_NOTE_ARRAY(tone_numpad, false, 0);
  134. #endif
  135. persistant_default_layer_set(1UL<<_NUMPAD);
  136. }
  137. return false;
  138. break;
  139. case NAVIGATION_LOCK:
  140. if (record->event.pressed) {
  141. #ifdef AUDIO_ENABLE
  142. PLAY_NOTE_ARRAY(tone_navigation, false, 0);
  143. #endif
  144. persistant_default_layer_set(1UL<<_NAVIGATION);
  145. }
  146. return false;
  147. break;
  148. case EXCEL_LOCK:
  149. if (record->event.pressed) {
  150. #ifdef AUDIO_ENABLE
  151. PLAY_NOTE_ARRAY(tone_excel, false, 0);
  152. #endif
  153. persistant_default_layer_set(1UL<<_EXCEL);
  154. }
  155. return false;
  156. break;
  157. case PARENS:
  158. if (record->event.pressed) {
  159. register_code(KC_RSFT);
  160. register_code(KC_9);
  161. unregister_code(KC_9);
  162. register_code(KC_0);
  163. unregister_code(KC_0);
  164. register_code(KC_RSFT);
  165. register_code(KC_LEFT);
  166. unregister_code(KC_LEFT);
  167. }
  168. return false;
  169. break;
  170. case BRACKETS:
  171. if (record->event.pressed) {
  172. register_code(KC_LBRC);
  173. unregister_code(KC_LBRC);
  174. register_code(KC_RBRC);
  175. unregister_code(KC_RBRC);
  176. register_code(KC_LEFT);
  177. unregister_code(KC_LEFT);
  178. }
  179. return false;
  180. break;
  181. case BRACES:
  182. if (record->event.pressed) {
  183. register_code(KC_RSFT);
  184. register_code(KC_LBRC);
  185. unregister_code(KC_LBRC);
  186. register_code(KC_RBRC);
  187. unregister_code(KC_RBRC);
  188. unregister_code(KC_RSFT);
  189. register_code(KC_LEFT);
  190. unregister_code(KC_LEFT);
  191. }
  192. return false;
  193. break;
  194. case BACKLIT:
  195. if (record->event.pressed) {
  196. #ifdef BACKLIGHT_ENABLE
  197. backlight_step();
  198. #endif
  199. }
  200. return false;
  201. break;
  202. case MACSLEEP:
  203. if (record->event.pressed) {
  204. register_code(KC_RSFT);
  205. register_code(KC_RCTL);
  206. register_code(KC_POWER);
  207. unregister_code(KC_POWER);
  208. unregister_code(KC_RCTL);
  209. unregister_code(KC_RSFT);
  210. }
  211. return false;
  212. break;
  213. }
  214. return true;
  215. }