aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/crkbd/keymaps/like_jis/config.h2
-rw-r--r--keyboards/crkbd/keymaps/like_jis/keymap.c303
-rw-r--r--keyboards/crkbd/keymaps/like_jis/oled_helper.c83
-rw-r--r--keyboards/crkbd/keymaps/like_jis/oled_helper.h35
-rw-r--r--keyboards/crkbd/keymaps/like_jis/rules.mk17
5 files changed, 304 insertions, 136 deletions
diff --git a/keyboards/crkbd/keymaps/like_jis/config.h b/keyboards/crkbd/keymaps/like_jis/config.h
index 0e2960a93..a061b4fb0 100644
--- a/keyboards/crkbd/keymaps/like_jis/config.h
+++ b/keyboards/crkbd/keymaps/like_jis/config.h
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
34 34
35#define PREVENT_STUCK_MODIFIERS 35#define PREVENT_STUCK_MODIFIERS
36#define TAPPING_FORCE_HOLD 36#define TAPPING_FORCE_HOLD
37#define TAPPING_TERM 150 37#define TAPPING_TERM 250
38 38
39#undef RGBLED_NUM 39#undef RGBLED_NUM
40#define RGBLIGHT_ANIMATIONS 40#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/crkbd/keymaps/like_jis/keymap.c b/keyboards/crkbd/keymaps/like_jis/keymap.c
index 42d36de44..b1b6c64b1 100644
--- a/keyboards/crkbd/keymaps/like_jis/keymap.c
+++ b/keyboards/crkbd/keymaps/like_jis/keymap.c
@@ -7,6 +7,7 @@
7#ifdef SSD1306OLED 7#ifdef SSD1306OLED
8 #include "ssd1306.h" 8 #include "ssd1306.h"
9#endif 9#endif
10#include "oled_helper.h"
10 11
11extern keymap_config_t keymap_config; 12extern keymap_config_t keymap_config;
12 13
@@ -21,27 +22,35 @@ extern uint8_t is_master;
21// The underscores don't mean anything - you can have a layer called STUFF or any other name. 22// 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// 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// entirely and just use numbers.
24#define _QWERTY 0 25enum layer_number {
25#define _LOWER 3 26 _BASE = 0,
26#define _RAISE 4 27 _LOWER,
27#define _ADJUST 16 28 _RAISE,
29 _ADJUST,
30};
28 31
29enum custom_keycodes { 32enum custom_keycodes {
30 LOWER = SAFE_RANGE, 33 LOWER = SAFE_RANGE,
31 RAISE, 34 RAISE,
32 ADJUST, 35 ADJUST,
36 KANJI,
33 RGBRST 37 RGBRST
34}; 38};
35 39
36#define KC______ KC_TRNS 40enum tapdances{
37#define KC_XXXXX KC_NO 41 TD_CODO = 0,
38#define KC_KANJI KC_GRV 42 // TD_MNUB,
43};
39 44
45// Layer Mode aliases
40#define KC_LOWER LOWER 46#define KC_LOWER LOWER
41#define KC_RAISE RAISE 47#define KC_RAISE RAISE
42 48
43#define KC_RST RESET 49#define KC______ KC_TRNS
50#define KC_XXXXX KC_NO
51#define KC_KANJI KANJI
44 52
53#define KC_RST RESET
45#define KC_LRST RGBRST 54#define KC_LRST RGBRST
46#define KC_LTOG RGB_TOG 55#define KC_LTOG RGB_TOG
47#define KC_LHUI RGB_HUI 56#define KC_LHUI RGB_HUI
@@ -51,31 +60,41 @@ enum custom_keycodes {
51#define KC_LVAI RGB_VAI 60#define KC_LVAI RGB_VAI
52#define KC_LVAD RGB_VAD 61#define KC_LVAD RGB_VAD
53#define KC_LMOD RGB_MOD 62#define KC_LMOD RGB_MOD
54
55#define KC_KNRM AG_NORM 63#define KC_KNRM AG_NORM
56#define KC_KSWP AG_SWAP 64#define KC_KSWP AG_SWAP
57#define KC_GUAP LALT_T(KC_APP) 65
66#define KC_TBSF LSFT_T(KC_TAB)
67// #define KC_SPSF LSFT_T(KC_SPC)
68#define KC_ALAP LALT_T(KC_APP)
69
70#define KC_CODO TD(TD_CODO)
71// #define KC_MNUB TD(TD_MNUB)
72
73qk_tap_dance_action_t tap_dance_actions[] = {
74 [TD_CODO] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT),
75 // [TD_MNUB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, LSFT(KC_RO)),
76};
58 77
59const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 78const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
60 [_QWERTY] = LAYOUT_kc( \ 79 [_BASE] = LAYOUT_kc( \
61 //,-----------------------------------------. ,-----------------------------------------. 80 //,-----------------------------------------. ,-----------------------------------------.
62 ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\ 81 ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
63 //|------+------+------+------+------+------| |------+------+------+------+------+------| 82 //|------+------+------+------+------+------| |------+------+------+------+------+------|
64 LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\ 83 TBSF, A, S, D, F, G, H, J, K, L, UP, ENT,\
65 //|------+------+------+------+------+------| |------+------+------+------+------+------| 84 //|------+------+------+------+------+------| |------+------+------+------+------+------|
66 LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\ 85 LCTRL, Z, X, C, V, B, N, M, CODO, LEFT, DOWN, RGHT,\
67 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| 86 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
68 LGUI, LOWER, BSPC, SPC, RAISE, GUAP \ 87 LGUI, LOWER, BSPC, SPC, RAISE, ALAP \
69 //`--------------------' `--------------------' 88 //`--------------------' `--------------------'
70 ), 89 ),
71 90
72 [_LOWER] = LAYOUT_kc( \ 91 [_LOWER] = LAYOUT_kc( \
73 //,-----------------------------------------. ,-----------------------------------------. 92 //,-----------------------------------------. ,-----------------------------------------.
74 TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\ 93 _____, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
75 //|------+------+------+------+------+------| |------+------+------+------+------+------| 94 //|------+------+------+------+------+------| |------+------+------+------+------+------|
76 _____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\ 95 _____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
77 //|------+------+------+------+------+------| |------+------+------+------+------+------| 96 //|------+------+------+------+------+------| |------+------+------+------+------+------|
78 _____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\ 97 _____, F11, F12, TAB, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
79 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| 98 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
80 _____, _____, DEL, _____, _____, APP \ 99 _____, _____, DEL, _____, _____, APP \
81 //`--------------------' `--------------------' 100 //`--------------------' `--------------------'
@@ -83,11 +102,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
83 102
84 [_RAISE] = LAYOUT_kc( \ 103 [_RAISE] = LAYOUT_kc( \
85 //,-----------------------------------------. ,-----------------------------------------. 104 //,-----------------------------------------. ,-----------------------------------------.
86 _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\ 105 _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, PSLS,\
87 //|------+------+------+------+------+------| |------+------+------+------+------+------| 106 //|------+------+------+------+------+------| |------+------+------+------+------+------|
88 _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\ 107 _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, QUOT, 4, 5, 6, PPLS, PAST,\
89 //|------+------+------+------+------+------| |------+------+------+------+------+------| 108 //|------+------+------+------+------+------| |------+------+------+------+------+------|
90 _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\ 109 _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, PMNS,\
91 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| 110 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
92 _____, _____, BSPC, _____, _____, LALT \ 111 _____, _____, BSPC, _____, _____, LALT \
93 //`--------------------' `--------------------' 112 //`--------------------' `--------------------'
@@ -95,152 +114,182 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
95 114
96 [_ADJUST] = LAYOUT_kc( \ 115 [_ADJUST] = LAYOUT_kc( \
97 //,-----------------------------------------. ,-----------------------------------------. 116 //,-----------------------------------------. ,-----------------------------------------.
98 _____, RST, LRST, KNRM, KSWP,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\ 117 _____, RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
99 //|------+-------+------+------+------+-----| |------+------+------+------+------+------| 118 //|------+-------+------+------+------+-----| |------+------+------+------+------+------|
100 _____, LTOG, LHUI, LSAI, LVAI,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\ 119 _____, LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
101 //|------+-------+------+------+------+-----| |------+------+------+------+------+------| 120 //|------+-------+------+------+------+-----| |------+------+------+------+------+------|
102 _____, LMOD, LHUD, LSAD, LVAD,XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\ 121 _____, LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
103 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| 122 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
104 _____, _____, XXXXX, _____, _____, XXXXX \ 123 _____, _____, XXXXX, _____, _____, XXXXX \
105 //`--------------------' `--------------------' 124 //`--------------------' `--------------------'
106 ) 125 )
107}; 126};
108 127
109int RGB_current_mode; 128#define L_BASE _BASE
129#define L_LOWER (1<<_LOWER)
130#define L_RAISE (1<<_RAISE)
131#define L_ADJUST (1<<_ADJUST)
132#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
110 133
111// Setting ADJUST layer RGB back to default 134#ifdef SSD1306OLED
112static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { 135typedef struct {
113 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { 136 uint8_t state;
114 layer_on(layer3); 137 char name[8];
115 } else { 138}LAYER_DISPLAY_NAME;
116 layer_off(layer3); 139
140#define LAYER_DISPLAY_MAX 5
141const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
142 {L_BASE, "Base"},
143 {L_BASE + 1, "Base"},
144 {L_LOWER, "Lower"},
145 {L_RAISE, "Raise"},
146 {L_ADJUST_TRI, "Adjust"}
147};
148
149static inline const char* get_leyer_status(void) {
150
151 for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
152 if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
153
154 return layer_display_name[i].name;
155 } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
156
157 return layer_display_name[i].name;
158 }
117 } 159 }
118}
119 160
120void matrix_init_user(void) { 161 return "?";
121 #ifdef RGBLIGHT_ENABLE
122 RGB_current_mode = rgblight_config.mode;
123 #endif
124 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
125 #ifdef SSD1306OLED
126 iota_gfx_init(!has_usb()); // turns on the display
127 #endif
128} 162}
129 163
130//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h 164static char layer_status_buf[24] = "Layer state ready.\n";
131#ifdef SSD1306OLED 165static inline void update_keymap_status(void) {
132 166
167 snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
168 keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
169}
133 170
134// When add source files to SRC in rules.mk, you can use functions. 171static inline void render_keymap_status(struct CharacterMatrix *matrix) {
135const char *read_layer_state(void);
136const char *read_logo(void);
137void set_keylog(uint16_t keycode, keyrecord_t *record);
138const char *read_keylog(void);
139const char *read_keylogs(void);
140 172
141// const char *read_mode_icon(bool swap); 173 matrix_write(matrix, layer_status_buf);
142// const char *read_host_led_state(void); 174}
143// void set_timelog(void); 175
144// const char *read_timelog(void); 176#define UPDATE_KEYMAP_STATUS() update_keymap_status()
177#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
145 178
146#ifdef RGBLIGHT_ENABLE
147 const char *read_rgb_info(void);
148 #define RENDER_RGB_INFO(m) matrix_write_ln(m, (const char*)read_rgb_info())
149#else 179#else
150 #define RENDER_RGB_INFO(m) 180
181#define UPDATE_KEYMAP_STATUS()
182#define RENDER_KEYMAP_STATUS(a)
183
151#endif 184#endif
152 185
186static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
153 187
154void matrix_scan_user(void) { 188 pressed ? layer_on(layer1) : layer_off(layer1);
155 iota_gfx_task(); 189 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
156} 190}
157 191
158static inline void matrix_render_user(struct CharacterMatrix *matrix) { 192int RGB_current_mode;
159 if (is_master) { 193bool process_record_user(uint16_t keycode, keyrecord_t *record) {
160 // If you want to change the display of OLED, you need to change here 194
161 matrix_write_ln(matrix, read_layer_state()); 195 UPDATE_KEY_STATUS(keycode, record);
162 matrix_write_ln(matrix, read_keylog()); 196
163 RENDER_RGB_INFO(matrix); 197 bool result = false;
164 // matrix_write_ln(matrix, read_keylogs()); 198 switch (keycode) {
165 // matrix_write_ln(matrix, read_host_led_state()); 199 case LOWER:
166 200 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
167 // matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui)); 201 break;
168 // matrix_write_ln(matrix, read_timelog()); 202 case RAISE:
169 } else { 203 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
170 matrix_write(matrix, read_logo()); 204 break;
205 case KANJI:
206 if (record->event.pressed) {
207 if (keymap_config.swap_lalt_lgui == false) {
208 register_code(KC_LANG2);
209 } else {
210 SEND_STRING(SS_LALT("`"));
211 }
212 } else {
213 unregister_code(KC_LANG2);
214 }
215 break;
216 #ifdef RGBLIGHT_ENABLE
217 case RGB_MOD:
218 if (record->event.pressed) {
219 rgblight_mode(RGB_current_mode);
220 rgblight_step();
221 RGB_current_mode = rgblight_config.mode;
222 }
223 break;
224 case RGBRST:
225 if (record->event.pressed) {
226 eeconfig_update_rgblight_default();
227 rgblight_enable();
228 RGB_current_mode = rgblight_config.mode;
229 }
230 break;
231 #endif
232 default:
233 result = true;
234 break;
171 } 235 }
236
237 UPDATE_KEYMAP_STATUS();
238 return result;
239}
240
241void matrix_init_user(void) {
242 #ifdef RGBLIGHT_ENABLE
243 RGB_current_mode = rgblight_config.mode;
244 #endif
245 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
246 #ifdef SSD1306OLED
247 iota_gfx_init(!has_usb()); // turns on the display
248 #endif
249}
250
251//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
252#ifdef SSD1306OLED
253
254void matrix_scan_user(void) {
255 iota_gfx_task(); // this is what updates the display continuously
172} 256}
173 257
174static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { 258static inline void matrix_update(struct CharacterMatrix *dest,
259 const struct CharacterMatrix *source) {
175 if (memcmp(dest->display, source->display, sizeof(dest->display))) { 260 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
176 memcpy(dest->display, source->display, sizeof(dest->display)); 261 memcpy(dest->display, source->display, sizeof(dest->display));
177 dest->dirty = true; 262 dest->dirty = true;
178 } 263 }
179} 264}
180 265
181void iota_gfx_task_user(void) { 266static inline void render_status(struct CharacterMatrix *matrix) {
182 struct CharacterMatrix matrix; 267
183 matrix_clear(&matrix); 268 UPDATE_LED_STATUS();
184 matrix_render_user(&matrix); 269 RENDER_LED_STATUS(matrix);
185 matrix_update(&display, &matrix); 270 RENDER_KEYMAP_STATUS(matrix);
271 UPDATE_LOCK_STATUS();
272 RENDER_LOCK_STATUS(matrix);
273 RENDER_KEY_STATUS(matrix);
186} 274}
187 275
188#endif 276void iota_gfx_task_user(void) {
277 struct CharacterMatrix matrix;
189 278
190bool process_record_user(uint16_t keycode, keyrecord_t *record) { 279 #if DEBUG_TO_SCREEN
191 #ifdef SSD1306OLED 280 if (debug_enable) {
192 if (record->event.pressed) { 281 return;
193 set_keylog(keycode, record);
194 // set_timelog();
195 } 282 }
196 #endif 283 #endif
197 284
198 switch (keycode) { 285 matrix_clear(&matrix);
199 case LOWER: 286 if (is_master) {
200 if (record->event.pressed) { 287 render_status(&matrix);
201 layer_on(_LOWER); 288 } else {
202 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); 289 RENDER_LOGO(&matrix);
203 } else {
204 layer_off(_LOWER);
205 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
206 }
207 break;
208 case RAISE:
209 if (record->event.pressed) {
210 layer_on(_RAISE);
211 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
212 } else {
213 layer_off(_RAISE);
214 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
215 }
216 break;
217 case ADJUST:
218 if (record->event.pressed) {
219 layer_on(_ADJUST);
220 } else {
221 layer_off(_ADJUST);
222 }
223 break;
224
225 #ifdef RGBLIGHT_ENABLE
226 case RGB_MOD:
227 if (record->event.pressed) {
228 rgblight_mode(RGB_current_mode);
229 rgblight_step();
230 RGB_current_mode = rgblight_config.mode;
231 }
232 break;
233 case RGBRST:
234 if (record->event.pressed) {
235 eeconfig_update_rgblight_default();
236 rgblight_enable();
237 RGB_current_mode = rgblight_config.mode;
238 }
239 break;
240 #endif
241 default:
242 return true;
243 } 290 }
244 291
245 return false; 292 matrix_update(&display, &matrix);
246} 293}
294
295#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/oled_helper.c b/keyboards/crkbd/keymaps/like_jis/oled_helper.c
new file mode 100644
index 000000000..500d3c0dc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/oled_helper.c
@@ -0,0 +1,83 @@
1#ifdef SSD1306OLED
2#include QMK_KEYBOARD_H
3#include "ssd1306.h"
4
5void render_logo(struct CharacterMatrix *matrix) {
6
7 const char logo_buf[]={
8 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
9 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
10 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
11 0};
12
13 matrix_write(matrix, logo_buf);
14}
15
16static char keylog_buf[24] = "Key state ready.";
17const char code_to_name[60] = {
18 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
19 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
20 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
21 '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
22 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
23 ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
24
25void update_key_status(uint16_t keycode, keyrecord_t *record) {
26
27 if (!record->event.pressed) return;
28
29 char name = (keycode < 60) ? code_to_name[keycode] : ' ';
30 snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c",
31 record->event.key.row, record->event.key.col,
32 (uint16_t)keycode, name);
33}
34
35void render_key_status(struct CharacterMatrix *matrix) {
36
37 matrix_write(matrix, keylog_buf);
38}
39
40static char lock_buf[24] = "Lock state ready.\n";
41void update_lock_status(void) {
42
43 uint8_t leds = host_keyboard_leds();
44 char *num_lock = (leds & (1<<USB_LED_NUM_LOCK)) ? "Num" : "";
45 char *caps_lock = (leds & (1<<USB_LED_CAPS_LOCK)) ? "Caps" : "";
46 char *scrl_lock = (leds & (1<<USB_LED_SCROLL_LOCK)) ? "Scrn" : "";
47 snprintf(lock_buf, sizeof(lock_buf) - 1, "Lock:%s %s %s\n",
48 num_lock, caps_lock, scrl_lock);
49}
50
51void render_lock_status(struct CharacterMatrix *matrix) {
52
53 matrix_write(matrix, lock_buf);
54}
55
56#ifdef RGBLIGHT_ENABLE
57extern rgblight_config_t rgblight_config;
58
59static char led_buf[24] = "LED state ready.\n";
60rgblight_config_t rgblight_config_bak;
61void update_led_status(void) {
62
63 if (rgblight_config_bak.enable != rgblight_config.enable ||
64 rgblight_config_bak.mode != rgblight_config.mode ||
65 rgblight_config_bak.hue != rgblight_config.hue ||
66 rgblight_config_bak.sat != rgblight_config.sat ||
67 rgblight_config_bak.val != rgblight_config.val
68 ) {
69 snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
70 rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
71 (uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
72 (uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
73 (uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
74 rgblight_config_bak = rgblight_config;
75 }
76}
77
78void render_led_status(struct CharacterMatrix *matrix) {
79
80 matrix_write(matrix, led_buf);
81}
82#endif
83#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/oled_helper.h b/keyboards/crkbd/keymaps/like_jis/oled_helper.h
new file mode 100644
index 000000000..44628a526
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/oled_helper.h
@@ -0,0 +1,35 @@
1#ifdef SSD1306OLED
2
3void render_logo(struct CharacterMatrix *matrix);
4void update_key_status(uint16_t keycode, keyrecord_t *record);
5void render_key_status(struct CharacterMatrix *matrix);
6void update_lock_status(void);
7void render_lock_status(struct CharacterMatrix *matrix);
8
9#define RENDER_LOGO(a) render_logo(a)
10#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
11#define RENDER_KEY_STATUS(a) render_key_status(a)
12#define UPDATE_LOCK_STATUS() update_lock_status()
13#define RENDER_LOCK_STATUS(a) render_lock_status(a)
14
15#ifdef RGBLIGHT_ENABLE
16 void update_led_status(void);
17 void render_led_status(struct CharacterMatrix *matrix);
18 #define UPDATE_LED_STATUS() update_led_status()
19 #define RENDER_LED_STATUS(a) render_led_status(a)
20#else
21 #define UPDATE_LED_STATUS()
22 #define RENDER_LED_STATUS(a)
23#endif
24
25#else
26
27#define RENDER_LOGO(a)
28#define UPDATE_KEY_STATUS(a, b)
29#define RENDER_KEY_STATUS(a)
30#define UPDATE_LOCK_STATUS()
31#define RENDER_LOCK_STATUS(a)
32#define UPDATE_LED_STATUS()
33#define RENDER_LED_STATUS(a)
34
35#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/rules.mk b/keyboards/crkbd/keymaps/like_jis/rules.mk
index 16deaf45d..92f4693aa 100644
--- a/keyboards/crkbd/keymaps/like_jis/rules.mk
+++ b/keyboards/crkbd/keymaps/like_jis/rules.mk
@@ -14,18 +14,19 @@ MIDI_ENABLE = no # MIDI controls
14AUDIO_ENABLE = no # Audio output on port C6 14AUDIO_ENABLE = no # Audio output on port C6
15UNICODE_ENABLE = no # Unicode 15UNICODE_ENABLE = no # Unicode
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. 17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
18SWAP_HANDS_ENABLE = no # Enable one-hand typing 18SWAP_HANDS_ENABLE = no # Enable one-hand typing
19TAP_DANCE_ENABLE = yes
19 20
20# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 21# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
21SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend 22SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
22 23
24Link_Time_Optimization = yes # if firmware size over limit, try this option
25
26ifeq ($(strip $(Link_Time_Optimization)),yes)
27 EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
28endif
29
23# If you want to change the display of OLED, you need to change here 30# If you want to change the display of OLED, you need to change here
24SRC += ./lib/glcdfont.c \ 31SRC += ./lib/glcdfont.c \
25 ./lib/rgb_state_reader.c \ 32 oled_helper.c \
26 ./lib/layer_state_reader.c \
27 ./lib/logo_reader.c \
28 ./lib/keylogger.c \
29 # ./lib/mode_icon_reader.c \
30 # ./lib/host_led_state_reader.c \
31 # ./lib/timelogger.c \