arnaucube
arnaucube/configsPublic Self-hosted repository
configs/keymap.c
keymap.cRaw
  1/*
  2Copyright 2019 @foostan
  3Copyright 2020 Drashna Jaelre <@drashna>
  4
  5This program is free software: you can redistribute it and/or modify
  6it under the terms of the GNU General Public License as published by
  7the Free Software Foundation, either version 2 of the License, or
  8(at your option) any later version.
  9
 10This program is distributed in the hope that it will be useful,
 11but WITHOUT ANY WARRANTY; without even the implied warranty of
 12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13GNU General Public License for more details.
 14
 15You should have received a copy of the GNU General Public License
 16along with this program.  If not, see <http://www.gnu.org/licenses/>.
 17*/
 18
 19// INSTRUCTIONS
 20// clone repo https://github.com/qmk/qmk_firmware into ~/qmk_firmware
 21// copy this file into ~/qmk_firmware/keyboards/crkbd/keymaps/default/keymap.c
 22// copy qmk.ini into ~/
 23// once keyboard connected, execute:
 24// > qmk flash
 25
 26#include QMK_KEYBOARD_H
 27
 28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 29  [0] = LAYOUT_split_3x6_3(
 30  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 31       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
 32  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 33      KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
 34  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 35      KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, KC_RSFT,
 36  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 37                                          KC_LGUI,   MO(1),  KC_SPC,     KC_ENT,   MO(2), KC_RALT
 38                                      //`--------------------------'  `--------------------------'
 39
 40  ),
 41
 42  [1] = LAYOUT_split_3x6_3(
 43  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 44       KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
 45  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 46      KC_LCTL,KC__MUTE,KC__VOLDOWN,KC__VOLUP, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
 47  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 48      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 49  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 50                                          KC_LGUI, _______,  KC_SPC,     KC_ENT,   MO(3), KC_RALT
 51                                      //`--------------------------'  `--------------------------'
 52  ),
 53
 54  [2] = LAYOUT_split_3x6_3(
 55  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 56       KC_ESC, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,  KC_DEL,
 57  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 58      KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV,
 59  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 60      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
 61  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 62                                          KC_LGUI,   MO(3),  KC_SPC,     KC_ENT, _______, KC_RALT
 63                                      //`--------------------------'  `--------------------------'
 64  ),
 65
 66  [3] = LAYOUT_split_3x6_3(
 67  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 68        RESET,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                        KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,
 69  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 70      RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  KC_F12,
 71  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 72      RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 73  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 74                                          KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT
 75                                      //`--------------------------'  `--------------------------'
 76  )
 77};
 78
 79#ifdef OLED_DRIVER_ENABLE
 80oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 81  if (!is_master) {
 82    return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
 83  }
 84  return rotation;
 85}
 86
 87#define L_BASE 0
 88#define L_LOWER 2
 89#define L_RAISE 4
 90#define L_ADJUST 8
 91
 92void oled_render_layer_state(void) {
 93    oled_write_P(PSTR("Layer: "), false);
 94    switch (layer_state) {
 95        case L_BASE:
 96            oled_write_ln_P(PSTR("Default"), false);
 97            break;
 98        case L_LOWER:
 99            oled_write_ln_P(PSTR("Lower"), false);
100            break;
101        case L_RAISE:
102            oled_write_ln_P(PSTR("Raise"), false);
103            break;
104        case L_ADJUST:
105        case L_ADJUST|L_LOWER:
106        case L_ADJUST|L_RAISE:
107        case L_ADJUST|L_LOWER|L_RAISE:
108            oled_write_ln_P(PSTR("Adjust"), false);
109            break;
110    }
111}
112
113
114char keylog_str[24] = {};
115
116const char code_to_name[60] = {
117    ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
118    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
119    'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
120    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
121    'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
122    '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
123
124void set_keylog(uint16_t keycode, keyrecord_t *record) {
125  char name = ' ';
126    if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
127        (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
128  if (keycode < 60) {
129    name = code_to_name[keycode];
130  }
131
132  // update keylog
133  snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
134           record->event.key.row, record->event.key.col,
135           keycode, name);
136}
137
138void oled_render_keylog(void) {
139    oled_write(keylog_str, false);
140}
141
142void render_bootmagic_status(bool status) {
143    /* Show Ctrl-Gui Swap options */
144    static const char PROGMEM logo[][2][3] = {
145        {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
146        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
147    };
148    if (status) {
149        oled_write_ln_P(logo[0][0], false);
150        oled_write_ln_P(logo[0][1], false);
151    } else {
152        oled_write_ln_P(logo[1][0], false);
153        oled_write_ln_P(logo[1][1], false);
154    }
155}
156
157void oled_render_logo(void) {
158    static const char PROGMEM crkbd_logo[] = {
159        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
160        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
161        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
162        0};
163    oled_write_P(crkbd_logo, false);
164}
165
166void oled_task_user(void) {
167    if (is_master) {
168        oled_render_layer_state();
169        oled_render_keylog();
170    } else {
171        oled_render_logo();
172    }
173}
174
175bool process_record_user(uint16_t keycode, keyrecord_t *record) {
176  if (record->event.pressed) {
177    set_keylog(keycode, record);
178  }
179  return true;
180}
181#endif // OLED_DRIVER_ENABLE