keymap.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include QMK_KEYBOARD_H
  2. #include "xulkal.h"
  3. #ifdef PROTOCOL_LUFA
  4. #include "lufa.h"
  5. #include "split_util.h"
  6. #endif
  7. #ifdef OLED_DRIVER_ENABLE
  8. #include "oled_driver.h"
  9. #endif
  10. #define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
  11. // Define your non-alpha grouping in this define's LAYOUT, and all your BASE_LAYERS will share the same mod/macro columns
  12. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  13. /* Qwerty Layout
  14. * ,------------------------------------------------. ,------------------------------------------------.
  15. * | GESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | BkSp |
  16. * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
  17. * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
  18. * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
  19. * |FN(CAPS)| A | S | D | F | G | ` | | ' | H | J | K | L | ; | Enter|
  20. * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  21. * | Sft[ | Z | X | C | V | B | RGB | |RGBRST| N | M | , | . | / | Sft] |
  22. * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  23. * | Ctrl | Win | LOWER| RAISE| Alt | Space|RGBRMOD| |RGBMOD| Space| Left | Up | Down | Right| Ctrl |
  24. * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
  25. * | Space| DEL | | Enter| Space|
  26. * `-------------' `-------------'
  27. */
  28. [_QWERTY] = EXPAND_LAYOUT( \
  29. _________________QWERTY_L1_________________, KC_MINS, KC_EQL, _________________QWERTY_R1_________________, \
  30. _________________QWERTY_L2_________________, KC_LBRC, KC_RBRC, _________________QWERTY_R2_________________, \
  31. _________________QWERTY_L3_________________, KC_GRV, KC_QUOT, _________________QWERTY_R3_________________, \
  32. _________________QWERTY_L4_________________, RGB_TOG, RGBRST, _________________QWERTY_R4_________________, \
  33. _________________QWERTY_L5_________________, RGB_RMOD, RGB_MOD, _________________QWERTY_R5_________________, \
  34. KC_SPC, KC_DEL, KC_ENT, KC_SPC \
  35. ),
  36. #ifndef GAMELAYER_DISABLE
  37. [_GAME] = EXPAND_LAYOUT( \
  38. ___________________GAME_L1_________________, KC_MINS, KC_EQL, ___________________GAME_R1_________________, \
  39. ___________________GAME_L2_________________, KC_LBRC, KC_RBRC, ___________________GAME_R2_________________, \
  40. ___________________GAME_L3_________________, KC_GRV, KC_QUOT, ___________________GAME_R3_________________, \
  41. ___________________GAME_L4_________________, RGB_TOG, RGBRST, ___________________GAME_R4_________________, \
  42. ___________________GAME_L5_________________, RGB_RMOD, RGB_MOD, ___________________GAME_R5_________________, \
  43. KC_SPC, KC_DEL, KC_ENT, KC_SPC \
  44. ),
  45. #endif
  46. [_LOWER] = EXPAND_LAYOUT( \
  47. __________________LOWER_L1_________________, KC_PMNS, KC_PPLS, __________________LOWER_R1_________________, \
  48. __________________LOWER_L2_________________, _______, _______, __________________LOWER_R2_________________, \
  49. __________________LOWER_L3_________________, _______, _______, __________________LOWER_R3_________________, \
  50. __________________LOWER_L4_________________, _______, _______, __________________LOWER_R4_________________, \
  51. __________________LOWER_L5_________________, _______, _______, __________________LOWER_R5_________________, \
  52. _______, _______, _______, _______ \
  53. ),
  54. [_RAISE] = EXPAND_LAYOUT( \
  55. __________________RAISE_L1_________________, _______, _______, __________________RAISE_R1_________________, \
  56. __________________RAISE_L2_________________, _______, _______, __________________RAISE_R2_________________, \
  57. __________________RAISE_L3_________________, _______, _______, __________________RAISE_R3_________________, \
  58. __________________RAISE_L4_________________, _______, _______, __________________RAISE_R4_________________, \
  59. __________________RAISE_L5_________________, _______, _______, __________________RAISE_R5_________________, \
  60. _______, _______, _______, _______ \
  61. ),
  62. #ifdef TRILAYER_ENABLED
  63. [_RAISE] = EXPAND_LAYOUT( \
  64. _________________ADJUST_L1_________________, _______, _______, _________________ADJUST_R1_________________, \
  65. _________________ADJUST_L2_________________, _______, _______, _________________ADJUST_R2_________________, \
  66. _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, \
  67. _________________ADJUST_L4_________________, _______, _______, _________________ADJUST_R4_________________, \
  68. _________________ADJUST_L5_________________, _______, _______, _________________ADJUST_R5_________________, \
  69. _______, _______, _______, _______ \
  70. ),
  71. #endif
  72. };
  73. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  74. #ifdef OLED_DRIVER_ENABLE
  75. static void render_logo(void) {
  76. static const char PROGMEM sol_logo[] = {
  77. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
  78. 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
  79. 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
  80. oled_write_P(sol_logo, false);
  81. }
  82. static void render_status(void) {
  83. // Render to mode icon
  84. static const char PROGMEM mode_logo[2][3] = {
  85. {0x97,0x98,0},
  86. {0xb7,0xb8,0} };
  87. oled_write_P(mode_logo[0], false);
  88. #if defined(RGB_MATRIX_ENABLE)
  89. static char buffer[20] = {0};
  90. snprintf(buffer, sizeof(buffer), " h%3d s%3d v%3d\n", rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val);
  91. oled_write(buffer, false);
  92. #endif
  93. oled_write_P(mode_logo[1], false);
  94. #if defined(RGB_MATRIX_ENABLE)
  95. snprintf(buffer, sizeof(buffer), " s%3d m%3d\n", rgb_matrix_config.speed, rgb_matrix_config.mode);
  96. oled_write(buffer, false);
  97. #endif
  98. // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
  99. oled_write_P(PSTR("Layer: "), false);
  100. switch (biton32(layer_state)) {
  101. case _QWERTY:
  102. #ifndef GAMELAYER_DISABLE
  103. switch (biton32(default_layer_state)) {
  104. case _QWERTY:
  105. oled_write_P(PSTR("Default\n"), false);
  106. break;
  107. case _GAME:
  108. oled_write_P(PSTR("Game\n"), false);
  109. break;
  110. default:
  111. oled_write_P(PSTR("Undefined\n"), false);
  112. break;
  113. }
  114. #else
  115. oled_write_P(PSTR("Default\n"), false);
  116. #endif
  117. break;
  118. case _LOWER:
  119. oled_write_P(PSTR("Lower\n"), false);
  120. break;
  121. case _RAISE:
  122. oled_write_P(PSTR("Raise\n"), false);
  123. break;
  124. #ifdef TRILAYER_ENABLED
  125. case _ADJUST:
  126. oled_write_P(PSTR("Adjust\n"), false);
  127. break;
  128. #endif
  129. default:
  130. oled_write_P(PSTR("Undefined\n"), false);
  131. }
  132. // Host Keyboard LED Status
  133. uint8_t led_usb_state = host_keyboard_leds();
  134. oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
  135. oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
  136. oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
  137. }
  138. void oled_task_user(void) {
  139. if (is_keyboard_master()) {
  140. render_status();
  141. } else {
  142. render_logo();
  143. oled_scroll_left();
  144. }
  145. }
  146. #endif