keymap.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include QMK_KEYBOARD_H
  2. #ifdef PROTOCOL_LUFA
  3. #include "lufa.h"
  4. #include "split_util.h"
  5. #endif
  6. #ifdef SSD1306OLED
  7. #include "ssd1306.h"
  8. #endif
  9. extern uint8_t is_master;
  10. #define _QWERTY 0
  11. #define _LOWER 1
  12. #define _UPPER 2
  13. enum custom_keycodes {
  14. QWERTY = SAFE_RANGE,
  15. LOWER,
  16. UPPER,
  17. };
  18. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  19. [_QWERTY] = LAYOUT( \
  20. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
  21. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
  22. KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, \
  23. KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
  24. LALT(KC_A), KC_LCTL,KC_LGUI, MO(1), KC_SPC, MO(2), KC_PGDN, KC_NO),
  25. [_LOWER] = LAYOUT( \
  26. KC_ESC,LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5), KC_SCLN,LSFT(KC_BSLS), KC_NO,LCTL(KC_9),LCTL(KC_0), KC_F12, \
  27. LCTL(KC_TAB),LGUI(KC_Q),LGUI(KC_W), KC_ESC,LGUI(KC_R),LGUI(KC_T), LCTL(KC_Y),LGUI(KC_LEFT), KC_UP,LGUI(KC_RGHT),LSFT(KC_GRV), KC_F11, \
  28. LGUI(KC_BSPC),MO(2),LGUI(KC_S),LGUI(KC_C),LGUI(KC_V),LGUI(KC_X), KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_GRV,LSFT(KC_SCLN), \
  29. KC_F15,LGUI(KC_A),LGUI(KC_D), KC_F13,LGUI(KC_Z),LGUI(KC_Y),LSFT(KC_LBRC),LSFT(KC_RBRC),KC_BSPC,LGUI(KC_F), SGUI(KC_G),LGUI(KC_G), KC_BSLS, KC_F23, \
  30. KC_NO, KC_NO,KC_NO,KC_TRNS, KC_NO, KC_RGUI, KC_PGUP, KC_NO),
  31. [_UPPER] = LAYOUT( \
  32. KC__VOLUP,LGUI(LALT(KC_1)),LGUI(LALT(KC_2)), KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,LSFT(KC_EQL), \
  33. KC_VOLD, KC_NO, KC_NO, KC_NO,SGUI(KC_R), KC_F14, SGUI(KC_K),SGUI(KC_LEFT),LSFT(KC_UP),SGUI(KC_RGHT), KC_F18,LSFT(KC_MINS), \
  34. KC_MUTE,KC_TRNS, KC_NO, KC_LGUI, KC_TAB, KC_F21, KC_NO,LSFT(KC_LEFT),LSFT(KC_DOWN),LSFT(KC_RGHT), KC_F20, KC_F16, \
  35. KC_ASTG, KC_NO, KC_NO, KC_NO, KC_F22,LCTL(KC_U),LGUI(KC_LBRC),LGUI(KC_RBRC),LGUI(KC_N), KC_NO,LALT(LSFT(KC_LEFT)),LALT(LSFT(KC_RIGHT)), KC_F17, KC_F19, \
  36. KC_NO, KC_NO,KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO)
  37. };
  38. void matrix_init_user(void) {
  39. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  40. #ifdef SSD1306OLED
  41. iota_gfx_init(!has_usb()); // turns on the display
  42. #endif
  43. }
  44. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  45. #ifdef SSD1306OLED
  46. // When add source files to SRC in rules.mk, you can use functions.
  47. const char *read_layer_state(void);
  48. const char *read_logo(void);
  49. void set_keylog(uint16_t keycode, keyrecord_t *record);
  50. const char *read_keylog(void);
  51. const char *read_keylogs(void);
  52. // const char *read_mode_icon(bool swap);
  53. // const char *read_host_led_state(void);
  54. // void set_timelog(void);
  55. // const char *read_timelog(void);
  56. void matrix_scan_user(void) {
  57. iota_gfx_task();
  58. }
  59. void matrix_render_user(struct CharacterMatrix *matrix) {
  60. if (is_master) {
  61. // If you want to change the display of OLED, you need to change here
  62. matrix_write_ln(matrix, read_layer_state());
  63. matrix_write_ln(matrix, read_keylog());
  64. matrix_write_ln(matrix, read_keylogs());
  65. //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
  66. //matrix_write_ln(matrix, read_host_led_state());
  67. //matrix_write_ln(matrix, read_timelog());
  68. } else {
  69. matrix_write(matrix, read_logo());
  70. }
  71. }
  72. void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
  73. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  74. memcpy(dest->display, source->display, sizeof(dest->display));
  75. dest->dirty = true;
  76. }
  77. }
  78. void iota_gfx_task_user(void) {
  79. struct CharacterMatrix matrix;
  80. matrix_clear(&matrix);
  81. matrix_render_user(&matrix);
  82. matrix_update(&display, &matrix);
  83. }
  84. #endif//SSD1306OLED
  85. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  86. if (record->event.pressed) {
  87. #ifdef SSD1306OLED
  88. set_keylog(keycode, record);
  89. #endif
  90. // set_timelog();
  91. }
  92. return true;
  93. }