diff options
| -rw-r--r-- | keyboards/crkbd/keymaps/like_jis/config.h | 2 | ||||
| -rw-r--r-- | keyboards/crkbd/keymaps/like_jis/keymap.c | 303 | ||||
| -rw-r--r-- | keyboards/crkbd/keymaps/like_jis/oled_helper.c | 83 | ||||
| -rw-r--r-- | keyboards/crkbd/keymaps/like_jis/oled_helper.h | 35 | ||||
| -rw-r--r-- | keyboards/crkbd/keymaps/like_jis/rules.mk | 17 |
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 | ||
| 11 | extern keymap_config_t keymap_config; | 12 | extern 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 | 25 | enum 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 | ||
| 29 | enum custom_keycodes { | 32 | enum 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 | 40 | enum 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 | |||
| 73 | qk_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 | ||
| 59 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 78 | const 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 | ||
| 109 | int 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 |
| 112 | static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { | 135 | typedef 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 | ||
| 141 | const 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 | |||
| 149 | static 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 | ||
| 120 | void 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 | 164 | static char layer_status_buf[24] = "Layer state ready.\n"; |
| 131 | #ifdef SSD1306OLED | 165 | static 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. | 171 | static inline void render_keymap_status(struct CharacterMatrix *matrix) { |
| 135 | const char *read_layer_state(void); | ||
| 136 | const char *read_logo(void); | ||
| 137 | void set_keylog(uint16_t keycode, keyrecord_t *record); | ||
| 138 | const char *read_keylog(void); | ||
| 139 | const 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 | ||
| 186 | static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) { | ||
| 153 | 187 | ||
| 154 | void 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 | ||
| 158 | static inline void matrix_render_user(struct CharacterMatrix *matrix) { | 192 | int RGB_current_mode; |
| 159 | if (is_master) { | 193 | bool 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 | |||
| 241 | void 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 | |||
| 254 | void matrix_scan_user(void) { | ||
| 255 | iota_gfx_task(); // this is what updates the display continuously | ||
| 172 | } | 256 | } |
| 173 | 257 | ||
| 174 | static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { | 258 | static 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 | ||
| 181 | void iota_gfx_task_user(void) { | 266 | static 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 | 276 | void iota_gfx_task_user(void) { |
| 277 | struct CharacterMatrix matrix; | ||
| 189 | 278 | ||
| 190 | bool 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 | |||
| 5 | void 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 | |||
| 16 | static char keylog_buf[24] = "Key state ready."; | ||
| 17 | const 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 | |||
| 25 | void 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 | |||
| 35 | void render_key_status(struct CharacterMatrix *matrix) { | ||
| 36 | |||
| 37 | matrix_write(matrix, keylog_buf); | ||
| 38 | } | ||
| 39 | |||
| 40 | static char lock_buf[24] = "Lock state ready.\n"; | ||
| 41 | void 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 | |||
| 51 | void render_lock_status(struct CharacterMatrix *matrix) { | ||
| 52 | |||
| 53 | matrix_write(matrix, lock_buf); | ||
| 54 | } | ||
| 55 | |||
| 56 | #ifdef RGBLIGHT_ENABLE | ||
| 57 | extern rgblight_config_t rgblight_config; | ||
| 58 | |||
| 59 | static char led_buf[24] = "LED state ready.\n"; | ||
| 60 | rgblight_config_t rgblight_config_bak; | ||
| 61 | void 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 | |||
| 78 | void 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 | |||
| 3 | void render_logo(struct CharacterMatrix *matrix); | ||
| 4 | void update_key_status(uint16_t keycode, keyrecord_t *record); | ||
| 5 | void render_key_status(struct CharacterMatrix *matrix); | ||
| 6 | void update_lock_status(void); | ||
| 7 | void 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 | |||
| 14 | AUDIO_ENABLE = no # Audio output on port C6 | 14 | AUDIO_ENABLE = no # Audio output on port C6 |
| 15 | UNICODE_ENABLE = no # Unicode | 15 | UNICODE_ENABLE = no # Unicode |
| 16 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | 16 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID |
| 17 | RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. | 17 | RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. |
| 18 | SWAP_HANDS_ENABLE = no # Enable one-hand typing | 18 | SWAP_HANDS_ENABLE = no # Enable one-hand typing |
| 19 | TAP_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 |
| 21 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | 22 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend |
| 22 | 23 | ||
| 24 | Link_Time_Optimization = yes # if firmware size over limit, try this option | ||
| 25 | |||
| 26 | ifeq ($(strip $(Link_Time_Optimization)),yes) | ||
| 27 | EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization | ||
| 28 | endif | ||
| 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 |
| 24 | SRC += ./lib/glcdfont.c \ | 31 | SRC += ./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 \ | ||
