keymap.c 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include QMK_KEYBOARD_H
  2. #include "drashna.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. extern keymap_config_t keymap_config;
  11. extern uint8_t is_master;
  12. #ifdef RGBLIGHT_ENABLE
  13. //Following line allows macro to read current RGB settings
  14. extern rgblight_config_t rgblight_config;
  15. #endif
  16. enum crkbd_keycodes {
  17. RGBRST = NEW_SAFE_RANGE
  18. };
  19. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  20. [_QWERTY] = LAYOUT_wrapper(
  21. KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
  22. KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
  23. KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF,
  24. LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
  25. ),
  26. [_COLEMAK] = LAYOUT_wrapper(
  27. KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
  28. KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
  29. KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF,
  30. LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
  31. ),
  32. [_DVORAK] = LAYOUT_wrapper(
  33. KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
  34. KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
  35. KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF,
  36. LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
  37. ),
  38. [_WORKMAN] = LAYOUT_wrapper(
  39. KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
  40. KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
  41. KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF,
  42. LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
  43. ),
  44. [_MODS] = LAYOUT_wrapper(
  45. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  46. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  47. KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT,
  48. _______, _______, _______, _______, _______, _______
  49. ),
  50. [_LOWER] = LAYOUT_wrapper(
  51. KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC,
  52. KC_F11, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
  53. KC_F12, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
  54. _______, _______, _______, _______, _______, _______
  55. ),
  56. [_RAISE] = LAYOUT_wrapper( \
  57. KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_BSPC,
  58. _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
  59. _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
  60. _______, _______, _______, _______, _______, _______ //`--------------------' `--------------------'
  61. ),
  62. [_ADJUST] = LAYOUT_wrapper( \
  63. KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
  64. VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EPRM,
  65. TG_MODS, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
  66. _______, _______, _______, _______, _______, _______
  67. )
  68. };
  69. int RGB_current_mode;
  70. void matrix_init_keymap(void) {
  71. #ifdef RGBLIGHT_ENABLE
  72. RGB_current_mode = rgblight_config.mode;
  73. #endif
  74. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  75. #ifdef SSD1306OLED
  76. iota_gfx_init(!has_usb()); // turns on the display
  77. #endif
  78. DDRD &= ~(1<<5);
  79. PORTD &= ~(1<<5);
  80. DDRB &= ~(1<<0);
  81. PORTB &= ~(1<<0);}
  82. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  83. #ifdef SSD1306OLED
  84. // When add source files to SRC in rules.mk, you can use functions.
  85. const char *read_layer_state(void);
  86. const char *read_logo(void);
  87. void set_keylog(uint16_t keycode, keyrecord_t *record);
  88. const char *read_keylog(void);
  89. const char *read_keylogs(void);
  90. // const char *read_mode_icon(bool swap);
  91. // const char *read_host_led_state(void);
  92. // void set_timelog(void);
  93. // const char *read_timelog(void);
  94. void matrix_scan_keymap(void) {
  95. iota_gfx_task();
  96. }
  97. void matrix_render_user(struct CharacterMatrix *matrix) {
  98. if (is_master) {
  99. // If you want to change the display of OLED, you need to change here
  100. matrix_write_ln(matrix, read_layer_state());
  101. matrix_write_ln(matrix, read_keylog());
  102. matrix_write_ln(matrix, read_keylogs());
  103. //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
  104. //matrix_write_ln(matrix, read_host_led_state());
  105. //matrix_write_ln(matrix, read_timelog());
  106. } else {
  107. matrix_write(matrix, read_logo());
  108. }
  109. }
  110. void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
  111. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  112. memcpy(dest->display, source->display, sizeof(dest->display));
  113. dest->dirty = true;
  114. }
  115. }
  116. void iota_gfx_task_user(void) {
  117. struct CharacterMatrix matrix;
  118. matrix_clear(&matrix);
  119. matrix_render_user(&matrix);
  120. matrix_update(&display, &matrix);
  121. }
  122. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  123. if (record->event.pressed) {
  124. set_keylog(keycode, record);
  125. // set_timelog();
  126. }
  127. switch (keycode) {
  128. case RGB_MOD:
  129. #ifdef RGBLIGHT_ENABLE
  130. if (record->event.pressed) {
  131. rgblight_mode_noeeprom(RGB_current_mode);
  132. rgblight_step();
  133. RGB_current_mode = rgblight_config.mode;
  134. }
  135. #endif
  136. return false;
  137. break;
  138. case RGBRST:
  139. #ifdef RGBLIGHT_ENABLE
  140. if (record->event.pressed) {
  141. eeconfig_update_rgblight_default();
  142. rgblight_enable();
  143. RGB_current_mode = rgblight_config.mode;
  144. }
  145. #endif
  146. break;
  147. }
  148. return true;
  149. }
  150. #endif