Mercurial > crkbdyaz
comparison keymap.c @ 0:24e3fb306436 draft
initial import
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 07 Feb 2019 11:31:54 +0900 |
parents | |
children | 366930ab82c7 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:24e3fb306436 |
---|---|
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 |