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