]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/kidbrazil/keymap.c
[Keymap] CRKBD Custom Keymap - KidBrazil (#7630)
[qmk_firmware.git] / keyboards / crkbd / keymaps / kidbrazil / keymap.c
1 #include QMK_KEYBOARD_H
2
3 // [Init Variables] ----------------------------------------------------------//
4 extern uint8_t is_master;
5 // Oled timer similar to Drashna's
6 static uint32_t oled_timer = 0;
7 // Boolean to store
8 bool eeprom_oled_enabled = false;
9
10 // [CRKBD layers Init] -------------------------------------------------------//
11 enum crkbd_layers {
12     _QWERTY,
13     _NUM,
14     _SYM,
15     _GAME,
16     _WEAPON
17 };
18
19 // [Keymaps] -----------------------------------------------------------------//
20 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21           [_QWERTY] = LAYOUT(
22       KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T,                                  KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
23       LSFT_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G,                          KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
24       KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B,                                 KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
25                           LGUI_T(KC_PGUP), MO(_NUM), KC_SPC,         KC_ENT, MO(_SYM), LALT_T(KC_PGDN)
26     ),
27
28           [_NUM] = LAYOUT(
29       KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,                                      KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
30       LSFT_T(KC_TAB), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,                         KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F12, KC_NO,
31       KC_LCTL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,                               KC_PGUP, KC_PGDN, KC_HOME, KC_END, KC_F11, KC_NO,
32                                LGUI_T(KC_PGUP), KC_TRNS, KC_SPC,         KC_ENT, KC_TRNS, LALT_T(KC_PGDN)
33     ),
34
35           [_SYM] = LAYOUT(
36       KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC,                                   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
37       LSFT_T(KC_TAB), RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,                        KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
38       KC_LCTL, RGB_VAD, RGB_RMOD, RGB_HUD, RGB_SAD, TG(_GAME),                            KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
39                                           LGUI_T(KC_PGUP), KC_TRNS, KC_SPC,       KC_ENT, KC_TRNS, LALT_T(KC_PGDN)
40     ),
41
42           [_GAME] = LAYOUT(
43       KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T,                                   KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
44       KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G,                                  KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_NO,
45       KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,                               KC_PGUP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO,
46                             KC_TAB, MO(_WEAPON), KC_SPC,              KC_ENT, KC_TRNS, KC_NO
47       ),
48
49           [_WEAPON] = LAYOUT(
50       KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,                                   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
51       KC_TRNS, KC_LSFT, KC_A, KC_S, KC_D, KC_F,                               KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
52       KC_TRNS, KC_LCTL, KC_Z, KC_X, KC_C, KC_V,                               KC_7, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
53                                 KC_TRNS, KC_TAB, KC_TRNS,             KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS
54     )
55 };
56
57 //int RGB_current_mode;
58
59 // [Process User Input] ------------------------------------------------------//
60 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
61     // Use process_record_keymap to reset timer on keypress
62     if (record->event.pressed) {
63         #ifdef OLED_DRIVER_ENABLE
64             oled_timer = timer_read32();
65         #endif
66         // Restore LEDs if they are enabled in eeprom
67         rgb_matrix_enable_noeeprom();
68     }
69     return true;
70 }
71
72 // [OLED Configuration] ------------------------------------------------------//
73 #ifdef OLED_DRIVER_ENABLE
74
75 // Init Oled and Rotate....
76 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
77     if (!has_usb())
78       return OLED_ROTATION_180;  // flips the display 180 to see it from my side
79     return rotation;
80 }
81
82 // Read logo from font file
83 const char *read_logo(void);
84
85 // {OLED helpers} -----------------------------------------------//
86
87 // Render Blank Space
88 void render_space(void) {
89     oled_write_ln_P(PSTR("     "), false);
90 }
91
92 // Render separator lines for oled display
93 void render_separator(void) {
94     switch (get_highest_layer(layer_state)){
95         case _GAME:
96         case _WEAPON:
97             oled_write_ln_P(PSTR("===================="), false);
98             break;
99         default:
100             oled_write_ln_P(PSTR("++++++++++++++++++++"), false);
101     }
102 }
103
104 // Render current layer state
105 void render_layer_state(void){
106         // If you want to change the display of OLED, you need to change here
107     switch (get_highest_layer(layer_state)){
108         case _QWERTY:
109             oled_write_ln_P(PSTR("| MODE | QWRTY     ]"), false);
110             break;
111         case _NUM:
112             oled_write_ln_P(PSTR("| MODE | NUMBERS   ]"), false);
113             break;
114         case _SYM:
115             oled_write_ln_P(PSTR("| MODE | SYMBOLS   ]"), false);
116             break;
117         case _GAME:
118             oled_write_ln_P(PSTR("|    G  A  M  E    ]"), false);
119             break;
120         case _WEAPON:
121             oled_write_ln_P(PSTR("| W  E  A  P  O  N ]"), false);
122             break;
123         default:
124             oled_write_ln_P(PSTR("| MODE | UNDEF     ]"), false);
125     }
126 }
127
128 // Render USB State
129 void render_usb_state(void) {
130     switch (USB_DeviceState) {
131       case DEVICE_STATE_Unattached:
132                             oled_write_ln_P(PSTR("| USB  | FREE      ]"), false);
133           break;
134       case DEVICE_STATE_Suspended:
135           oled_write_ln_P(PSTR("| USB  | SLEEP     ]"), false);
136           break;
137       case DEVICE_STATE_Configured:
138           oled_write_ln_P(PSTR("| USB  | READY     ]"), false);
139           break;
140       case DEVICE_STATE_Powered:
141           oled_write_ln_P(PSTR("| USB  | PWRD      ]"), false);
142           break;
143       case DEVICE_STATE_Default:
144           oled_write_ln_P(PSTR("| USB  | DFLT      ]"), false);
145           break;
146       case DEVICE_STATE_Addressed:
147           oled_write_ln_P(PSTR("| USB  | ADDRS     ]"), false);
148           break;
149       default:
150           oled_write_ln_P(PSTR("| USB  | INVALID   ]"), false);
151     }
152 }
153
154 // Render Logo
155 void render_logo(void) {
156     oled_write(read_logo(), false);
157 }
158
159 // Master OLED Screen (Left Hand )
160 void render_master_oled(void) {
161     // Switch display based on Layer
162     switch (get_highest_layer(layer_state)){
163         case _GAME:
164             render_separator();
165             render_layer_state();
166             render_separator();
167             render_separator();
168             break;
169         case _WEAPON:
170             render_separator();
171             render_separator();
172             render_layer_state();
173             render_separator();
174             break;
175         default:
176             render_separator();
177             render_layer_state();
178             render_separator();
179             render_usb_state();
180     }
181 }
182
183 // lave OLED scren (Right Hand)
184 void render_slave_oled(void) {
185     render_logo();
186 }
187
188 // {OLED Task} -----------------------------------------------//
189 void oled_task_user(void) {
190       // Drashna style timeout for LED and OLED Roughly 8mins
191       if (timer_elapsed32(oled_timer) > 480000) {
192           oled_off();
193           rgb_matrix_disable_noeeprom();
194           return;
195       }
196       else {
197           oled_on();
198       }
199       // Show logo when USB dormant
200       switch (USB_DeviceState) {
201           case DEVICE_STATE_Unattached:
202           case DEVICE_STATE_Powered:
203           case DEVICE_STATE_Suspended:
204             render_logo();
205             break;
206           default:
207             if (is_master) {
208                 render_master_oled();
209             } else {
210                 render_slave_oled();
211             }
212       }
213 }
214 #endif