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