logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (3702B)


  1. #include QMK_KEYBOARD_H
  2. // please change this value to the desired layer definitions
  3. #define LAYERNUM 3
  4. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  5. /*
  6. * | Knob: Layer +/- |
  7. * .------------------------------------------------.
  8. * | Volume Mute | Media Play/Pause | Hold: Layer 2 |
  9. * |-------------|------------------|---------------|
  10. * | Media Prev | Up | Media Next |
  11. * |-------------|------------------|---------------|
  12. * | Left | Down | Right |
  13. * '------------------------------------------------'
  14. */
  15. [0] =
  16. LAYOUT(
  17. KC_MUTE, KC_MPLY, MO(2) ,
  18. KC_MPRV, KC_UP , KC_MNXT,
  19. KC_LEFT, KC_DOWN , KC_RGHT
  20. ),
  21. /*
  22. * | Knob: Layer +/- |
  23. * .---------------------------------------------------.
  24. * | RGB Toggle | Media Play/Pause | Hold: Layer 2 |
  25. * |----------------|------------------|---------------|
  26. * | Media Previous | RGB Bright+ | Media Next |
  27. * |----------------|------------------|---------------|
  28. * | RGB Anim- | RGB Bright- | RGB Anim+ |
  29. * '---------------------------------------------------'
  30. */
  31. [1] =
  32. LAYOUT(
  33. UG_TOGG , KC_TRNS, KC_TRNS,
  34. KC_TRNS , UG_VALU, KC_TRNS,
  35. UG_PREV, UG_VALD, UG_NEXT
  36. ),
  37. /*
  38. * | Knob: Volume +/- |
  39. * .--------------------------------------.
  40. * | N/A | N/A | Hold: Layer 2 |
  41. * |--------------|-------|---------------|
  42. * | Clear EEPROM | Bootloader | Debug |
  43. * |--------------|-------|---------------|
  44. * | N/A | N/A | N/A |
  45. * '--------------------------------------'
  46. */
  47. [2] =
  48. LAYOUT(
  49. KC_NO , KC_NO, KC_TRNS,
  50. EE_CLR, QK_BOOT, DB_TOGG,
  51. KC_NO , KC_NO, KC_NO
  52. )
  53. };
  54. const rgblight_segment_t PROGMEM _base_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  55. {0, RGBLIGHT_LED_COUNT, HSV_BLUE}
  56. );
  57. const rgblight_segment_t PROGMEM _middle_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  58. {0, RGBLIGHT_LED_COUNT, HSV_GREEN}
  59. );
  60. const rgblight_segment_t PROGMEM _top_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  61. {0, RGBLIGHT_LED_COUNT, HSV_RED}
  62. );
  63. const rgblight_segment_t* const PROGMEM _rgb_layers[] =
  64. RGBLIGHT_LAYERS_LIST(
  65. _base_layer,
  66. _middle_layer,
  67. _top_layer
  68. );
  69. void keyboard_post_init_user(void) {
  70. rgblight_layers = _rgb_layers;
  71. }
  72. layer_state_t layer_state_set_user(layer_state_t state) {
  73. switch (get_highest_layer(state)) {
  74. case 0:
  75. rgblight_blink_layer(0, 500);
  76. break;
  77. case 1:
  78. rgblight_blink_layer(1, 500);
  79. break;
  80. case 2:
  81. rgblight_blink_layer(2, 500);
  82. break;
  83. }
  84. return state;
  85. }
  86. uint8_t selected_layer = 0;
  87. bool encoder_update_user(uint8_t index, bool clockwise) {
  88. if (index == 0) {
  89. if (layer_state_is(2)) {
  90. if (clockwise) {
  91. tap_code(KC_VOLU);
  92. } else {
  93. tap_code(KC_VOLD);
  94. }
  95. } else {
  96. if (clockwise && selected_layer < (LAYERNUM-2)) { /* Prevent switch to layer 2 using encoder */
  97. selected_layer++;
  98. layer_move(selected_layer);
  99. } else if (!clockwise && selected_layer > 0) {
  100. selected_layer--;
  101. layer_move(selected_layer);
  102. }
  103. }
  104. }
  105. return true;
  106. }