0
|
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
|
|
11 extern keymap_config_t keymap_config;
|
|
12
|
|
13 #ifdef RGBLIGHT_ENABLE
|
|
14 //Following line allows macro to read current RGB settings
|
|
15 extern rgblight_config_t rgblight_config;
|
|
16 #endif
|
|
17
|
|
18 extern uint8_t is_master;
|
|
19
|
|
20 // Each layer gets a name for readability, which is then used in the keymap matrix below.
|
|
21 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
|
22 // Layer names don't all need to be of the same length, obviously, and you can also skip them
|
|
23 // entirely and just use numbers.
|
|
24 #define _QWERTY 0
|
|
25 #define _LOWER 3
|
|
26 #define _RAISE 4
|
|
27 #define _ADJUST 16
|
|
28
|
|
29 enum custom_keycodes {
|
|
30 QWERTY = SAFE_RANGE,
|
|
31 LOWER,
|
|
32 RAISE,
|
|
33 ADJUST,
|
|
34 BACKLIT,
|
|
35 RGBRST
|
|
36 };
|
|
37
|
|
38 enum macro_keycodes {
|
|
39 KC_SAMPLEMACRO,
|
|
40 };
|
|
41
|
|
42 #define KC______ KC_TRNS
|
|
43 #define KC_XXXXX KC_NO
|
|
44 #define KC_LOWER LOWER
|
|
45 #define KC_RAISE RAISE
|
|
46 #define KC_RST RESET
|
|
47 #define KC_LRST RGBRST
|
|
48 #define KC_LTOG RGB_TOG
|
|
49 #define KC_LHUI RGB_HUI
|
|
50 #define KC_LHUD RGB_HUD
|
|
51 #define KC_LSAI RGB_SAI
|
|
52 #define KC_LSAD RGB_SAD
|
|
53 #define KC_LVAI RGB_VAI
|
|
54 #define KC_LVAD RGB_VAD
|
|
55 #define KC_LMOD RGB_MOD
|
|
56 #define KC_CTLTB CTL_T(KC_TAB)
|
|
57 #define KC_GUIEI GUI_T(KC_LANG2)
|
|
58 #define KC_ALTKN ALT_T(KC_LANG1)
|
|
59
|
|
60 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
61 [_QWERTY] = LAYOUT_kc( \
|
|
62 //,-----------------------------------------. ,-----------------------------------------.
|
|
63 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
|
|
64 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
65 CTLTB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,\
|
|
66 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
67 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\
|
|
68 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
|
69 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
|
|
70 //`--------------------' `--------------------'
|
|
71 ),
|
|
72
|
|
73 [_LOWER] = LAYOUT_kc( \
|
|
74 //,-----------------------------------------. ,-----------------------------------------.
|
|
75 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
|
|
76 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
77 CTLTB, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, XXXXX,\
|
|
78 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
79 LSFT, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, XXXXX,\
|
|
80 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
|
81 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
|
|
82 //`--------------------' `--------------------'
|
|
83 ),
|
|
84
|
|
85 [_RAISE] = LAYOUT_kc( \
|
|
86 //,-----------------------------------------. ,-----------------------------------------.
|
|
87 ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
|
|
88 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
89 CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, GRV,\
|
|
90 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
91 LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, BSLS, TILD,\
|
|
92 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
|
93 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
|
|
94 //`--------------------' `--------------------'
|
|
95 ),
|
|
96
|
|
97 [_ADJUST] = LAYOUT_kc( \
|
|
98 //,-----------------------------------------. ,-----------------------------------------.
|
|
99 RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
|
100 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
101 LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
|
102 //|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
103 LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
|
104 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
|
105 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
|
|
106 //`--------------------' `--------------------'
|
|
107 )
|
|
108 };
|
|
109
|
|
110 int RGB_current_mode;
|
|
111
|
|
112 void persistent_default_layer_set(uint16_t default_layer) {
|
|
113 eeconfig_update_default_layer(default_layer);
|
|
114 default_layer_set(default_layer);
|
|
115 }
|
|
116
|
|
117 // Setting ADJUST layer RGB back to default
|
|
118 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
|
119 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
|
120 layer_on(layer3);
|
|
121 } else {
|
|
122 layer_off(layer3);
|
|
123 }
|
|
124 }
|
|
125
|
|
126 void matrix_init_user(void) {
|
|
127 #ifdef RGBLIGHT_ENABLE
|
|
128 RGB_current_mode = rgblight_config.mode;
|
|
129 #endif
|
|
130 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
|
131 #ifdef SSD1306OLED
|
|
132 iota_gfx_init(!has_usb()); // turns on the display
|
|
133 #endif
|
|
134 }
|
|
135
|
|
136 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
|
137 #ifdef SSD1306OLED
|
|
138
|
|
139 // When add source files to SRC in rules.mk, you can use functions.
|
|
140 const char *read_layer_state(void);
|
|
141 const char *read_logo(void);
|
|
142 void set_keylog(uint16_t keycode, keyrecord_t *record);
|
|
143 const char *read_keylog(void);
|
|
144 const char *read_keylogs(void);
|
|
145
|
|
146 // const char *read_mode_icon(bool swap);
|
|
147 // const char *read_host_led_state(void);
|
|
148 // void set_timelog(void);
|
|
149 // const char *read_timelog(void);
|
|
150
|
|
151 void matrix_scan_user(void) {
|
|
152 iota_gfx_task();
|
|
153 }
|
|
154
|
|
155 void matrix_render_user(struct CharacterMatrix *matrix) {
|
|
156 if (is_master) {
|
|
157 // If you want to change the display of OLED, you need to change here
|
|
158 matrix_write_ln(matrix, read_layer_state());
|
|
159 matrix_write_ln(matrix, read_keylog());
|
|
160 matrix_write_ln(matrix, read_keylogs());
|
|
161 //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
|
|
162 //matrix_write_ln(matrix, read_host_led_state());
|
|
163 //matrix_write_ln(matrix, read_timelog());
|
|
164 } else {
|
|
165 matrix_write(matrix, read_logo());
|
|
166 }
|
|
167 }
|
|
168
|
|
169 void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
|
170 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
|
171 memcpy(dest->display, source->display, sizeof(dest->display));
|
|
172 dest->dirty = true;
|
|
173 }
|
|
174 }
|
|
175
|
|
176 void iota_gfx_task_user(void) {
|
|
177 struct CharacterMatrix matrix;
|
|
178 matrix_clear(&matrix);
|
|
179 matrix_render_user(&matrix);
|
|
180 matrix_update(&display, &matrix);
|
|
181 }
|
|
182 #endif//SSD1306OLED
|
|
183
|
|
184 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
185 if (record->event.pressed) {
|
|
186 #ifdef SSD1306OLED
|
|
187 set_keylog(keycode, record);
|
|
188 #endif
|
|
189 // set_timelog();
|
|
190 }
|
|
191
|
|
192 switch (keycode) {
|
|
193 case QWERTY:
|
|
194 if (record->event.pressed) {
|
|
195 persistent_default_layer_set(1UL<<_QWERTY);
|
|
196 }
|
|
197 return false;
|
|
198 break;
|
|
199 case LOWER:
|
|
200 if (record->event.pressed) {
|
|
201 layer_on(_LOWER);
|
|
202 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
203 } else {
|
|
204 layer_off(_LOWER);
|
|
205 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
206 }
|
|
207 return false;
|
|
208 break;
|
|
209 case RAISE:
|
|
210 if (record->event.pressed) {
|
|
211 layer_on(_RAISE);
|
|
212 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
213 } else {
|
|
214 layer_off(_RAISE);
|
|
215 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
216 }
|
|
217 return false;
|
|
218 break;
|
|
219 case ADJUST:
|
|
220 if (record->event.pressed) {
|
|
221 layer_on(_ADJUST);
|
|
222 } else {
|
|
223 layer_off(_ADJUST);
|
|
224 }
|
|
225 return false;
|
|
226 break;
|
|
227 case RGB_MOD:
|
|
228 #ifdef RGBLIGHT_ENABLE
|
|
229 if (record->event.pressed) {
|
|
230 rgblight_mode(RGB_current_mode);
|
|
231 rgblight_step();
|
|
232 RGB_current_mode = rgblight_config.mode;
|
|
233 }
|
|
234 #endif
|
|
235 return false;
|
|
236 break;
|
|
237 case RGBRST:
|
|
238 #ifdef RGBLIGHT_ENABLE
|
|
239 if (record->event.pressed) {
|
|
240 eeconfig_update_rgblight_default();
|
|
241 rgblight_enable();
|
|
242 RGB_current_mode = rgblight_config.mode;
|
|
243 }
|
|
244 #endif
|
|
245 break;
|
|
246 }
|
|
247 return true;
|
|
248 }
|
|
249
|