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