]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/treadstone48/keymaps/like_jis_rs/keymap.c
[Keyboard] add treeadstone48 (#5405)
[qmk_firmware.git] / keyboards / treadstone48 / keymaps / like_jis_rs / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "keymap_jp.h"
3 #include "../common/oled_helper.h"
4
5 extern keymap_config_t keymap_config;
6
7 #ifdef RGBLIGHT_ENABLE
8 //Following line allows macro to read current RGB settings
9 extern rgblight_config_t rgblight_config;
10 #endif
11
12 extern uint8_t is_master;
13
14 // Each layer gets a name for readability, which is then used in the keymap matrix below.
15 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
16 // Layer names don't all need to be of the same length, obviously, and you can also skip them
17 // entirely and just use numbers.
18 enum layer_number {
19   _BASE = 0,
20   _BASES,
21   _LOWER,
22   _LOWRS,
23   _RAISE,
24   _ADJUST,
25 };
26
27 enum custom_keycodes {
28   BASE = SAFE_RANGE,
29   BASES,
30   LOWER,
31   LOWRS,
32   RAISE,
33   ADJUST,
34   KANJI,
35   RGBRST
36 };
37
38 enum tapdances{
39   TD_SCCL = 0,
40   TD_SLRO,
41 };
42
43 // Layer Mode aliases
44 #define _____ KC_TRNS
45 #define XXXXX KC_NO
46
47 #define KC_TBSF  LSFT_T(KC_TAB)
48 // #define KC_SPSF  LSFT_T(KC_SPC)
49 #define KC_ALAP  LALT_T(KC_APP)
50 #define KC_JEQL  LSFT(KC_MINS)
51 #define KC_SFUC  LSFT(KC_RO)
52 #define KC_RSBR  LSFT(KC_8)
53 #define KC_REBR  LSFT(KC_9)
54
55 #define KC_ZSFT  LSFT_T(KC_Z)
56 #define KC_ESCT  LCTL_T(KC_ESC)
57 #define KC_TBAL  LALT_T(KC_TAB)
58 #define KC_11SF  LSFT_T(KC_F11)
59
60 #define KC_SCCL  TD(TD_SCCL)
61 #define KC_SLRO  TD(TD_SLRO)
62
63 qk_tap_dance_action_t tap_dance_actions[] = {
64   [TD_SCCL] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_QUOT),
65   [TD_SLRO] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_RO),
66 };
67
68 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
69   [_BASE] = LAYOUT_rs( \
70   // Treadstone48                                                                                                           Rhymestone
71   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
72        KC_ESC,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_MINS,     KC_P7,   KC_P8,   KC_P9, KC_PSLS, KC_NLCK,\
73   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
74       KC_TBSF,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCCL,           KC_ENT,     KC_P4,   KC_P5,   KC_P6, KC_PAST,  KC_TAB,\
75   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
76       KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLRO,   KC_UP,              KC_P1,   KC_P2,   KC_P3, KC_PMNS, KC_PENT,\
77   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
78      KC_LCTRL, KC_LALT, KC_LGUI,   LOWER,          KC_BSPC,           KC_SPC,   RAISE, KC_ALAP, KC_LEFT, KC_DOWN, KC_RGHT,     LOWER,   KC_P0, KC_PDOT, KC_PPLS, KC_BSPC,\
79   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
80        KC_DEL \
81   // ExtraKey: Split backspace key or it is below the enter key.
82   ),
83
84   [_LOWER] = LAYOUT_rs( \
85   // Treadstone48                                                                                                           Rhymestone
86   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
87         _____,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5, KC_MINS,  KC_EQL, KC_JYEN, KC_LBRC, KC_RBRC,           KC_DEL,      KC_A,    KC_B,    KC_C, KC_JYEN, KC_HASH,\
88   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
89         _____,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,   XXXXX,   XXXXX, KC_SCLN, KC_QUOT, KC_BSLS,            _____,      KC_D,    KC_E,    KC_F, KC_PERC, KC_SFUC,\
90   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
91         _____,  KC_F11,  KC_F12,   BASES,   KANJI,  KC_ENT,   XXXXX, KC_COMM,  KC_DOT, KC_SLSH,   KC_RO, KC_PGUP,            KC_RSBR, KC_REBR, KC_RBRC, KC_QUOT,   _____,\
92   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
93         _____,   _____,   _____,   _____,           KC_DEL,            _____,   _____,   XXXXX, KC_HOME, KC_PGDN,  KC_END,     _____,   XXXXX, KC_COMM, KC_JEQL,  KC_DEL,\
94   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
95       XXXXX \
96   // ExtraKey: Split backspace key or it is below the enter key.
97   ),
98
99   [_BASES] = LAYOUT_rs( \
100   // Treadstone48                                                                                                           Rhymestone
101   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
102        KC_ESC,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_MINS,      KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,\
103   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
104       KC_TBSF,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCCL,           KC_ENT,      KC_A,    KC_S,    KC_D,    KC_F,    KC_G,\
105   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
106       KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLRO,   KC_UP,            KC_ZSFT,    KC_X,    KC_C,    KC_V,    KC_B,\
107   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
108      KC_LCTRL, KC_LALT, KC_LGUI,   LOWER,          KC_BSPC,           KC_SPC,   RAISE, KC_ALAP, KC_LEFT, KC_DOWN, KC_RGHT,   KC_ESCT, KC_TBAL, KC_LGUI,   LOWRS, KC_BSPC,\
109   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
110        KC_DEL \
111   // ExtraKey: Split backspace key or it is below the enter key.
112   ),
113
114   [_LOWRS] = LAYOUT_rs( \
115   // Treadstone48                                                                                                           Rhymestone
116   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
117         _____,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5, KC_MINS,  KC_EQL, KC_JYEN, KC_LBRC, KC_RBRC,           KC_DEL,     KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,\
118   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
119         _____,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,   XXXXX,   XXXXX, KC_SCLN, KC_QUOT, KC_BSLS,            _____,     KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,\
120   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
121         _____,  KC_F11,  KC_F12,    BASE,   KANJI,  KC_ENT,   XXXXX, KC_COMM,  KC_DOT, KC_SLSH,   KC_RO, KC_PGUP,            KC_11SF,  KC_F12,    BASE,   KANJI,  KC_ENT,\
122   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
123         _____,   _____,   _____,   _____,           KC_DEL,            _____,   _____,   XXXXX, KC_HOME, KC_PGDN,  KC_END,     _____,   _____,   _____,   _____,  KC_DEL,\
124   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
125       XXXXX \
126   // ExtraKey: Split backspace key or it is below the enter key.
127   ),
128
129   [_RAISE] = LAYOUT_rs( \
130   // Treadstone48                                                                                                           Rhymestone
131   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
132         _____,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,            XXXXX,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
133   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
134         _____,   XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,    KC_4,    KC_5,    KC_6, KC_QUOT,            _____,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
135   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
136         _____,   XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,    KC_1,    KC_2,    KC_3,   KC_RO,   XXXXX,              XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
137   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
138         _____,   _____,   _____,   _____,            _____,            _____,   _____,    KC_0,  KC_DOT, KC_COMM, KC_SLSH,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
139   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
140       XXXXX \
141   // ExtraKey: Split backspace key or it is below the enter key.
142   ),
143
144   [_ADJUST] = LAYOUT_rs( \
145   // Treadstone48                                                                                                           Rhymestone
146   //,--------------------------------------------------------------------------------------------------------------------.  --------------------------------------------.
147         XXXXX,   RESET,  RGBRST, AG_NORM, AG_SWAP,   XXXXX,   XXXXX, KC_WH_L, KC_WH_U, KC_HOME, KC_PGUP,            XXXXX,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
148   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------|  --------+--------+--------+--------+--------|
149         XXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,   XXXXX,   XXXXX, KC_WH_R, KC_WH_D,  KC_END, KC_PGDN,            XXXXX,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
150   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
151         _____, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,   XXXXX,   XXXXX,   XXXXX, KC_BTN1, KC_BTN2,   XXXXX, KC_MS_U,              XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
152   //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------|  --------+--------+--------+--------+--------|
153         _____,   _____,   _____,   _____,            XXXXX,            XXXXX,   _____,   XXXXX, KC_MS_L, KC_MS_D, KC_MS_R,     XXXXX,   XXXXX,   XXXXX,   XXXXX,   XXXXX,\
154   //`--------------------------------------------------------------------------------------------------------------------'  --------------------------------------------'
155       XXXXX \
156   // ExtraKey: Split backspace key or it is below the enter key.
157   )
158 };
159
160 #define L_BASE _BASE
161 #define L_BASES (1<<_BASES)
162 #define L_LOWER (1<<_LOWER)
163 #define L_LOWRS (1<<_LOWRS)
164 #define L_RAISE (1<<_RAISE)
165 #define L_ADJUST (1<<_ADJUST)
166 #define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
167
168 #ifdef SSD1306OLED
169 typedef struct {
170   uint8_t state;
171   char name[8];
172 }LAYER_DISPLAY_NAME;
173
174 #define LAYER_DISPLAY_MAX 7
175 const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
176   {L_BASE, "Base"},
177   {L_BASE + 1, "Base"},
178   {L_BASES, "BaseSpl"},
179   {L_LOWER, "Lower"},
180   {L_LOWRS, "LowrSpl"},
181   {L_RAISE, "Raise"},
182   {L_ADJUST_TRI, "Adjust"}
183 };
184
185 static inline const char* get_leyer_status(void) {
186
187   for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
188     if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
189
190       return layer_display_name[i].name;
191     } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
192
193       return layer_display_name[i].name;
194     }
195   }
196
197   return "?";
198 }
199
200 static char layer_status_buf[24] = "Layer state ready.\n";
201 static inline void update_keymap_status(void) {
202
203   snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
204     keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
205 }
206
207 static inline void render_keymap_status(struct CharacterMatrix *matrix) {
208
209   matrix_write(matrix, layer_status_buf);
210 }
211
212 #define UPDATE_KEYMAP_STATUS() update_keymap_status()
213 #define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
214
215 #else
216
217 #define UPDATE_KEYMAP_STATUS()
218 #define RENDER_KEYMAP_STATUS(a)
219
220 #endif
221
222 void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
223
224   pressed ? layer_on(layer1) : layer_off(layer1);
225   IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
226 }
227
228 int RGB_current_mode;
229 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
230
231   UPDATE_KEY_STATUS(keycode, record);
232
233   bool result = false;
234   switch (keycode) {
235     case LOWER:
236       update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
237       break;
238     case RAISE:
239       update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
240       break;
241     case BASE:
242       if (record->event.pressed) {
243         default_layer_set(L_BASE);
244       }
245       break;
246     case BASES:
247       if (record->event.pressed) {
248         default_layer_set(L_BASES);
249       }
250       break;
251     case LOWRS:
252       update_change_layer(record->event.pressed, _LOWRS, _RAISE, _ADJUST);
253       break;
254     case KANJI:
255       if (record->event.pressed) {
256         if (keymap_config.swap_lalt_lgui == false) {
257           register_code(KC_LANG2);
258         } else {
259           SEND_STRING(SS_LALT("`"));
260         }
261       } else {
262         unregister_code(KC_LANG2);
263       }
264       break;
265     #ifdef RGBLIGHT_ENABLE
266       case RGB_MOD:
267           if (record->event.pressed) {
268             rgblight_mode(RGB_current_mode);
269             rgblight_step();
270             RGB_current_mode = rgblight_config.mode;
271           }
272         break;
273       case RGBRST:
274           if (record->event.pressed) {
275             eeconfig_update_rgblight_default();
276             rgblight_enable();
277             RGB_current_mode = rgblight_config.mode;
278           }
279         break;
280     #endif
281     default:
282       result = true;
283       break;
284   }
285
286   UPDATE_KEYMAP_STATUS();
287   return result;
288 }
289
290 void matrix_init_user(void) {
291   #ifdef RGBLIGHT_ENABLE
292     RGB_current_mode = rgblight_config.mode;
293   #endif
294   //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
295   #ifdef SSD1306OLED
296     iota_gfx_init(!has_usb()); // turns on the display
297   #endif
298 }
299
300 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
301 #ifdef SSD1306OLED
302
303 void matrix_scan_user(void) {
304   iota_gfx_task();  // this is what updates the display continuously
305 }
306
307 static inline void matrix_update(struct CharacterMatrix *dest,
308                           const struct CharacterMatrix *source) {
309   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
310     memcpy(dest->display, source->display, sizeof(dest->display));
311     dest->dirty = true;
312   }
313 }
314
315 static inline void render_status(struct CharacterMatrix *matrix) {
316
317   UPDATE_LED_STATUS();
318   RENDER_LED_STATUS(matrix);
319   RENDER_KEYMAP_STATUS(matrix);
320   UPDATE_LOCK_STATUS();
321   RENDER_LOCK_STATUS(matrix);
322   RENDER_KEY_STATUS(matrix);
323 }
324
325 void iota_gfx_task_user(void) {
326   struct CharacterMatrix matrix;
327
328   #if DEBUG_TO_SCREEN
329     if (debug_enable) {
330       return;
331     }
332   #endif
333
334   matrix_clear(&matrix);
335   if (is_master) {
336     render_status(&matrix);
337   }
338
339   matrix_update(&display, &matrix);
340 }
341
342 #endif