keymap.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include QMK_KEYBOARD_H
  2. #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  3. static uint32_t rgb_preview_timer = 0;
  4. #endif
  5. extern rgblight_config_t rgblight_config;
  6. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  7. //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
  8. [0] = LAYOUT_ortho_4x4(
  9. KC_F13, KC_F14, KC_F15, KC_F16,
  10. KC_F17, KC_F18, KC_F19, KC_F20,
  11. KC_F21, KC_F22, KC_F23, KC_F24,
  12. OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
  13. ),
  14. [1] = LAYOUT_ortho_4x4(
  15. LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
  16. LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
  17. LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
  18. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  19. ),
  20. //Layer 2 - Shift + Function Key Layer
  21. [2] = LAYOUT_ortho_4x4(
  22. LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
  23. LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
  24. LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
  25. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  26. ),
  27. //Layer 3 - Control + Function Key
  28. [3] = LAYOUT_ortho_4x4(
  29. LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
  30. LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
  31. LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
  32. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  33. ),
  34. //Layer 4 - Multimedia
  35. [4] = LAYOUT_ortho_4x4(
  36. KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU,
  37. KC_NO, KC_NO, KC_NO, KC_MUTE,
  38. KC_NO, QK_BOOT, EE_CLR, KC_VOLD,
  39. TG(5), KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  40. ),
  41. //Layer 5 - Keyboard Lights, Programming and Special Functions
  42. [5] = LAYOUT_ortho_4x4(
  43. RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
  44. RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
  45. RGB_TOG, EE_CLR, QK_BOOT, KC_LSFT,
  46. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  47. ),
  48. };
  49. const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  50. {0,16,HSV_ORANGE}
  51. );
  52. const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  53. {0,16,HSV_GREEN}
  54. );
  55. const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  56. {0,16,HSV_RED}
  57. );
  58. const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  59. {0,16,HSV_BLUE}
  60. );
  61. const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  62. {0,16,HSV_WHITE}
  63. );
  64. const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  65. {0,16,HSV_TEAL}
  66. );
  67. const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
  68. my_layer0_layer,
  69. my_layer1_layer,
  70. my_layer2_layer,
  71. my_layer3_layer,
  72. my_layer4_layer,
  73. my_layer5_layer
  74. );
  75. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  76. return true;
  77. }
  78. void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
  79. // Allow for a preview of changes when modifying RGB
  80. # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  81. switch (keycode) {
  82. case RGB_TOG ... QK_VELOCIKEY_TOGGLE:
  83. for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
  84. rgblight_set_layer_state(i, false);
  85. }
  86. rgb_preview_timer = timer_read32();
  87. break;
  88. }
  89. # endif
  90. return;
  91. }
  92. //Set the appropriate layer color
  93. layer_state_t layer_state_set_user(layer_state_t state) {
  94. rgblight_set_layer_state(1, layer_state_cmp(state, 1));
  95. rgblight_set_layer_state(2, layer_state_cmp(state, 2));
  96. rgblight_set_layer_state(3, layer_state_cmp(state, 3));
  97. rgblight_set_layer_state(4, layer_state_cmp(state, 4));
  98. rgblight_set_layer_state(5, layer_state_cmp(state, 5));
  99. return state;
  100. }
  101. void keyboard_post_init_user(void) {
  102. //Enable the LED layers
  103. rgblight_layers = my_rgb_layers;
  104. layer_state_set_user(layer_state);
  105. }
  106. void matrix_scan_user(void) {
  107. # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
  108. // Allow preview for
  109. if (rgb_preview_timer && TIMER_DIFF_32(timer_read32(), rgb_preview_timer) > PREVIEW_TIMEOUT) {
  110. rgb_preview_timer = 0;
  111. default_layer_state_set_user(default_layer_state);
  112. layer_state_set_user(layer_state);
  113. led_update_user((led_t) host_keyboard_leds());
  114. }
  115. # endif
  116. }
  117. //EEPROM Reset Function
  118. void eeconfig_init_user(void) {
  119. rgblight_enable(); // Enable RGB by default
  120. rgblight_sethsv(HSV_ORANGE); // Set it to orange by default
  121. }