2
0

keymap.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #include QMK_KEYBOARD_H
  2. #include "bootloader.h"
  3. #ifdef PROTOCOL_LUFA
  4. #include "lufa.h"
  5. #include "split_util.h"
  6. #endif
  7. #ifdef SSD1306OLED
  8. #include "ssd1306.h"
  9. #endif
  10. #include "../lib/mode_icon_reader.c"
  11. #include "../lib/layer_state_reader.c"
  12. #include "../lib/host_led_state_reader.c"
  13. #include "../lib/logo_reader.c"
  14. #include "../lib/keylogger.c"
  15. #include "../lib/timelogger.c"
  16. extern keymap_config_t keymap_config;
  17. #ifdef RGBLIGHT_ENABLE
  18. //Following line allows macro to read current RGB settings
  19. extern rgblight_config_t rgblight_config;
  20. #endif
  21. extern uint8_t is_master;
  22. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  23. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  24. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  25. // entirely and just use numbers.
  26. #define _QWERTY 0
  27. #define _LOWER 3
  28. #define _RAISE 4
  29. #define _ADJUST 16
  30. enum custom_keycodes {
  31. LOWER = SAFE_RANGE,
  32. RAISE,
  33. ADJUST,
  34. RGBRST
  35. };
  36. #define KC______ KC_TRNS
  37. #define KC_XXXXX KC_NO
  38. #define KC_KANJI KC_GRV
  39. #define KC_LOWER LOWER
  40. #define KC_RAISE RAISE
  41. #define KC_RST RESET
  42. #define KC_LRST RGBRST
  43. #define KC_LTOG RGB_TOG
  44. #define KC_LHUI RGB_HUI
  45. #define KC_LHUD RGB_HUD
  46. #define KC_LSAI RGB_SAI
  47. #define KC_LSAD RGB_SAD
  48. #define KC_LVAI RGB_VAI
  49. #define KC_LVAD RGB_VAD
  50. #define KC_LSMOD RGB_SMOD
  51. #define KC_KNRM AG_NORM
  52. #define KC_KSWP AG_SWAP
  53. #define KC_GUAP LALT_T(KC_APP)
  54. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  55. [_QWERTY] = LAYOUT_kc( \
  56. //,-----------------------------------------. ,-----------------------------------------.
  57. ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
  58. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  59. LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\
  60. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  61. LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\
  62. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  63. LGUI, LOWER, BSPC, SPC, RAISE, GUAP \
  64. //`--------------------' `--------------------'
  65. ),
  66. [_LOWER] = LAYOUT_kc( \
  67. //,-----------------------------------------. ,-----------------------------------------.
  68. TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
  69. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  70. _____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
  71. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  72. _____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
  73. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  74. _____, _____, DEL, XXXXX, _____, APP \
  75. //`--------------------' `--------------------'
  76. ),
  77. [_RAISE] = LAYOUT_kc( \
  78. //,-----------------------------------------. ,-----------------------------------------.
  79. _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\
  80. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  81. _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\
  82. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  83. _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\
  84. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  85. _____, _____, XXXXX, XXXXX, _____, LALT \
  86. //`--------------------' `--------------------'
  87. ),
  88. [_ADJUST] = LAYOUT_kc( \
  89. //,-----------------------------------------. ,-----------------------------------------.
  90. RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
  91. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  92. LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
  93. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  94. LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
  95. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  96. _____, _____, XXXXX, XXXXX, _____, XXXXX \
  97. //`--------------------' `--------------------'
  98. )
  99. };
  100. int RGB_current_mode;
  101. // Setting ADJUST layer RGB back to default
  102. inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
  103. if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
  104. layer_on(layer3);
  105. } else {
  106. layer_off(layer3);
  107. }
  108. }
  109. void matrix_init_user(void) {
  110. #ifdef RGBLIGHT_ENABLE
  111. RGB_current_mode = rgblight_config.mode;
  112. #endif
  113. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  114. #ifdef SSD1306OLED
  115. iota_gfx_init(!has_usb()); // turns on the display
  116. #endif
  117. }
  118. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  119. #ifdef SSD1306OLED
  120. void matrix_scan_user(void) {
  121. iota_gfx_task();
  122. }
  123. inline void matrix_render_user(struct CharacterMatrix *matrix) {
  124. if (is_master) {
  125. matrix_write_ln(matrix, read_layer_state());
  126. matrix_write_ln(matrix, read_keylog());
  127. matrix_write_ln(matrix, read_keylogs());
  128. //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
  129. //matrix_write_ln(matrix, read_host_led_state());
  130. //matrix_write_ln(matrix, read_timelog());
  131. } else {
  132. matrix_write(matrix, read_logo());
  133. }
  134. }
  135. inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
  136. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  137. memcpy(dest->display, source->display, sizeof(dest->display));
  138. dest->dirty = true;
  139. }
  140. }
  141. void iota_gfx_task_user(void) {
  142. struct CharacterMatrix matrix;
  143. matrix_clear(&matrix);
  144. matrix_render_user(&matrix);
  145. matrix_update(&display, &matrix);
  146. }
  147. #endif
  148. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  149. #ifdef SSD1306OLED
  150. if (record->event.pressed) {
  151. set_keylog(keycode, record);
  152. set_timelog();
  153. }
  154. #endif
  155. switch (keycode) {
  156. case LOWER:
  157. if (record->event.pressed) {
  158. layer_on(_LOWER);
  159. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  160. } else {
  161. layer_off(_LOWER);
  162. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  163. }
  164. break;
  165. case RAISE:
  166. if (record->event.pressed) {
  167. layer_on(_RAISE);
  168. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  169. } else {
  170. layer_off(_RAISE);
  171. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  172. }
  173. break;
  174. case ADJUST:
  175. if (record->event.pressed) {
  176. layer_on(_ADJUST);
  177. } else {
  178. layer_off(_ADJUST);
  179. }
  180. break;
  181. #ifdef RGBLIGHT_ENABLE
  182. case RGB_MOD:
  183. if (record->event.pressed) {
  184. rgblight_mode(RGB_current_mode);
  185. rgblight_step();
  186. RGB_current_mode = rgblight_config.mode;
  187. }
  188. break;
  189. case RGBRST:
  190. if (record->event.pressed) {
  191. eeconfig_update_rgblight_default();
  192. rgblight_enable();
  193. RGB_current_mode = rgblight_config.mode;
  194. }
  195. break;
  196. #endif
  197. default:
  198. return true;
  199. }
  200. return false;
  201. }