keymap.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /*
  2. Copyright 2019 Josh Johnson 2021 peepeetee
  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. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include QMK_KEYBOARD_H
  15. #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  16. static uint32_t rgb_preview_timer = 0;
  17. #endif
  18. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  19. // Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
  20. [0] = LAYOUT(
  21. KC_MPLY, KC_MUTE,
  22. TG(3), TG(2), TG(1), TG(0),
  23. KC_PSCR, KC_SLCK, KC_PAUS, A(KC_F4),
  24. KC_INS, KC_HOME, KC_PGUP, KC_F12, //Transparent to let you go between layers
  25. KC_DEL, A(KC_F4), KC_PGDN, KC_CALCULATOR
  26. ),
  27. [1] = LAYOUT(
  28. KC_MPLY, KC_MUTE,
  29. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  30. KC_F7, KC_F8, KC_F9, KC_F10,
  31. KC_F4, KC_F5, KC_F6, KC_F11,
  32. KC_F1, KC_F2, KC_F3, KC_F12 //Transparent to let you go between layers
  33. ),
  34. //Layer 5 - Keyboard Lights, Programming and Special Functions
  35. [2] = LAYOUT(
  36. KC_MPLY, KC_MUTE,
  37. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Transparent to let you go between layers
  38. RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
  39. RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
  40. RGB_TOG, EEP_RST, RESET, KC_TRNS
  41. ),
  42. [3] = LAYOUT(
  43. KC_MPLY, KC_MUTE,
  44. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Transparent to let you go between layers
  45. RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
  46. RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
  47. RGB_TOG, EEP_RST, RESET, KC_TRNS
  48. )
  49. //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
  50. // [0] = LAYOUT(
  51. // KC_MPLY, KC_MUTE,
  52. // KC_F13, KC_F14, KC_F15, KC_F16,
  53. // KC_F17, KC_F18, KC_F19, KC_F20,
  54. // KC_F21, KC_F22, KC_F23, KC_F24,
  55. // OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
  56. // ),
  57. // [1] = LAYOUT(
  58. // KC_MPLY, KC_MUTE,
  59. // LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
  60. // LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
  61. // LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
  62. // KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  63. // ),
  64. //Layer 2 - Shift + Function Key Layer
  65. // [2] = LAYOUT(
  66. // KC_MPLY, KC_MUTE,
  67. // LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
  68. // LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
  69. // LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
  70. // KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  71. // ),
  72. // //Layer 3 - Control + Function Key
  73. // [3] = LAYOUT(
  74. // KC_MPLY, KC_MUTE,
  75. // LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
  76. // LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
  77. // LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
  78. // KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  79. // ),
  80. // //Layer 4 - Multimedia
  81. // [4] = LAYOUT(
  82. // KC_MPLY, KC_MUTE,
  83. // KC_MPRV, KC_MPLY, KC_U, KC_K,
  84. // KC_NO, KC_NO, KC_ENT, KC_X,
  85. // KC_NO, RESET, LSFT(KC_HASH), KC_J,
  86. // TG(5), KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  87. // ),
  88. // //Layer 5 - Keyboard Lights, Programming and Special Functions
  89. // [5] = LAYOUT(
  90. // KC_MPLY, KC_MUTE,
  91. // RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
  92. // RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
  93. // RGB_TOG, EEP_RST, RESET, KC_LSHIFT,
  94. // KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  95. // ),
  96. };
  97. const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  98. {0,16,HSV_WHITE}
  99. );
  100. const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  101. {0,16,HSV_ORANGE}
  102. );
  103. const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  104. {0,16,HSV_RED}
  105. );
  106. const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  107. {0,16,HSV_BLUE}
  108. );
  109. // const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  110. // {0,16,HSV_WHITE}
  111. // );
  112. // const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  113. // {0,16,HSV_TEAL}
  114. // );
  115. const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
  116. my_layer0_layer,
  117. my_layer1_layer,
  118. my_layer2_layer,
  119. my_layer3_layer//,
  120. // my_layer4_layer,
  121. // my_layer5_layer
  122. );
  123. bool encoder_update_user(uint8_t index, bool clockwise) {
  124. if (index == 0) { /* Left Encoder */
  125. if (clockwise) {
  126. tap_code(KC_MPRV);
  127. } else {
  128. tap_code(KC_MNXT);
  129. }
  130. } else if (index == 1) { /* Right Encoder */
  131. if (clockwise) {
  132. tap_code(KC_VOLD);
  133. } else {
  134. tap_code(KC_VOLU);
  135. }
  136. }
  137. return true;
  138. }
  139. void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
  140. // Allow for a preview of changes when modifying RGB
  141. # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  142. switch (keycode) {
  143. case RGB_TOG ... VLK_TOG:
  144. for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
  145. rgblight_set_layer_state(i, false);
  146. }
  147. rgb_preview_timer = timer_read32();
  148. break;
  149. }
  150. # endif
  151. return;
  152. }
  153. //Set the appropriate layer color
  154. layer_state_t layer_state_set_user(layer_state_t state) {
  155. rgblight_set_layer_state(0, false);
  156. rgblight_set_layer_state(1, layer_state_cmp(state, 1));
  157. rgblight_set_layer_state(2, layer_state_cmp(state, 2));
  158. rgblight_set_layer_state(3, layer_state_cmp(state, 3));
  159. // rgblight_set_layer_state(4, layer_state_cmp(state, 4));
  160. // rgblight_set_layer_state(5, layer_state_cmp(state, 5));
  161. return state;
  162. }
  163. void keyboard_post_init_user(void) {
  164. //Enable the LED layers
  165. rgblight_layers = my_rgb_layers;
  166. layer_state_set_user(layer_state);
  167. }
  168. void matrix_scan_user(void) {
  169. # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  170. // Allow preview for
  171. if (rgb_preview_timer && TIMER_DIFF_32(timer_read32(), rgb_preview_timer) > PREVIEW_TIMEOUT) {
  172. rgb_preview_timer = 0;
  173. default_layer_state_set_user(default_layer_state);
  174. layer_state_set_user(layer_state);
  175. led_update_user((led_t) host_keyboard_leds());
  176. }
  177. # endif
  178. }
  179. //EEPROM Reset Function
  180. void eeconfig_init_user(void) {
  181. rgblight_enable(); // Enable RGB by default
  182. rgblight_sethsv_orange(); // Set it to orange by default
  183. }