You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
11 KiB

  1. /* Copyright 2021 3araht
  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 QMK_KEYBOARD_H
  17. #include "version.h"
  18. #define DF_COLE DF(_COLEMAK)
  19. #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
  20. #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
  21. #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
  22. #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
  23. #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
  24. #define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
  25. #define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
  26. #define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
  27. #define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
  28. #define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
  29. #define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
  30. #define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
  31. #define _________________NUMBER_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5
  32. // #define _________________NUMBER_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0
  33. #define _________________FUNC__L___________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
  34. // #define _________________FUNC__R___________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
  35. // Defines names for use in layer keycodes and the keymap
  36. enum layer_names {
  37. #ifndef PEDAL_NORMALLY_CLOSED
  38. _OPEN,
  39. #endif
  40. _CLOSE,
  41. #ifdef PEDAL_NORMALLY_CLOSED
  42. _OPEN,
  43. #endif
  44. _QWERTY,
  45. _COLEMAK,
  46. _MISC,
  47. _FN
  48. };
  49. enum custom_keycodes {
  50. VERSION = SAFE_RANGE
  51. };
  52. // Alias layout macros that expand groups of keys.
  53. #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
  54. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  55. [_OPEN] = LAYOUT(
  56. MI_Gs_1, MI_As_1, MI_Cs_2, MI_F_2, MI_Gs_3,
  57. MI_E_1, MI_A_1, MI_G_2, MI_Ds_2, MI_F_3, MI_As_2, MI_F_1,
  58. MI_D_2, MI_A_2, MI_C_3, MI_E_3, MI_C_2, MI_G_1, MI_B,
  59. MI_E_2, MI_Gs_2, MI_B_2, MI_D_3, MI_Fs_3, MI_Cs_3, MI_Fs_1,
  60. MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
  61. MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
  62. MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
  63. MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
  64. MI_G_2, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
  65. MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
  66. MI_Gs_2, MI_As_2, MI_Ds_3, MI_F_4, MI_Ds_4, MI_Fs_4, MI_A_4, MI_Cs_5, MI_G_4
  67. ),
  68. [_CLOSE] = LAYOUT(
  69. MI_Gs_1, MI_As_1, MI_Ds_2, MI_Ds_3, MI_G_3,
  70. MI_D_1, MI_D_2, MI_As_2, MI_C_3, MI_Cs_2, MI_C_2, MI_Fs_1,
  71. MI_G_1, MI_G_2, MI_B_2, MI_D_3, MI_F_3, MI_Fs_2, MI_B,
  72. MI_A_1, MI_E_2, MI_A_2, MI_Cs_3, MI_E_3, MI_Gs_2, MI_B_1,
  73. MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
  74. MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
  75. MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
  76. MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
  77. MI_G_2, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
  78. MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
  79. MI_Gs_2, MI_As_2, MI_Ds_3, MI_F_4, MI_E_4, MI_Gs_4, MI_B_4, MI_E_5, MI_Ds_4
  80. ),
  81. [_QWERTY] = LAYOUT_wrapper(
  82. _________________NUMBER_L__________________,
  83. KC_GESC, KC_TAB, _________________QWERTY_L1_________________,
  84. KC_CAPS, _________________QWERTY_L2_________________, KC_H,
  85. KC_LSFT, _________________QWERTY_L3_________________, KC_N,
  86. KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
  87. MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
  88. KC_6, KC_7, KC_8, KC_9, KC_BSPC,
  89. _________________QWERTY_R1_________________, KC_DEL,
  90. KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
  91. KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
  92. KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  93. ),
  94. [_COLEMAK] = LAYOUT_wrapper(
  95. _________________NUMBER_L__________________,
  96. KC_GESC, KC_TAB, _________________COLEMAK_L1________________,
  97. KC_LCTL, _________________COLEMAK_L2________________, KC_ENT,
  98. KC_LSFT, _________________COLEMAK_L3________________, KC_M,
  99. KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
  100. MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
  101. KC_6, KC_7, KC_8, KC_9, KC_BSPC,
  102. _________________COLEMAK_R1________________, KC_DEL,
  103. KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
  104. KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
  105. KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  106. ),
  107. [_MISC] = LAYOUT_wrapper(
  108. _________________FUNC__L___________________,
  109. _______, _______, _______, _______, _______, _______, _______,
  110. _______, _______, _______, _______, _______, _______, _______,
  111. _______, _______, _______, _______, _______, _______, _______,
  112. _______, _______, _______, _______, _______, _______, _______, _______,
  113. _______, _______, _______, _______, KC_F10, _______,
  114. KC_F6, KC_F7, KC_F8, KC_F9, _______,
  115. _______, _______, _______, _______, _______, _______,
  116. _______, _______, _______, _______, _______, _______, KC_QUOT, _______,
  117. _______, _______, _______, _______, _______, _______, _______, _______,
  118. _______, _______, _______, _______, _______, _______, _______, _______, _______
  119. ),
  120. [_FN] = LAYOUT(
  121. DF_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  122. XXXXXXX, DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  123. DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  124. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  125. XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  126. _______, KC_VOLD, KC_VOLU, MI_VELD, MI_VELU, _______,
  127. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  128. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
  129. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  130. RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
  131. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD, EEP_RST, RGB_TOG
  132. )
  133. };
  134. #if defined(ENCODER_MAP_ENABLE)
  135. const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
  136. [_OPEN] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
  137. [_CLOSE] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
  138. [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
  139. [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
  140. [_MISC] = { ENCODER_CCW_CW(_______, _______) },
  141. [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
  142. };
  143. #endif
  144. void my_init(void){
  145. // Set octave to MI_OCT_0
  146. midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
  147. // avoid using 127 since it is used as a special number in some sound sources.
  148. midi_config.velocity = MIDI_INITIAL_VELOCITY;
  149. }
  150. void eeconfig_init_user(void) { // EEPROM is getting reset!
  151. midi_init();
  152. my_init();
  153. #ifdef RGB_MATRIX_ENABLE
  154. rgb_matrix_enable();
  155. rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD);
  156. rgb_matrix_sethsv(HSV_BLUE);
  157. rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
  158. // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
  159. #endif
  160. }
  161. void keyboard_post_init_user(void) {
  162. my_init();
  163. // party mode (for LED soldering test. Enable rainbow color effect, and disable led_indicator to check all LEDs)
  164. rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
  165. };
  166. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  167. switch (keycode) {
  168. case VERSION: // Output firmware info.
  169. if (record->event.pressed) {
  170. SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
  171. }
  172. break;
  173. }
  174. return true;
  175. }
  176. #ifdef RGB_MATRIX_ENABLE
  177. void rgb_matrix_indicators_user(void) {
  178. if (rgb_matrix_is_enabled()) { // turn the lights on when it is enabled.
  179. uint8_t layer = biton32(layer_state);
  180. switch (layer) {
  181. case _CLOSE:
  182. // rgb_matrix_set_color(pgm_read_byte(&convert_led_location2number[11]), RGB_RED); // RGB_TOG <- too heavy.
  183. // Close state indicator
  184. rgb_matrix_set_color( 0, RGB_DARKWHITE); // oc
  185. break;
  186. case _FN:
  187. // left hand side
  188. rgb_matrix_set_color( 46, RGB_DARKORANGE); // DF_OPEN
  189. rgb_matrix_set_color( 48, RGB_DARKWHITE); // DF_QWER
  190. rgb_matrix_set_color( 60, RGB_DARKWHITE); // DF_COLE
  191. rgb_matrix_set_color( 73, RGB_DARKYELLOW); // AG_SWAP
  192. rgb_matrix_set_color( 72, RGB_DARKYELLOW); // AG_NORM
  193. // right hand side
  194. rgb_matrix_set_color( 1, RGB_DARKYELLOW); // MI_OCTD
  195. rgb_matrix_set_color(13, RGB_DARKGREEN); // MI_OCTU
  196. rgb_matrix_set_color(14, RGB_DARKYELLOW); // MI_VELD
  197. rgb_matrix_set_color(25, RGB_DARKGREEN); // MI_VELU
  198. rgb_matrix_set_color( 6, RGB_DARKBLUE); // RGB_SAD
  199. rgb_matrix_set_color( 9, RGB_DARKBLUE); // RGB_SAI
  200. rgb_matrix_set_color(18, RGB_DARKBLUE); // RGB_HUD
  201. rgb_matrix_set_color(21, RGB_DARKBLUE); // RGB_HUI
  202. rgb_matrix_set_color(29, RGB_DARKBLUE); // RGB_SPD
  203. rgb_matrix_set_color(32, RGB_DARKBLUE); // RGB_SPI
  204. rgb_matrix_set_color(36, RGB_DARKBLUE); // RGB_VAD
  205. rgb_matrix_set_color(39, RGB_DARKBLUE); // RGB_VAI
  206. rgb_matrix_set_color(31, RGB_DARKBLUE); // RGB_RMOD
  207. rgb_matrix_set_color(37, RGB_DARKBLUE); // RGB_MOD
  208. rgb_matrix_set_color(38, RGB_DARKPINK); // EEP_RST
  209. rgb_matrix_set_color(40, RGB_DARKRED); // RGB_TOG
  210. rgb_matrix_set_color(41, RGB_DARKORANGE); // _FN
  211. break;
  212. }
  213. }
  214. }
  215. #endif