qmk_userspace/keyboards/aks_mls/v01/keymaps/default/keymap.c
2025-01-18 13:02:11 -06:00

240 lines
9.9 KiB
C

// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_SPECIAL1,
_SPECIAL2,
_STANDBY
};
enum custom_keycodes {
LYR_MUL = SAFE_RANGE,
LYR_MUR,
LYR_MDL,
LYR_MDR,
NXTAPP
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* The matrix is logically this:
* ┌─────┬─────┬─────┬───────────┐
* │ 0,0 │ 0,1 │ 0,2 │ 0,3 Enc 1 │
* ├─────┼─────┼─────┼───────────┤
* │ 1,0 │ 1,1 │ 1,2 │ 1,3 Enc 2 │
* ├─────┼─────┼─────┼───────────┤
* │ 2,0 │ 2,1 │ 2,2 │ 2,3 Enc 3 │
* ├─────┼─────┼─────┼───────────┤
* │ 3,0 │ 3,1 │ 3,2 │ 3,3 Enc 4 │
* └─────┴─────┴─────┴───────────┘
*
* But is physically mounted like this:
*
* ┌───────────┐ ┌───────────┐
* │ 0,3 Enc 1 │ │ 1,3 Enc 2 │
* └───────────┘ └───────────┘
* ┌─────┬─────┬─────┬─────┐
* │ 3,0 │ 2,0 │ 1,0 │ 0,0 │ ┌───────────┐
* ├─────┼─────┼─────┼─────┤ │ 2,3 Enc 3 │
* │ 3,1 │ 2,1 │ 1,1 │ 0,1 │ └───────────┘
* ├─────┼─────┼─────┼─────┤ ┌───────────┐
* │ 3,2 │ 2,2 │ 1,2 │ 0,2 │ │ 3,3 Enc 4 │
* └─────┴─────┴─────┴─────┘ └───────────┘
*
*
*/
[_BASE] = LAYOUT(
KC_P3, KC_P7, NXTAPP, KC_BSPC,
KC_P2, KC_P6, KC_DOT, KC_DEL,
KC_P1, KC_P5, KC_P9, KC_SPC,
KC_P0, KC_P4, KC_P8, TO(_SPECIAL1)
),
[_SPECIAL1] = LAYOUT(
KC_P7, KC_P8, KC_P9, KC_NO,
KC_P4, KC_P5, KC_P6, KC_NO,
KC_P1, KC_P2, KC_P3, KC_NO,
KC_P0, KC_PENT, KC_NO, TO(_SPECIAL2)
),
[_SPECIAL2] = LAYOUT(
KC_ACL0, KC_ACL1, KC_ACL2, KC_NO,
LYR_MUR, KC_MS_R, LYR_MDR, KC_NO,
KC_MS_U, KC_MS_BTN1, KC_MS_D, KC_NO,
LYR_MUL, KC_MS_L, LYR_MDL, TO(_STANDBY)
),
[_STANDBY] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, TO(_BASE)
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_UP, KC_DOWN),
ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN),
ENCODER_CCW_CW(KC_WH_U, KC_WH_D)
},
[_SPECIAL1] = { ENCODER_CCW_CW(KC_TRNS,KC_TRNS), ENCODER_CCW_CW(KC_MS_L, KC_MS_R),
ENCODER_CCW_CW(KC_PGUP, KC_PGDN),
ENCODER_CCW_CW(KC_TRNS,KC_TRNS)
},
[_SPECIAL2] = { ENCODER_CCW_CW(KC_TRNS,KC_TRNS), ENCODER_CCW_CW(KC_WH_U, KC_WH_D),
ENCODER_CCW_CW(KC_PGUP, KC_PGDN),
ENCODER_CCW_CW(KC_TRNS,KC_TRNS)
},
[_STANDBY] = { ENCODER_CCW_CW(KC_NO, KC_NO), ENCODER_CCW_CW(KC_NO, KC_NO),
ENCODER_CCW_CW(KC_NO, KC_NO),
ENCODER_CCW_CW(KC_NO, KC_NO)
},
};
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LYR_MUL:
if (record->event.pressed){
register_code(KC_MS_U);
register_code(KC_MS_L);
} else {
unregister_code(KC_MS_U);
unregister_code(KC_MS_L);
}
break;
case LYR_MUR:
if (record->event.pressed){
register_code(KC_MS_U);
register_code(KC_MS_R);
} else {
unregister_code(KC_MS_U);
unregister_code(KC_MS_R);
}
break;
case LYR_MDL:
if (record->event.pressed){
register_code(KC_MS_D);
register_code(KC_MS_L);
} else {
unregister_code(KC_MS_D);
unregister_code(KC_MS_L);
}
break;
case LYR_MDR:
if (record->event.pressed){
register_code(KC_MS_D);
register_code(KC_MS_R);
} else {
unregister_code(KC_MS_D);
unregister_code(KC_MS_R);
}
break;
case NXTAPP:
if (record->event.pressed){
SEND_STRING(SS_LGUI("\t"));
}
return false;
break;
}
return true;
}
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM aks_mls_logo[] = {
// 'mls_logo_layers_totop', 128x24px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x18,
0x08, 0xc4, 0xc4, 0x84, 0x02, 0x02, 0x02, 0x83, 0xc1, 0x01, 0x01, 0xc1, 0xc1, 0x01, 0x01, 0x01,
0x01, 0x01, 0x03, 0x82, 0xc2, 0x42, 0x44, 0x44, 0x84, 0x08, 0x18, 0x10, 0x20, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x40, 0x80, 0x80,
0x00, 0x3f, 0x01, 0x03, 0x07, 0x02, 0x01, 0x3f, 0x3f, 0x00, 0x00, 0x3f, 0x3f, 0x20, 0x20, 0x20,
0x20, 0x00, 0x00, 0x13, 0x27, 0x26, 0x26, 0x3e, 0x1c, 0x00, 0x80, 0x80, 0x40, 0x30, 0x0f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x03, 0x07, 0x02, 0x01, 0x3f, 0x3f, 0x00, 0x00,
0x18, 0x3d, 0x25, 0x25, 0x3f, 0x3e, 0x00, 0x00, 0x1e, 0x3f, 0x21, 0x21, 0x21, 0x00, 0x3f, 0x3f,
0x02, 0x03, 0x03, 0x00, 0x1e, 0x3f, 0x21, 0x21, 0x3f, 0x1e, 0x00, 0xff, 0xff, 0x21, 0x21, 0x3f,
0x1e, 0x00, 0x00, 0x18, 0x3d, 0x25, 0x25, 0x3f, 0x3e, 0x00, 0x1e, 0x3f, 0x21, 0x21, 0x3f, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x02, 0x02, 0x06, 0x04, 0x04, 0x04, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x0c, 0x04, 0x04, 0x04, 0x06, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
oled_write_raw_P(aks_mls_logo, sizeof(aks_mls_logo));
}
bool oled_init(oled_rotation_t(OLED_ROTATION_0));
bool oled_task_user(void) {
render_logo();
oled_set_cursor(0, 3);
// oled_write(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _BASE:
// oled_write_ln(PSTR("Base"), false);
oled_write_ln(PSTR("_Base Layer"), false);
oled_advance_page(true);
oled_advance_page(true);
break;
case _SPECIAL1:
// oled_write_ln(PSTR("Special1"), false);
oled_write_ln(PSTR("_Special1 Layer"), false);
oled_advance_page(true);
break;
case _SPECIAL2:
// oled_write_ln(PSTR("Special2"), false);
oled_write_ln(PSTR("_Special2 Layer"), false);
oled_advance_page(true);
oled_advance_page(true);
break;
case _STANDBY:
oled_write_ln(PSTR("_Standby Layer"), false);
oled_write_ln(PSTR("Keys do nothing"), false);
oled_write_ln(PSTR("Layer key re-engages"), false);
break;
default:
oled_write_ln_P(PSTR("Undefined"), false);
oled_advance_page(true);
oled_advance_page(true);
}
return false;
}
// bool oled_task_kb(void) {
// oled_set_cursor(0,8);
// oled_write_ln(PSTR("Key Pressed"), false);
// return false;
// }
#endif