mirror of
https://github.com/qmk/qmk_userspace.git
synced 2025-06-24 14:12:43 -04:00
240 lines
9.9 KiB
C
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
|