Skip to content

Instantly share code, notes, and snippets.

@swanmatch
Created December 7, 2020 14:23
Show Gist options
  • Save swanmatch/aefcdcd17916878b91cb4e707e6f386f to your computer and use it in GitHub Desktop.
Save swanmatch/aefcdcd17916878b91cb4e707e6f386f to your computer and use it in GitHub Desktop.
oled nanmo wakaran
/* Copyright 2019 SwanMatch
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Defines the keycodes used by our macros in process_record_user
//enum custom_keycodes {
// QMKBEST = SAFE_RANGE,
// QMKURL
//};
enum layer {
_QWERTY,
_CURSOL,
_CALC,
_ADJUST,
};
enum custom_keycodes {
RGBRST = SAFE_RANGE,
KC_00,
ALTAB
};
#define CALC LT(_CALC, KC_ESC)
#define CUSL LT(_CURSOL, KC_TAB)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* |Tab | Q | W | E | R | T | | Y | U | I | O | P | = |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |Shift | A | S | D | F | G | | H | J | K | L | ; | ' |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Ctrl | Z | X | C | V | B |-------.-------. ,---------------| N | M | , | . | / | - |
* `-----------------------------------------/ / / \ \ \----------------------------------------'
* | Alt | Bksp | / Shift / Calc / \ Cursol\ Ctrl | Del | App |
* | F5 | |/ Space / Esc / \ Tab \ Enter\ | F12 |
* `-----------------------------' '---------------------------'
*/
[_QWERTY] = LAYOUT(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
LALT_T(KC_F5), KC_BSPC, LSFT_T(KC_SPC), CALC, CUSL, LCTL_T(KC_ENT), KC_DEL, GUI_T(KC_F12)
),
/* Cursol
* ,-----------------------------------------. ,-----------------------------------------.
* | | F1 | F2 | PgUp | F4 | F5 | | F6 | F7 | Up | F9 | F10 |PrtSc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | ~ | Home | PgDw | End | ( | | ) | Left | Down |Right | F8 | F11 |
* |------+------+------+------+------+------+ +------+------+------+------+------+------|
* | | ` | CLft | F3 | CRgt |SALTAB|-------.-------. ,---------------|ALTTAB| OSL | F8 | OSR | | |
* `-----------------------------------------/ / / \ \ \----------------------------------------'
* | | | / / / \ \ \ | | |
* | | |/ / / \ \ \ | | |
* `-----------------------------' '-----------------------------'
*/
[_CURSOL] = LAYOUT(
RESET , KC_F1, KC_F2, KC_PGUP, KC_F4, KC_F5, KC_F6, KC_F7, KC_UP, KC_F9, KC_F10, RESET,
_______, KC_TILD, KC_HOME, KC_PGDN, KC_END, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PIPE, KC_F11,
_______, KC_GRV, C(KC_LEFT), KC_F3, C(KC_RGHT), S(ALTAB), ALTAB, LCA(KC_LEFT), KC_F8, LCA(KC_RGHT), KC_BSLS, RGBRST,
_______, _______, C(KC_SPC), MO(_ADJUST), _______, _______, _______, _______
),
/* Calculater
* ,-----------------------------------------. ,-----------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | @ | # | $ | % | [ | | ] | 4 | 5 | 6 | + | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | ^ | & | * | ! | { |-------.-------. ,---------------| } | 1 | 2 | 3 | = | |
* `-----------------------------------------/ / / \ \ \----------------------------------------'
* | | | / / / \ \ \ | | |
* | | |/ / / \ \ 0 \ | 00 | . |
* `-----------------------------' '------------------------------'
*/
[_CALC] = LAYOUT(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_PPLS, _______,
_______, KC_CIRC, KC_AMPR, KC_ASTR, KC_EXLM, KC_LCBR, KC_RCBR, KC_1, KC_2, KC_3, KC_PEQL, _______,
_______, _______, _______, _______, MO(_ADJUST), KC_0, KC_00, KC_PDOT
),
/* ADJUST
* ,-----------------------------------------. ,-----------------------------------------.
* | | | |FrqRst| | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | |Music |FrqUp |Sound | | | SPD+ | MOD+ | VAL+ | SAD+ | HUE+ | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | |Scale |FrqDwn| | |-------.-------. ,---------------| SPD- | SPD- | VAL- | SAD- | HUE- | |
* `-----------------------------------------/ / / \ \ \----------------------------------------'
* | | | / / / \ \ \ | | |
* | | |/ / / \ \ \ | | |
* `-----------------------------' '------------------------------'
*/
[_ADJUST] = LAYOUT(
_______, XXXXXXX, XXXXXXX, CK_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
XXXXXXX, XXXXXXX, MU_TOG, CK_UP, AU_TOG, XXXXXXX, RGB_SPI, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, XXXXXXX,
XXXXXXX, XXXXXXX, MU_MOD, CK_DOWN, XXXXXXX, XXXXXXX, RGB_SPD, RGB_RMOD, RGB_VAD, RGB_SAD, RGB_HUD, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
)
};
#ifdef RGBLIGHT_ENABLE
// Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif
int RGB_current_mode;
bool alt_pressed = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
#ifdef RGBLIGHT_ENABLE
case RGBRST:
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
RGB_current_mode = rgblight_config.mode;
}
break;
#endif
case KC_SCLN:
if (keyboard_report->mods & MOD_BIT(KC_LSFT)) {
if (record->event.pressed) {
unregister_code(KC_LSFT);
tap_code16(keycode);
register_code(KC_LSFT);
}
/* } else if (keyboard_report->mods & MOD_BIT(KC_RSFT)) {
if (record->event.pressed) {
unregister_code(KC_RSFT);
tap_code16(keycode);
register_code(KC_RSFT);
} */
} else {
if (record->event.pressed) {
tap_code16(S(keycode));
}
}
return false;
break;
case KC_00:
if (record->event.pressed) {
tap_code(KC_0);
register_code(KC_0);
} else {
unregister_code(KC_0);
}
return false;
break;
case S(ALTAB):
case ALTAB:
if (record->event.pressed) {
if (!alt_pressed) {
alt_pressed = true;
register_code(KC_LALT);
}
if (keycode == S(ALTAB)) {
register_code(KC_LSFT);
}
register_code(KC_TAB);
} else {
unregister_code(KC_TAB);
if (keycode == S(ALTAB)) {
unregister_code(KC_LSFT);
}
}
return false;
break;
default:
if (alt_pressed) {
alt_pressed = false;
unregister_code(KC_LALT);
if (record->event.pressed) {
return false;
}
}
break;
}
return true;
}
void matrix_init_user(void) {
#ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config.mode;
#endif
}
#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180;
}
static void render_makai_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
};
oled_write_P(qmk_logo, true);
}
// static void render_makai_logo(void) {
// static const char PROGMEM makai_logo[] = {
// 0, 0, 0,224,224,160,160,224,224,176,176, 48,160,160,224,224,160,160, 0, 0, 0, 0,224,224, 32, 32, 32,224,224, 32, 32, 32,224,224, 0, 0, 0, 0,128,240,112, 32, 96, 64, 32,224,224, 0,160,240,240,160,224,192, 0, 0, 0,224,224,176,176,224,224, 0, 0,224, 32, 32,224,224,128,192, 0, 0, 96,176,160,240,240,240,160,160, 0, 0,224,224, 0,240,240, 0, 0, 0, 0, 0,128,224,240, 32, 0,192,240,240,176,128,128,128,128,128, 0, 0, 32, 32, 32, 32, 32, 32, 32, 0,192,192,192, 96, 32, 48, 48, 32, 0, 0,
// 0, 0, 0,255,255, 4,250,255,175,170,252,248,252,170,175,255,250, 4, 0, 0, 0, 64, 79, 47, 57,249,217, 15, 15, 25,249,249,111,111,192,128, 0, 0,131, 36,254,255,177, 0, 7,255,252, 12,166,255,255,166,167, 3, 0, 0, 38, 63,159,134,134,191,191,128,129,165,152,136,157,191, 55, 49, 0, 0, 64, 94, 70,223,223,223,230,126, 96,192, 67, 75, 88,255, 63, 0, 0, 8, 12,255,255,255, 0, 12, 7, 3, 1,255,255,255,136,136,136, 0, 0, 0,255,255,127, 17, 17, 63, 63,128,255,255, 31, 6,254,254,254, 6, 0, 0,
// 0, 8, 14, 7, 1, 8, 12, 6, 3, 1, 0, 15, 15, 12, 15, 14, 15, 14, 12, 0, 0, 0, 8, 12, 7, 3, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 12, 13, 7, 7, 2, 8, 6, 3, 6, 14, 12, 13, 13, 12, 12, 12, 0, 0, 8, 8, 15, 15, 8, 15, 15, 8, 15, 15, 8, 8, 15, 15, 8, 8, 0, 0, 0, 5, 13, 13, 15, 7, 4, 4, 0, 1, 3, 6, 15, 12, 8, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 8, 15, 3, 0, 0, 0, 0, 12, 7, 3, 0, 0, 0, 15, 15, 15, 0, 0, 0,
// };
// oled_write_raw_P(makai_logo, sizeof(makai_logo));
// }
static void render_status(void) {
oled_write_ln(" Swan SilverBullet", false);
oled_write(" ", false);
switch (get_highest_layer(layer_state)) {
case _QWERTY:
oled_write("QWERTY", false);
break;
case _CURSOL:
oled_write("Cursol", false);
break;
case _CALC:
oled_write("Number", false);
break;
case _ADJUST:
oled_write("Adjust", false);
break;
default:
oled_write("Undefined", false);
}
oled_write(" Layer\n\n", false);
uint8_t modifiers = get_mods();
led_t led_state = host_keyboard_led_state();
oled_write(" ", false);
oled_write("CapsLock", led_state.caps_lock);
oled_write(" ", false);
oled_write("NumLock", led_state.num_lock);
oled_write(" ", false);
oled_write("Ctrl", (modifiers & MOD_MASK_CTRL));
oled_write(" ", false);
oled_write("Shift", (modifiers & MOD_MASK_SHIFT));
oled_write(" ", false);
oled_write("Alt", (modifiers & MOD_MASK_ALT));
oled_write(" ", false);
oled_write("OS\n", (modifiers & MOD_MASK_GUI));
}
static void render_logo(void) {
static const char PROGMEM logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,124,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 96, 48, 24, 24, 12, 12, 6, 7, 62,242,131, 3, 3, 3, 3, 3, 3, 6, 6, 6, 4, 12, 24, 24, 48, 96,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,224,240,240,240,240,240,240,240,240, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,224, 48,152,248, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,248, 30, 7, 3, 0, 0, 0, 0,128,224, 48, 24, 8, 4, 5, 31,250,130, 2, 2, 2, 6, 4, 12, 8, 16, 96,192, 0, 0, 0,128,129,135,142,248,224, 64, 96, 96, 32, 32, 48, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 31, 63, 59,113,225,225,193,129, 3, 3, 3,129,224,240, 54, 2, 0, 0,224,248,254,255, 55, 13, 6, 1, 0, 0,240,252,248, 0, 0,128,224,224,128, 0,128,240,248,252,252,216,248, 48, 0, 0, 0,248,252,252,188,224, 48,248,240,128, 0, 0, 0,255,129, 0, 0,128,128,128,192,220,255, 64, 96, 32, 32, 48, 48, 16, 17, 31,252,200, 12, 12, 4, 4, 6, 2, 2,195,127, 1, 1, 1, 1, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 48,124,126,115,112,112,112,121, 63, 31, 6, 0, 0, 15, 31, 31, 24, 8, 12, 7, 63, 63,127,127, 96, 48, 48, 24, 4, 15, 31, 31, 31, 28, 6, 3, 0, 0, 1, 1, 3, 15, 15, 28, 24, 25, 8, 12, 4, 6, 15, 31, 31, 15, 3, 0, 12, 4, 4, 6, 6, 2, 2, 3, 15, 61,113,193,128, 0, 0, 0, 0, 3, 4, 8, 16, 16, 32, 32, 32, 96, 96, 39,126,224, 48, 16, 8, 12, 6, 1, 0, 0, 0, 0,128,224,120, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,224,224,224,224,224,240,240,224,224,224,224,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,240, 56,216,120, 16, 0, 0, 0,129,227,247, 62,220,120, 24, 48, 48, 96, 96, 96, 96, 64, 64, 64, 64, 96, 99,254,240,240,240, 48, 24, 12, 12, 6, 3,129,192,224,224,128, 0, 0, 0, 0,128,192,224,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,225,249,255,247,113,112,120,120,232,236,196, 3, 1,192,240,252,124, 14, 0,128,224,112, 0, 0, 0,224,248,254,255, 51, 12, 7, 1, 0,128,240,248,254,255, 27, 12, 3, 1, 0,128,240,248,252,252,220,248, 48, 0, 0,128,242,254,255,119, 31, 59, 1, 1,153,124,126,255,239,231,243,253,223, 0, 60,126,255,255,231,227,249,255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,240,120,120,248,252,127,127,120,120, 56, 56, 56, 28, 28, 12, 15, 7, 0, 0, 3, 3, 3, 3, 1, 15, 15, 15, 12, 12, 6, 3, 31, 63,127,127,112, 48, 24, 12, 6, 15, 31, 63,127,121, 48, 48, 24, 12, 6, 3, 7, 15, 15, 8, 8, 8, 12, 4, 2, 63,127,127,127, 96, 48, 16, 8, 6, 0, 0, 0, 28, 63, 63, 31, 1, 0, 0, 0, 0, 24, 62, 63, 63, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
oled_write_raw_P(logo, sizeof(logo));
}
void oled_task_user(void) {
if (is_keyboard_master()) {
render_makai_logo();
render_status();
} else {
render_logo();
}
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment