2 #include "bootloader.h"
3 #include "action_layer.h"
4 #include "action_util.h"
8 #include "split_util.h"
10 #include "LUFA/Drivers/Peripheral/TWI.h"
15 #include "../lib/mode_icon_reader.c"
16 #include "../lib/layer_state_reader.c"
17 #include "../lib/host_led_state_reader.c"
18 #include "../lib/logo_reader.c"
19 #include "../lib/keylogger.c"
20 #include "../lib/timelogger.c"
22 extern keymap_config_t keymap_config;
24 #ifdef RGBLIGHT_ENABLE
25 //Following line allows macro to read current RGB settings
26 extern rgblight_config_t rgblight_config;
29 extern uint8_t is_master;
31 // Each layer gets a name for readability, which is then used in the keymap matrix below.
32 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
33 // Layer names don't all need to be of the same length, obviously, and you can also skip them
34 // entirely and just use numbers.
40 enum custom_keycodes {
53 #define KC______ KC_TRNS
54 #define KC_XXXXX KC_NO
55 #define KC_LOWER LOWER
56 #define KC_RAISE RAISE
58 #define KC_LRST RGBRST
59 #define KC_LTOG RGB_TOG
60 #define KC_LHUI RGB_HUI
61 #define KC_LHUD RGB_HUD
62 #define KC_LSAI RGB_SAI
63 #define KC_LSAD RGB_SAD
64 #define KC_LVAI RGB_VAI
65 #define KC_LVAD RGB_VAD
66 #define KC_LSMOD RGB_SMOD
67 #define KC_CTLTB CTL_T(KC_TAB)
68 #define KC_GUIEI GUI_T(KC_LANG2)
69 #define KC_ALTKN ALT_T(KC_LANG1)
71 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
72 [_QWERTY] = LAYOUT_kc( \
73 //,-----------------------------------------. ,-----------------------------------------.
74 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
75 //|------+------+------+------+------+------| |------+------+------+------+------+------|
76 CTLTB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,\
77 //|------+------+------+------+------+------| |------+------+------+------+------+------|
78 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\
79 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
80 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
81 //`--------------------' `--------------------'
84 [_LOWER] = LAYOUT_kc( \
85 //,-----------------------------------------. ,-----------------------------------------.
86 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
87 //|------+------+------+------+------+------| |------+------+------+------+------+------|
88 CTLTB, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, XXXXX,\
89 //|------+------+------+------+------+------| |------+------+------+------+------+------|
90 LSFT, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, XXXXX,\
91 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
92 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
93 //`--------------------' `--------------------'
96 [_RAISE] = LAYOUT_kc( \
97 //,-----------------------------------------. ,-----------------------------------------.
98 ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
99 //|------+------+------+------+------+------| |------+------+------+------+------+------|
100 CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, GRV,\
101 //|------+------+------+------+------+------| |------+------+------+------+------+------|
102 LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, BSLS, TILD,\
103 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
104 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
105 //`--------------------' `--------------------'
108 [_ADJUST] = LAYOUT_kc( \
109 //,-----------------------------------------. ,-----------------------------------------.
110 RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
111 //|------+------+------+------+------+------| |------+------+------+------+------+------|
112 LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
113 //|------+------+------+------+------+------| |------+------+------+------+------+------|
114 LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
115 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
116 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
117 //`--------------------' `--------------------'
121 int RGB_current_mode;
123 void persistent_default_layer_set(uint16_t default_layer) {
124 eeconfig_update_default_layer(default_layer);
125 default_layer_set(default_layer);
128 // Setting ADJUST layer RGB back to default
129 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
130 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
137 void matrix_init_user(void) {
138 #ifdef RGBLIGHT_ENABLE
139 RGB_current_mode = rgblight_config.mode;
141 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
143 TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
144 iota_gfx_init(!has_usb()); // turns on the display
148 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
151 void matrix_scan_user(void) {
155 void matrix_render_user(struct CharacterMatrix *matrix) {
157 matrix_write_ln(matrix, read_layer_state());
158 matrix_write_ln(matrix, read_keylog());
159 matrix_write_ln(matrix, read_keylogs());
160 //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
161 //matrix_write_ln(matrix, read_host_led_state());
162 //matrix_write_ln(matrix, read_timelog());
164 matrix_write(matrix, read_logo());
168 void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
169 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
170 memcpy(dest->display, source->display, sizeof(dest->display));
175 void iota_gfx_task_user(void) {
176 struct CharacterMatrix matrix;
177 matrix_clear(&matrix);
178 matrix_render_user(&matrix);
179 matrix_update(&display, &matrix);
182 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
183 if (record->event.pressed) {
184 set_keylog(keycode, record);
190 if (record->event.pressed) {
191 persistent_default_layer_set(1UL<<_QWERTY);
196 if (record->event.pressed) {
198 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
201 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
206 if (record->event.pressed) {
208 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
211 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
216 if (record->event.pressed) {
224 #ifdef RGBLIGHT_ENABLE
225 if (record->event.pressed) {
226 rgblight_mode(RGB_current_mode);
228 RGB_current_mode = rgblight_config.mode;
234 #ifdef RGBLIGHT_ENABLE
235 if (record->event.pressed) {
236 eeconfig_update_rgblight_default();
238 RGB_current_mode = rgblight_config.mode;