]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/like_jis/keymap.c
0dd9c155006ed14a253a5e358c7c4dd6c6fa439e
[qmk_firmware.git] / keyboards / crkbd / keymaps / like_jis / keymap.c
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 #include "../lib/mode_icon_reader.c"
12 #include "../lib/layer_state_reader.c"
13 #include "../lib/host_led_state_reader.c"
14 #include "../lib/logo_reader.c"
15 #include "../lib/keylogger.c"
16 #include "../lib/timelogger.c"
17
18 extern keymap_config_t keymap_config;
19
20 #ifdef RGBLIGHT_ENABLE
21 //Following line allows macro to read current RGB settings
22 extern rgblight_config_t rgblight_config;
23 #endif
24
25 extern uint8_t is_master;
26
27 // Each layer gets a name for readability, which is then used in the keymap matrix below.
28 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
29 // Layer names don't all need to be of the same length, obviously, and you can also skip them
30 // entirely and just use numbers.
31 #define _QWERTY 0
32 #define _LOWER 3
33 #define _RAISE 4
34 #define _ADJUST 16
35
36 enum custom_keycodes {
37   LOWER = SAFE_RANGE,
38   RAISE,
39   ADJUST,
40   RGBRST
41 };
42
43 #define KC______ KC_TRNS
44 #define KC_XXXXX KC_NO
45 #define KC_KANJI KC_GRV
46
47 #define KC_LOWER LOWER
48 #define KC_RAISE RAISE
49
50 #define KC_RST   RESET
51
52 #define KC_LRST  RGBRST
53 #define KC_LTOG  RGB_TOG
54 #define KC_LHUI  RGB_HUI
55 #define KC_LHUD  RGB_HUD
56 #define KC_LSAI  RGB_SAI
57 #define KC_LSAD  RGB_SAD
58 #define KC_LVAI  RGB_VAI
59 #define KC_LVAD  RGB_VAD
60 #define KC_LSMOD RGB_SMOD
61
62 #define KC_KNRM  AG_NORM
63 #define KC_KSWP  AG_SWAP
64 #define KC_GUAP  LALT_T(KC_APP)
65
66 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
67   [_QWERTY] = LAYOUT_kc( \
68   //,-----------------------------------------.                ,-----------------------------------------.
69         ESC,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  MINS,\
70   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
71        LSFT,     A,     S,     D,     F,     G,                      H,     J,     K,     L,    UP,   ENT,\
72   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
73       LCTRL,     Z,     X,     C,     V,     B,                      N,     M,  COMM,  LEFT,  DOWN,  RGHT,\
74   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
75                                    LGUI, LOWER,  BSPC,      SPC, RAISE,  GUAP \
76                               //`--------------------'  `--------------------'
77   ),
78
79   [_LOWER] = LAYOUT_kc( \
80   //,-----------------------------------------.                ,-----------------------------------------.
81         TAB,    F1,    F2,    F3,    F4,    F5,                  XXXXX,  MINS,   EQL,  JYEN,  LBRC,  RBRC,\
82   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
83       _____,    F6,    F7,    F8,    F9,   F10,                  XXXXX, XXXXX, XXXXX,  SCLN,  QUOT,  BSLS,\
84   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
85       _____,   F11,   F12, XXXXX, KANJI,   ENT,                  XXXXX, XXXXX,  COMM,   DOT,  SLSH,    RO,\
86   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
87                                   _____, _____,   DEL,    XXXXX, _____,   APP \
88                               //`--------------------'  `--------------------'
89   ),
90
91   [_RAISE] = LAYOUT_kc( \
92   //,-----------------------------------------.                ,-----------------------------------------.
93       _____,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0, XXXXX,\
94   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
95       _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                  XXXXX,     4,     5,     6,  QUOT, XXXXX,\
96   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
97       _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                      0,     1,     2,     3,   DOT, XXXXX,\
98   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
99                                   _____, _____, XXXXX,    XXXXX, _____,  LALT \
100                               //`--------------------'  `--------------------'
101   ),
102
103   [_ADJUST] = LAYOUT_kc( \
104   //,-----------------------------------------.                ,-----------------------------------------.
105         RST,  LRST,  KNRM,  KSWP, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
106   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
107        LTOG,  LHUI,  LSAI,  LVAI, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX,  PGUP, XXXXX,\
108   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
109       LSMOD,  LHUD,  LSAD,  LVAD, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX,  HOME,  PGDN,   END,\
110   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
111                                   _____, _____, XXXXX,    XXXXX, _____, XXXXX \
112                               //`--------------------'  `--------------------'
113   )
114 };
115
116 int RGB_current_mode;
117
118 // Setting ADJUST layer RGB back to default
119 inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
120   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
121     layer_on(layer3);
122   } else {
123     layer_off(layer3);
124   }
125 }
126
127 void matrix_init_user(void) {
128     #ifdef RGBLIGHT_ENABLE
129       RGB_current_mode = rgblight_config.mode;
130     #endif
131     //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
132     #ifdef SSD1306OLED
133         iota_gfx_init(!has_usb());   // turns on the display
134     #endif
135 }
136
137 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
138 #ifdef SSD1306OLED
139
140 void matrix_scan_user(void) {
141    iota_gfx_task();
142 }
143
144 inline void matrix_render_user(struct CharacterMatrix *matrix) {
145   if (is_master) {
146     matrix_write_ln(matrix, read_layer_state());
147     matrix_write_ln(matrix, read_keylog());
148     matrix_write_ln(matrix, read_keylogs());
149     //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
150     //matrix_write_ln(matrix, read_host_led_state());
151     //matrix_write_ln(matrix, read_timelog());
152   } else {
153     matrix_write(matrix, read_logo());
154   }
155 }
156
157 inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
158   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
159     memcpy(dest->display, source->display, sizeof(dest->display));
160     dest->dirty = true;
161   }
162 }
163
164 void iota_gfx_task_user(void) {
165   struct CharacterMatrix matrix;
166   matrix_clear(&matrix);
167   matrix_render_user(&matrix);
168   matrix_update(&display, &matrix);
169 }
170
171 #endif
172
173 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
174   #ifdef SSD1306OLED
175     if (record->event.pressed) {
176       set_keylog(keycode, record);
177       set_timelog();
178     }
179   #endif
180
181   switch (keycode) {
182     case LOWER:
183       if (record->event.pressed) {
184         layer_on(_LOWER);
185         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
186       } else {
187         layer_off(_LOWER);
188         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
189       }
190       break;
191     case RAISE:
192       if (record->event.pressed) {
193         layer_on(_RAISE);
194         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
195       } else {
196         layer_off(_RAISE);
197         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
198       }
199       break;
200     case ADJUST:
201         if (record->event.pressed) {
202           layer_on(_ADJUST);
203         } else {
204           layer_off(_ADJUST);
205         }
206         break;
207
208     #ifdef RGBLIGHT_ENABLE
209     case RGB_MOD:
210         if (record->event.pressed) {
211           rgblight_mode(RGB_current_mode);
212           rgblight_step();
213           RGB_current_mode = rgblight_config.mode;
214         }
215       break;
216     case RGBRST:
217         if (record->event.pressed) {
218           eeconfig_update_rgblight_default();
219           rgblight_enable();
220           RGB_current_mode = rgblight_config.mode;
221         }
222       break;
223     #endif
224     default:
225       return true;
226   }
227
228   return false;
229 }