arnaucube
arnaucube/configsPublic Self-hosted repository
configs/keyboards/corne_keymap.c
keyboards/corne_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// install qmk: python3 -m pip install --user qmk (https://docs.qmk.fm/#/newbs_getting_started)
 21// clone repo https://github.com/qmk/qmk_firmware into ~/qmk_firmware
 22// copy this file into ~/qmk_firmware/keyboards/crkbd/keymaps/default/keymap.c
 23// copy qmk.ini into ~/
 24//
 25// compile the keymap:
 26// > qmk compile -kb crkbd -km default
 27//
 28// once keyboard connected, execute:
 29// > qmk flash
 30//
 31// or if previous doesn't work, use:
 32// > qmk flash -kb crkbd -km default
 33//
 34// and lately it needs the '-bl dfu' too:
 35// > qmk flash -bl dfu -kb crkbd -km default
 36//
 37// If the right side does not work or acts as it were the left side, in
 38// keyboards/crkbd/keymaps/default/config.h add:
 39// #define SPLIT_USB_DETECT
 40//
 41// and to change the part that has the usb connected:
 42// #define MASTER_RIGHT
 43
 44#include QMK_KEYBOARD_H
 45
 46const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 47  [0] = LAYOUT_split_3x6_3(
 48  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 49       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
 50  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 51      KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
 52  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 53      KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, KC_RSFT,
 54  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 55                                          KC_LGUI,   MO(1),  KC_SPC,     KC_ENT,   MO(2), KC_RALT
 56                                      //`--------------------------'  `--------------------------'
 57
 58  ),
 59
 60  [1] = LAYOUT_split_3x6_3(
 61  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 62       KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
 63  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 64      KC_LCTL,KC_MUTE,KC_VOLD,KC_VOLU, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
 65  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 66      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 67  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 68                                          KC_LGUI, _______,  KC_SPC,     KC_ENT,   MO(3), KC_RALT
 69                                      //`--------------------------'  `--------------------------'
 70  ),
 71
 72  [2] = LAYOUT_split_3x6_3(
 73  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 74       KC_ESC, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,  KC_DEL,
 75  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 76      KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV,
 77  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 78      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
 79  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 80                                          KC_LGUI,   MO(3),  KC_SPC,     KC_ENT, _______, KC_RALT
 81                                      //`--------------------------'  `--------------------------'
 82  ),
 83
 84  [3] = LAYOUT_split_3x6_3(
 85  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 86        QK_RBT,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                        KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,
 87  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 88      RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  KC_F12,
 89  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 90      RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 91  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 92                                          KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT
 93                                      //`--------------------------'  `--------------------------'
 94  )
 95};
 96
 97#ifdef OLED_DRIVER_ENABLE
 98oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 99  if (!is_master) {
100    return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
101  }
102  return rotation;
103}
104
105#define L_BASE 0
106#define L_LOWER 2
107#define L_RAISE 4
108#define L_ADJUST 8
109
110void oled_render_layer_state(void) {
111    oled_write_P(PSTR("Layer: "), false);
112    switch (layer_state) {
113        case L_BASE:
114            oled_write_ln_P(PSTR("Default"), false);
115            break;
116        case L_LOWER:
117            oled_write_ln_P(PSTR("Lower"), false);
118            break;
119        case L_RAISE:
120            oled_write_ln_P(PSTR("Raise"), false);
121            break;
122        case L_ADJUST:
123        case L_ADJUST|L_LOWER:
124        case L_ADJUST|L_RAISE:
125        case L_ADJUST|L_LOWER|L_RAISE:
126            oled_write_ln_P(PSTR("Adjust"), false);
127            break;
128    }
129}
130
131
132char keylog_str[24] = {};
133
134const char code_to_name[60] = {
135    ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
136    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
137    'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
138    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
139    'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
140    '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
141
142void set_keylog(uint16_t keycode, keyrecord_t *record) {
143  char name = ' ';
144    if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
145        (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
146  if (keycode < 60) {
147    name = code_to_name[keycode];
148  }
149
150  // update keylog
151  snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
152           record->event.key.row, record->event.key.col,
153           keycode, name);
154}
155
156void oled_render_keylog(void) {
157    oled_write(keylog_str, false);
158}
159
160void render_bootmagic_status(bool status) {
161    /* Show Ctrl-Gui Swap options */
162    static const char PROGMEM logo[][2][3] = {
163        {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
164        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
165    };
166    if (status) {
167        oled_write_ln_P(logo[0][0], false);
168        oled_write_ln_P(logo[0][1], false);
169    } else {
170        oled_write_ln_P(logo[1][0], false);
171        oled_write_ln_P(logo[1][1], false);
172    }
173}
174
175void oled_render_logo(void) {
176    static const char PROGMEM crkbd_logo[] = {
177        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
178        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
179        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
180        0};
181    oled_write_P(crkbd_logo, false);
182}
183
184void oled_task_user(void) {
185    if (is_master) {
186        oled_render_layer_state();
187        oled_render_keylog();
188    } else {
189        oled_render_logo();
190    }
191}
192
193bool process_record_user(uint16_t keycode, keyrecord_t *record) {
194  if (record->event.pressed) {
195    set_keylog(keycode, record);
196  }
197  return true;
198}
199#endif // OLED_DRIVER_ENABLE