1
0
Fork 0
forked from forks/qmk_firmware

Remove obvious user keymaps, keyboards/a* edition. (#22692)

This commit is contained in:
Nick Brassel 2023-12-18 14:06:47 +11:00 committed by GitHub
parent 9539f135d8
commit f25226453f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
189 changed files with 0 additions and 11259 deletions

View file

@ -1,35 +0,0 @@
/*
Copyright 2021 Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
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/>.
*/
#pragma once
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
#define MOUSEKEY_INTERVAL 12
#define MOUSEKEY_MAX_SPEED 6
#define MOUSEKEY_TIME_TO_MAX 50
#define MOUSEKEY_DELAY 20
// It makes sense to use the same delay for the mouseweel
#define MOUSEKEY_WHEEL_DELAY 100
// The default is 100
#define MOUSEKEY_WHEEL_INTERVAL 50
// The default is 40
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
#define FLOW_COUNT 6
#define FLOW_LAYERS_COUNT 5

View file

@ -1,336 +0,0 @@
/* Copyright 2022 @daliusd
*
* 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 "flow.h"
extern const uint16_t flow_config[FLOW_COUNT][2];
extern const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2];
// Represents the states a flow key can be in
typedef enum {
flow_up_unqueued,
flow_up_queued,
flow_up_queued_used,
flow_down_unused,
flow_down_used,
} flow_state_t;
#ifdef FLOW_ONESHOT_TERM
const int g_flow_oneshot_term = FLOW_ONESHOT_TERM;
#else
const int g_flow_oneshot_term = 500;
#endif
#ifdef FLOW_ONESHOT_WAIT_TERM
const int g_flow_oneshot_wait_term = FLOW_ONESHOT_WAIT_TERM;
#else
const int g_flow_oneshot_wait_term = 500;
#endif
flow_state_t flow_state[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = flow_up_unqueued };
bool flow_pressed[FLOW_COUNT][2] = { [0 ... FLOW_COUNT - 1] = {false, false} };
uint16_t flow_timers[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
bool flow_timeout_timers_active[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
uint16_t flow_timeout_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
uint16_t flow_timeout_wait_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
flow_state_t flow_layers_state[FLOW_LAYERS_COUNT] = {
[0 ... FLOW_LAYERS_COUNT - 1] = flow_up_unqueued
};
bool flow_layer_timeout_timers_active[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = false };
uint16_t flow_layer_timeout_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
uint16_t flow_layer_timeout_wait_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
bool is_flow_ignored_key(uint16_t keycode) {
for (int i = 0; i < FLOW_COUNT; i++) {
if (flow_config[i][0] == keycode) {
return true;
}
}
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
if (flow_layers_config[i][0] == keycode) {
return true;
}
}
if (keycode == KC_LSFT || keycode == KC_RSFT
|| keycode == KC_LCTL || keycode == KC_RCTL
|| keycode == KC_LALT || keycode == KC_RALT
|| keycode == KC_LGUI || keycode == KC_RGUI) {
return true;
}
return false;
}
bool update_flow_mods(
uint16_t keycode,
bool pressed
) {
bool pass = true;
bool flow_key_list_triggered[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
bool flow_key_list_pressed[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
bool flow_triggered = false;
for (uint8_t i = 0; i < FLOW_COUNT; i++) {
// Layer key
if (keycode == flow_config[i][0]) {
if (pressed) {
flow_pressed[i][0] = true;
} else {
flow_pressed[i][0] = false;
}
// KC mod key
} else if (keycode == flow_config[i][1]) {
if (pressed) {
if (flow_pressed[i][0]) {
flow_pressed[i][1] = true;
flow_key_list_triggered[i] = true;
flow_triggered = true;
flow_key_list_pressed[i] = true;
pass = false;
}
} else if (flow_pressed[i][1]) {
flow_pressed[i][1] = false;
if (flow_pressed[i][0]) {
flow_key_list_triggered[i] = true;
flow_triggered = true;
pass = false;
} else if ((flow_state[i] == flow_down_unused)
|| (flow_state[i] == flow_down_used)) {
flow_key_list_triggered[i] = true;
flow_triggered = true;
pass = false;
}
}
}
}
for (uint8_t i = 0; i < FLOW_COUNT; i++) {
if (flow_key_list_triggered[i]) {
if (flow_key_list_pressed[i]) {
if (flow_state[i] == flow_up_unqueued) {
register_code(flow_config[i][1]);
}
flow_timeout_wait_timers_value[i] = timer_read();
flow_state[i] = flow_down_unused;
} else {
// Trigger keyup
switch (flow_state[i]) {
case flow_down_unused:
if (!flow_pressed[i][1]) {
if (timer_elapsed(flow_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
} else {
// If we didn't use the mod while trigger was held, queue it.
flow_state[i] = flow_up_queued;
flow_timeout_timers_active[i] = true;
flow_timeout_timers_value[i] = timer_read();
}
}
break;
case flow_down_used:
// If we did use the mod while trigger was held, unregister it.
if (!flow_pressed[i][1]) {
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
}
break;
default:
break;
}
}
} else if (!flow_triggered) {
if (pressed) {
if (!is_flow_ignored_key(keycode)) {
switch (flow_state[i]) {
case flow_up_queued:
flow_state[i] = flow_up_queued_used;
flow_timeout_timers_active[i] = false;
break;
case flow_up_queued_used:
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
break;
default:
break;
}
}
} else {
if (!is_flow_ignored_key(keycode)) {
// On non-ignored keyup, consider the oneshot used.
switch (flow_state[i]) {
case flow_down_unused:
flow_state[i] = flow_down_used;
break;
case flow_up_queued:
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
break;
case flow_up_queued_used:
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
break;
default:
break;
}
}
}
}
}
return pass;
}
void change_pressed_status(uint16_t keycode, bool pressed) {
for (int i = 0; i < FLOW_COUNT; i++) {
if (flow_config[i][0] == keycode) {
flow_pressed[i][0] = pressed;
}
}
}
bool update_flow_layers(
uint16_t keycode,
bool pressed,
keypos_t key_position
) {
uint8_t key_layer = read_source_layers_cache(key_position);
bool pass = true;
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
uint16_t trigger = flow_layers_config[i][0];
uint16_t layer = flow_layers_config[i][1];
if (keycode == trigger) {
if (pressed) {
// Trigger keydown
if (flow_layers_state[i] == flow_up_unqueued) {
layer_on(layer);
change_pressed_status(trigger, true);
}
flow_layer_timeout_wait_timers_value[i] = timer_read();
flow_layers_state[i] = flow_down_unused;
pass = false;
} else {
// Trigger keyup
switch (flow_layers_state[i]) {
case flow_down_unused:
if (timer_elapsed(flow_layer_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
flow_layers_state[i] = flow_up_unqueued;
layer_off(layer);
change_pressed_status(trigger, false);
pass = false;
} else {
// If we didn't use the layer while trigger was held, queue it.
flow_layers_state[i] = flow_up_queued;
flow_layer_timeout_timers_active[i] = true;
flow_layer_timeout_timers_value[i] = timer_read();
pass = false;
change_pressed_status(trigger, true);
}
break;
case flow_down_used:
// If we did use the layer while trigger was held, turn off it.
flow_layers_state[i] = flow_up_unqueued;
layer_off(layer);
change_pressed_status(trigger, false);
pass = false;
break;
default:
break;
}
}
} else {
if (pressed) {
if (key_layer == layer) {
// On non-ignored keyup, consider the oneshot used.
switch (flow_layers_state[i]) {
case flow_down_unused:
flow_layers_state[i] = flow_down_used;
break;
case flow_up_queued:
flow_layers_state[i] = flow_up_queued_used;
flow_layer_timeout_timers_active[i] = false;
break;
case flow_up_queued_used:
flow_layers_state[i] = flow_up_unqueued;
layer_off(layer);
change_pressed_status(trigger, false);
pass = false;
break;
default:
break;
}
}
} else {
// Ignore key ups from other layers
if (key_layer == layer) {
// On non-ignored keyup, consider the oneshot used.
switch (flow_layers_state[i]) {
case flow_up_queued:
flow_layers_state[i] = flow_up_unqueued;
layer_off(layer);
change_pressed_status(trigger, false);
break;
case flow_up_queued_used:
flow_layers_state[i] = flow_up_unqueued;
layer_off(layer);
change_pressed_status(trigger, false);
break;
default:
break;
}
}
}
}
}
return pass;
}
bool update_flow(
uint16_t keycode,
bool pressed,
keypos_t key_position
) {
bool pass = update_flow_mods(keycode, pressed);
pass = update_flow_layers(keycode, pressed, key_position) & pass;
return pass;
}
void flow_matrix_scan(void) {
for (int i = 0; i < FLOW_COUNT; i++) {
if (flow_timeout_timers_active[i]
&& timer_elapsed(flow_timeout_timers_value[i]) > g_flow_oneshot_term) {
flow_timeout_timers_active[i] = false;
flow_state[i] = flow_up_unqueued;
unregister_code(flow_config[i][1]);
}
}
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
if (flow_layer_timeout_timers_active[i]
&& timer_elapsed(flow_layer_timeout_timers_value[i]) > g_flow_oneshot_term) {
flow_layer_timeout_timers_active[i] = false;
flow_layers_state[i] = flow_up_unqueued;
layer_off(flow_layers_config[i][1]);
change_pressed_status(flow_layers_config[i][0], false);
}
}
}

View file

@ -1,27 +0,0 @@
/*
Copyright 2022 Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
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/>.
*/
#pragma once
#include QMK_KEYBOARD_H
bool update_flow(
uint16_t keycode,
bool pressed,
keypos_t key_position
);
void flow_matrix_scan(void);

View file

@ -1,334 +0,0 @@
/* Copyright 2021 @daliusd
*
* 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
#include "flow.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layers {
_QWERTY,
_SYM,
_NAV,
_MISC,
_TMUX,
_MOUSE,
_FUNC,
_LT_MAC,
_LT_LINUX,
};
enum custom_keycodes {
TM_NEXT = SAFE_RANGE,
TM_PREV,
TM_LEFT,
TM_RIGHT,
TM_NEW,
TM_SLCT,
TM_SRCH,
TM_URL,
OS_MISC,
OS_TMUX,
OS_FUNC,
LT_OSLNX,
};
// Shortcut to make keymap more readable
#define L_NAV MO(_NAV)
#define L_SYM MO(_SYM)
#define L_MOUSE MO(_MOUSE)
#define K_PRINT (QK_LCTL | QK_LSFT | QK_LGUI | KC_4)
#define K_VIDEO (QK_LSFT | QK_LGUI | KC_5)
// flow_config should correspond to following format:
// * layer keycode
// * modifier keycode
const uint16_t flow_config[FLOW_COUNT][2] = {
{L_NAV, KC_LALT},
{L_NAV, KC_LGUI},
{L_NAV, KC_LCTL},
{L_SYM, KC_RCTL},
{L_SYM, KC_RGUI},
{L_SYM, KC_RALT},
};
const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
{OS_MISC, _MISC},
{OS_TMUX, _TMUX},
{OS_FUNC, _FUNC},
};
// Unicode characters
enum unicode_names {
SNEK,
EURO,
LT_S_A,
LT_L_A,
LT_S_C,
LT_L_C,
LT_S_E1,
LT_L_E1,
LT_S_E2,
LT_L_E2,
LT_S_I,
LT_L_I,
LT_S_S,
LT_L_S,
LT_S_U1,
LT_L_U1,
LT_S_U2,
LT_L_U2,
LT_S_Z,
LT_L_Z,
LT_OB,
LT_CB,
};
const uint32_t unicode_map[] PROGMEM = {
[SNEK] = 0x1F40D, // 🐍
[EURO] = 0x20ac, // €
[LT_S_A] = 0x105, // ą
[LT_L_A] = 0x104, // Ą
[LT_S_C] = 0x10d, // č
[LT_L_C] = 0x10c, // Č
[LT_S_E1] = 0x119, // ę
[LT_L_E1] = 0x118, // Ę
[LT_S_E2] = 0x117, // ė
[LT_L_E2] = 0x116, // Ė
[LT_S_I] = 0x12f, // į
[LT_L_I] = 0x12e, // Į
[LT_S_S] = 0x161, // š
[LT_L_S] = 0x160, // Š
[LT_S_U1] = 0x173, // ų
[LT_L_U1] = 0x172, // Ų
[LT_S_U2] = 0x16b, // ū
[LT_L_U2] = 0x16a, // Ū
[LT_S_Z] = 0x17e, // ž
[LT_L_Z] = 0x17d, // Ž
[LT_OB] = 0x201e, // „
[LT_CB] = 0x201c, // “
};
#define K_SNEK UM(SNEK)
#define K_EURO UM(EURO)
#define K_LT_A UP(LT_S_A, LT_L_A)
#define K_LT_AU UM(LT_L_A)
#define K_LT_C UP(LT_S_C, LT_L_C)
#define K_LT_CU UM(LT_L_C)
#define K_LT_E1 UP(LT_S_E1, LT_L_E1)
#define K_LT_E1U UM(LT_L_E1)
#define K_LT_E2 UP(LT_S_E2, LT_L_E2)
#define K_LT_E2U UM(LT_L_E2)
#define K_LT_I UP(LT_S_I, LT_L_I)
#define K_LT_IU UM(LT_L_I)
#define K_LT_S UP(LT_S_S, LT_L_S)
#define K_LT_SU UM(LT_L_S)
#define K_LT_U1 UP(LT_S_U1, LT_L_U1)
#define K_LT_U1U UM(LT_L_U1)
#define K_LT_U2 UP(LT_S_U2, LT_L_U2)
#define K_LT_U2U UM(LT_L_U2)
#define K_LT_Z UP(LT_S_Z, LT_L_Z)
#define K_LT_ZU UM(LT_L_Z)
#define K_LT_OB UM(LT_OB)
#define K_LT_CB UM(LT_CB)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
KC_Q ,KC_W ,KC_E ,KC_R ,KC_T, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
L_NAV , KC_SPC , KC_LSFT , L_SYM
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_SYM] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_LPRN ,KC_RPRN ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,KC_GRV ,KC_LBRC ,KC_RBRC ,KC_PLUS , KC_MINS ,KC_PIPE ,KC_RCTL ,KC_RGUI ,KC_RALT ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_DEL ,KC_BSPC ,KC_LCBR ,KC_RCBR ,KC_EQL , KC_UNDS ,KC_QUOT ,KC_DQT ,OS_MISC ,KC_BSLS ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
_______ , _______ , _______ , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_NAV] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_LALT ,KC_LGUI ,KC_LCTL ,KC_TAB ,KC_ENT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,KC_PGUP ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_LSFT ,KC_BSPC ,KC_ESC ,KC_TILDE,OS_TMUX , OS_FUNC ,L_MOUSE ,KC_COMM ,KC_DOT ,KC_PGDN ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , _______ , _______ , _______
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_MISC] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
QK_BOOT ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BRID ,KC_BRIU ,KC_PSCR ,XXXXXXX ,K_PRINT ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,DB_TOGG ,LT_OSLNX,XXXXXXX , KC_MPRV ,KC_MPLY ,KC_MNXT ,XXXXXXX ,K_VIDEO ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_VOLD ,KC_VOLU ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_TMUX] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,TM_URL ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , TM_LEFT ,TM_NEXT ,TM_PREV ,TM_RIGHT,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , TM_NEW ,TM_SLCT ,XXXXXXX ,XXXXXXX ,TM_SRCH ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_MOUSE] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
XXXXXXX ,XXXXXXX ,KC_MS_U ,KC_BTN3 ,KC_WH_U , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
KC_BTN1 , KC_BTN2 , _______ , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_FUNC] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_F11 ,KC_F12 ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_LT_MAC] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_PLUS ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_EQL ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,KC_BSPC ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , XXXXXXX , _______ , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
[_LT_LINUX] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
K_LT_AU ,K_LT_CU ,K_LT_E1U,K_LT_E2U,K_LT_IU , K_LT_SU ,K_LT_U1U,K_LT_U2U,K_LT_ZU ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
K_LT_A ,K_LT_C ,K_LT_E1 ,K_LT_E2 ,K_LT_I , K_LT_S ,K_LT_U1 ,K_LT_U2 ,K_LT_Z ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,KC_BSPC ,XXXXXXX ,K_SNEK ,K_LT_OB , K_LT_CB ,K_EURO ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX , XXXXXXX , _______ , XXXXXXX
// └────────┘ └────────┘ └────────┘ └────────┘
),
};
#define TMUX_PREFIX SS_DOWN(X_LCTL) "b" SS_UP(X_LCTL)
bool lt_os_is_linux = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
switch (keycode) {
case TM_LEFT:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "<");
return false;
case TM_RIGHT:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX ">");
return false;
case TM_NEXT:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "n");
return false;
case TM_PREV:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "p");
return false;
case TM_NEW:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "c");
return false;
case TM_SLCT:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "[");
return false;
case TM_SRCH:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX "\t");
return false;
case TM_URL:
if (!record->event.pressed) return true;
SEND_STRING(TMUX_PREFIX SS_LCTL("u"));
return false;
case LT_OSLNX:
if (!record->event.pressed) return true;
lt_os_is_linux = !lt_os_is_linux;
return false;
}
return true;
}
void matrix_scan_user(void) {
flow_matrix_scan();
}
bool lang_layer_on = false;
layer_state_t layer_state_set_user(layer_state_t state) {
state = update_tri_layer_state(state, _SYM, _NAV, lt_os_is_linux ? _LT_LINUX : _LT_MAC);
uint8_t hl = get_highest_layer(state);
if (hl == _LT_MAC) {
if (!lang_layer_on) {
tap_code16(LCTL(KC_SPC));
lang_layer_on = true;
}
} else {
if (lang_layer_on) {
tap_code16(LCTL(KC_SPC));
lang_layer_on = false;
}
}
return state;
}

View file

@ -1,306 +0,0 @@
# My 34 keys layout
This is my principles for layout:
* I am using Callum style layout. Here you can read explanation by
Callum himself and his reasoning for not using mod-tap:
[here](../../../../users/callum/readme.md)
* There should be only one way to type key. Key can be on
different layer but it must maintain its physical location. I
broke this rule for Shift key only.
* The less features are used the better.
* There is simple TMUX layer.
* Common keys must be accessible using two keys if possible.
* It should be possible to work with left keyboard side and mouse
in right hand without lifting hands for some scenarios (that's
why I had to duplicate Shift key).
## Improvements over Callum
* I have added one shot layers compatible with Callum's one shot
keys.
* There is one issue with accidental uppercase characters fixed
that exists in original Callum layout's implementation.
* Another annoying feature of Callum layer is one shot keys are
frozen until you cancel them. This is problem when you use one
hand for keyboard and another for mouse. E.g. you click Ctrl and
mouse to get some menu (on Mac OS X), and then you want to click
some item in that menu. You have to remember to cancel one shot in such
situation. I have added two settings two handle situations like
this:
* `FLOW_ONESHOT_WAIT_TERM` - if hold one shot key longer than
`FLOW_ONESHOT_WAIT_TERM` ms then mod key / layer key is not
treated as one shot key (defaults to 500ms).
* `FLOW_ONESHOT_TERM` - if you do not click another key in
`FLOW_ONESHOT_TERM` ms then one shot key / layer key is treated
as normal key. Therefore if you lift it after `FLOW_ONESHOT_TERM`
it will not be treated as one shot (defaults to 500ms).
After adding those two settings I have found out that I don't
need one shot cancel key anymore so I have removed it.
Since differences are significant I named this layout `flow`.
## Using flow with your keyboard
Copy `flow.c` and `flow.h` to keyboard folder.
Add following line to `rules.mk`:
```make
SRC += flow.c
```
Define following in `config.h` for modifiers and layers:
```c
#define FLOW_COUNT 7
#define FLOW_LAYERS_COUNT 3
```
In your `keymap.c` add and configure like this:
```c
#include "flow.h"
...
// flow_config should correspond to following format:
// * layer keycode
// * modifier keycode
const uint16_t flow_config[FLOW_COUNT][2] = {
{L_NAV, KC_LALT},
{L_NAV, KC_LGUI},
{L_NAV, KC_LCTL},
{L_NAV, KC_LSFT},
{L_SYM, KC_LCTL},
{L_SYM, KC_LGUI},
{L_SYM, KC_LALT},
};
// for layers configuration follow this format:
// * custom layer key
// * layer name
const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
{OS_TMUX, _TMUX},
{OS_MISC, _MISC},
{OS_FUNC, _FUNC},
};
...
// Add following to handle flow
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
return true;
}
void matrix_scan_user(void) {
flow_matrix_scan();
}
```
## Lithuanian letters
There are at least two ways how to enter Lithuanian letters: to
use Unicode support from QMK or to switch OS language when
necessary. Unicode support has some problems:
* it is OS specific (you need to change Unicode input mode based
on your OS and I sometimes switch between Mac OS X and Ubuntu).
This is minor issue but it is still issue.
* There is bug in Mac OS X and I can't enter `Š` using unicode
input method.
* Unicode Hex Input in Mac OS X is not perfect and there are some
minor issue while using it.
On Linux Unicode support meanwhile works perfectly.
This leaves us with other option to use OS language switching as
you most probably have done before. Still there is space for
improvement. E.g. I have added Lithuanian letters to trilayer and
trilayer activation toggles OS language (this works because I use
only two languages). Check `layer_state_set_user` implementation
for details.
# Rejected ideas
## Mods as combos
Sometimes when I press `NAV (layer key) + S + Tab` to get `Command
+ Tab` I ended up with `S + Nav + Tab`. This happened because I
did that really fast and sometimes clicked S slightly earlier than
NAV layer key. Initially I have solved this problem using Combo
keys, but that's additional dependency and combo keys are not
ideal for Callum layer. You need to release both keys to trigger
Combo key release. Therefore I have written custom code that
allows pressing S some milliseconds earlier. This is controlled by
FLOW_TERM and defaults to 10. I do not recommend setting this to
higher than 30.
This idea was rejected because it looks like 10ms did not made
that big difference.
## Swapper
Idea of swapper is to have key that registers Mode key (e.g.
Command while layer and some key is pressed) to simulate two key
combo, e.g. Command + Tab. Overall I found that 3 keys combo that
I have currently for swapping windows is equally good as 2 keys
swapper. Another problem with swapper is that it is OS specific.
Still if you want here is swapper implementation I have used:
```c
bool active;
void update_swapper(
uint16_t trigger,
uint16_t keycode,
bool pressed
) {
if (keycode == trigger) {
if (pressed) {
if (!active) {
active = true;
register_code(KC_LGUI);
}
register_code(KC_TAB);
} else {
unregister_code(KC_TAB);
}
} else if (active && keycode != KC_LSFT && keycode != KC_LEFT && keycode != KC_RIGHT) {
unregister_code(KC_LGUI);
active = false;
}
}
```
## Combos
I have seen that some people use two letter horizontal combos for
some actions, e.g. XC for Command+C, CV for Command+V, JK for ESC
and etc. I found that this kind of kicks me out of the flow when
working as it requires different kind of action and I need to
pause to make that action.
## Comma-space
I have noticed that I put space after comma `,` usually. That
means I can use comma + letter for something else with backspace,
e.g. for Lithuanian letters. Performance wise that works OK, but
practically that does not feel really good. Trilayer with language
layer switch works better.
Still if you are interested here is comma-space implementation:
```c
void swap_layout(void) {
uint8_t saved_mods = get_mods();
clear_mods();
tap_code16(LCTL(KC_SPC));
set_mods(saved_mods);
}
void press_with_layout_swap(uint16_t keycode) {
tap_code16(KC_BSPC);
swap_layout();
tap_code16(keycode);
swap_layout();
}
bool comma_pressed = false;
bool update_commaspace(
uint16_t keycode,
bool pressed
) {
if (keycode == KC_COMM) {
if (!(get_mods() & MOD_MASK_SHIFT)) {
comma_pressed = true;
}
} else if (comma_pressed) {
if (keycode != KC_LSFT) {
comma_pressed = false;
}
switch(keycode) {
case KC_Q:
if (pressed) {
press_with_layout_swap(KC_1);
return false;
}
break;
case KC_W:
if (pressed) {
press_with_layout_swap(KC_2);
return false;
}
break;
case KC_E:
if (pressed) {
press_with_layout_swap(KC_3);
return false;
}
break;
case KC_R:
if (pressed) {
press_with_layout_swap(KC_4);
return false;
}
break;
case KC_T:
if (pressed) {
press_with_layout_swap(KC_5);
return false;
}
break;
case KC_Y:
if (pressed) {
press_with_layout_swap(KC_6);
return false;
}
break;
case KC_U:
if (pressed) {
press_with_layout_swap(KC_7);
return false;
}
break;
case KC_I:
if (pressed) {
press_with_layout_swap(KC_8);
return false;
}
break;
case KC_O:
if (pressed) {
press_with_layout_swap(KC_EQL);
return false;
}
break;
}
}
return true;
};
```
## Using one shot layers on top layer keys (NAV and SYM)
While this looked promising and fun it was really easy to get lost
in which layer you actually are. You can still use it as `flow`
supports this scenario, but I do not recommend it.

View file

@ -1,5 +0,0 @@
UNICODE_ENABLE = no
UNICODEMAP_ENABLE = yes
#CONSOLE_ENABLE = yes
SRC += flow.c

View file

@ -1,130 +0,0 @@
/* Copyright 2021 @jcmkk3
*
* 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
#include "oneshot.h"
#define LA_UPP OSL(UPP)
#define LA_SYM OSL(SYM)
#define LA_NAV MO(NAV)
enum layers {
DEF,
UPP,
SYM,
NAV,
NUM,
};
enum keycodes {
// Custom oneshot mod implementation with no timers.
OS_SHFT = SAFE_RANGE,
OS_CTRL,
OS_ALT,
OS_GUI,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT(
KC_Y, KC_C, KC_L, KC_M, KC_K, KC_Z, KC_F, KC_U, KC_QUOT, KC_DQUO,
KC_I, KC_S, KC_R, KC_T, KC_G, KC_P, KC_N, KC_E, KC_A, KC_O,
KC_Q, KC_V, KC_W, KC_D, KC_J, KC_B, KC_H, KC_COMM, KC_DOT, KC_X,
LA_NAV, KC_SPC, LA_UPP, LA_SYM
),
[UPP] = LAYOUT(
S(KC_Y), S(KC_C), S(KC_L), S(KC_M), S(KC_K), S(KC_Z), S(KC_F), S(KC_U), KC_EXLM, KC_QUES,
S(KC_I), S(KC_S), S(KC_R), S(KC_T), S(KC_G), S(KC_P), S(KC_N), S(KC_E), S(KC_A), S(KC_O),
S(KC_Q), S(KC_V), S(KC_W), S(KC_D), S(KC_J), S(KC_B), S(KC_H), KC_SCLN, KC_COLN, S(KC_X),
_______, _______, _______, _______
),
[SYM] = LAYOUT(
KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_CIRC, KC_DLR, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK,
KC_HASH, KC_UNDS, KC_EQL, KC_MINS, KC_PLUS, KC_AMPR, OS_CTRL, OS_SHFT, OS_ALT, OS_GUI,
KC_PERC, KC_GRV, KC_TILD, KC_SLSH, KC_ASTR, KC_PIPE, KC_BSLS, KC_SCLN, KC_COLN, KC_AT,
_______, _______, _______, _______
),
[NAV] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TAB, KC_UP, KC_ENT, KC_DEL,
OS_GUI, OS_ALT, OS_SHFT, OS_CTRL, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, _______, KC_BSPC, _______
),
[NUM] = LAYOUT(
KC_7, KC_5, KC_3, KC_1, KC_9, KC_8, KC_0, KC_2, KC_4, KC_6,
OS_GUI, OS_ALT, OS_SHFT, OS_CTRL, XXXXXXX, XXXXXXX, OS_CTRL, OS_SHFT, OS_ALT, OS_GUI,
XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH,
_______, _______, KC_BSPC, _______
),
};
bool is_oneshot_cancel_key(uint16_t keycode) {
switch (keycode) {
case LA_SYM:
case LA_NAV:
return true;
default:
return false;
}
}
bool is_oneshot_ignored_key(uint16_t keycode) {
switch (keycode) {
case LA_SYM:
case LA_NAV:
case KC_LSFT:
case OS_SHFT:
case OS_CTRL:
case OS_ALT:
case OS_GUI:
return true;
default:
return false;
}
}
oneshot_state os_shft_state = os_up_unqueued;
oneshot_state os_ctrl_state = os_up_unqueued;
oneshot_state os_alt_state = os_up_unqueued;
oneshot_state os_gui_state = os_up_unqueued;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
update_oneshot(
&os_shft_state, KC_LSFT, OS_SHFT,
keycode, record
);
update_oneshot(
&os_ctrl_state, KC_LCTL, OS_CTRL,
keycode, record
);
update_oneshot(
&os_alt_state, KC_LALT, OS_ALT,
keycode, record
);
update_oneshot(
&os_gui_state, KC_LGUI, OS_GUI,
keycode, record
);
return true;
}
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, SYM, NAV, NUM);
}

View file

@ -1,72 +0,0 @@
/* Copyright 2021 @jcmkk3
*
* 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 "oneshot.h"
void update_oneshot(
oneshot_state *state,
uint16_t mod,
uint16_t trigger,
uint16_t keycode,
keyrecord_t *record
) {
if (keycode == trigger) {
if (record->event.pressed) {
// Trigger keydown
if (*state == os_up_unqueued) {
register_code(mod);
}
*state = os_down_unused;
} else {
// Trigger keyup
switch (*state) {
case os_down_unused:
// If we didn't use the mod while trigger was held, queue it.
*state = os_up_queued;
break;
case os_down_used:
// If we did use the mod while trigger was held, unregister it.
*state = os_up_unqueued;
unregister_code(mod);
break;
default:
break;
}
}
} else {
if (record->event.pressed) {
if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) {
// Cancel oneshot on designated cancel keydown.
*state = os_up_unqueued;
unregister_code(mod);
}
} else {
if (!is_oneshot_ignored_key(keycode)) {
// On non-ignored keyup, consider the oneshot used.
switch (*state) {
case os_down_unused:
*state = os_down_used;
break;
case os_up_queued:
*state = os_up_unqueued;
unregister_code(mod);
break;
default:
break;
}
}
}
}
}

View file

@ -1,46 +0,0 @@
/* Copyright 2021 @jcmkk3
*
* 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/>.
*/
#pragma once
#include QMK_KEYBOARD_H
// Represents the four states a oneshot key can be in
typedef enum {
os_up_unqueued,
os_up_queued,
os_down_unused,
os_down_used,
} oneshot_state;
// Custom oneshot mod implementation that doesn't rely on timers. If a mod is
// used while it is held it will be unregistered on keyup as normal, otherwise
// it will be queued and only released after the next non-mod keyup.
void update_oneshot(
oneshot_state *state,
uint16_t mod,
uint16_t trigger,
uint16_t keycode,
keyrecord_t *record
);
// To be implemented by the consumer. Defines keys to cancel oneshot mods.
bool is_oneshot_cancel_key(uint16_t keycode);
// To be implemented by the consumer. Defines keys to ignore when determining
// whether a oneshot mod has been used. Setting this to modifiers and layer
// change keys allows stacking multiple oneshot modifiers, and carrying them
// between layers.
bool is_oneshot_ignored_key(uint16_t keycode);

View file

@ -1 +0,0 @@
SRC += oneshot.c

View file

@ -1,150 +0,0 @@
/* Copyright 2020 nickolaij
*
* 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
// wait DELAY ms before unregistering media keys
#define MEDIA_KEY_DELAY 10
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
_UPPER,
_LOWER
};
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
NICKURL = SAFE_RANGE,
ALTTAB
};
enum unicode_names {
LOVEEYES,
THINK,
UPSIDEDOWN,
NOMOUTH,
PARTY,
HEART,
EGGPLANT,
PEACH,
EMOJI100,
EMOJIB
};
const uint32_t unicode_map[] PROGMEM = {
[LOVEEYES] = 0x1f60d,
[THINK] = 0x1f914,
[UPSIDEDOWN] = 0x1f643,
[NOMOUTH] = 0x1f636,
[PARTY] = 0x1f973,
[HEART] = 0x1f495,
[EMOJI100] = 0x1f4af,
[PEACH] = 0x1f351,
[EGGPLANT] = 0x1f346,
[EMOJIB] = 0x1f171
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_BASE] = LAYOUT(
KC_ESCAPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSLS,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_DELETE,
KC_LCTL, KC_LGUI, MO(_UPPER), KC_SPACE, KC_ENTER, MO(_LOWER), KC_LEFT, KC_DOWN, KC_RIGHT
),
[_UPPER] = LAYOUT(
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
ALTTAB, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_QUOTE, KC_SLASH,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MINUS, KC_EQUAL, _______, _______,
KC_LALT, _______, _______, _______, _______, _______, KC_HOME, _______, KC_END
),
[_LOWER] = LAYOUT(
NICKURL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, KC_F11, KC_F12, RGB_MODE_PLAIN, RGB_MODE_BREATHE, RGB_MODE_RAINBOW, RGB_MODE_SWIRL, RGB_MODE_SNAKE, RGB_MODE_KNIGHT, RGB_MODE_GRADIENT, XXXXXXX, RGB_TOG,
_______, UM(LOVEEYES), UM(THINK), UM(UPSIDEDOWN), UM(NOMOUTH), UM(PARTY), UM(PEACH), UM(HEART), UM(EGGPLANT), UM(EMOJI100), UM(EMOJIB), RGB_HUI,
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case NICKURL:
if (record->event.pressed) {
SEND_STRING("https://www.github.com/nickolaij");
} else {
tap_code(KC_ENTER);
}
return true;
break;
case ALTTAB:
if (record->event.pressed) {
tap_code16(A(KC_TAB));
}
return true;
break;
default:
return true;
}
}
bool dip_switch_update_user(uint8_t index, bool active) {
switch (index) {
case 0:
if(active) {
switch(get_highest_layer(layer_state)) {
case _BASE:
tap_code16(LCTL(KC_F));
break;
case _UPPER:
tap_code(KC_MUTE);
break;
case _LOWER:
tap_code(KC_MEDIA_PLAY_PAUSE);
break;
}
}
}
return true;
}
void matrix_init_user(void) {
set_unicode_input_mode(UNICODE_MODE_WINCOMPOSE);
}
bool encoder_update_user(uint8_t index, bool clockwise) {
switch(get_highest_layer(layer_state)) {
case _BASE:
clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
break;
case _UPPER:
clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
break;
case _LOWER:
clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
break;
}
return true;
}

View file

@ -1,4 +0,0 @@
# The default keymap for Abacus
This is made based on my first few days of playing with it and honing in on what feels right.
I've repurposed the DIP switch function for the encoder switches and added some functionality for multiple layers also effecting the encoders output.

View file

@ -1 +0,0 @@
UNICODEMAP_ENABLE = yes

View file

@ -1,32 +0,0 @@
/* Copyright 2019 AbstractKB
*
* 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/>.
*/
#pragma once
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 2
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
// place overrides here

View file

@ -1,51 +0,0 @@
/* Copyright 2019 AbstractKB
*
* 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 {
MYKEY = SAFE_RANGE
};*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_MUTE, RGB_TOG, BL_TOGG,
RGB_M_SW, RGB_M_P, BL_BRTG
)
};
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
rgblight_increase_hue_noeeprom();
} else {
rgblight_decrease_hue_noeeprom();
}
} else if (index == 2) { /* Third encoder */
if (clockwise) {
backlight_increase();
} else {
backlight_decrease();
}
}
return true;
}

View file

@ -1,3 +0,0 @@
# My keymap
This was used for testing lights but will become my personal keymap

View file

@ -1 +0,0 @@
BACKLIGHT_ENABLE = yes

View file

@ -1,35 +0,0 @@
/*
Copyright 2021 keebnewb
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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_utilitarian(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_60_utilitarian(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
RGB_TOG, RGB_RMOD,KC_UP, RGB_MOD, RGB_M_R, RGB_M_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, BS_SWAP,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
BL_TOGG, BL_DOWN, BL_UP, KC_CALC, KC_MPLY, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View file

@ -1,35 +0,0 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift(
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_DEL,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_TILD,
KC_LCTL, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, MO(1) , KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, KC_UP , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -1,264 +0,0 @@
/*
Copyright 2020 Álvaro "Gondolindrim" Volpato <alvaro.volpato@usp.br>
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
#define MEDIA_KEY_DELAY 10
#define ALT_TAB_DELAY 1000
// Persistent encoder modes: the current encoder mode is written into EEPROM memory, and retrieved at the keyboard initialization. This means the current encoder mode is persistent even if the keyboard is reset or turned off
#define PERSISTENT_ENCODER_MODES
#define ENCODER_MODE_CHANGE_DELAY 500
// Defining special keycodes
enum keyboard_keycodes {
ECLICK = SAFE_RANGE, // Encoder click
ALTTABF , // ALT-TAB forward
ALTTABB , // ALT-TAB backwards
ALTTABC , // For alt-tab-click
ENCMUP , // Encoder mode up
ENCMDN , // Encoder mode down
NEW_SAFE_RANGE
};
// Creates sample keyevents and keyrecords to be used in the processing of the custom keycodes. Their time should be resampled everytime they are used; their cols and rows are set to be "impossible", that is, outside the normal key matrix bounds.
const keyevent_t sample_pressed_keyevent = {
.key = (keypos_t){.row = 5, .col = 13},
.pressed = true,
.time = 0
};
keyrecord_t sample_pressed_keyrecord = {
.event = sample_pressed_keyevent
};
const keyevent_t sample_released_keyevent = {
.key = (keypos_t){.row = 5, .col = 13},
.pressed = false,
.time = 0
};
keyrecord_t sample_released_keyrecord = {
.event = sample_released_keyevent
};
// tap_process_record_user calls process_record_user with the pressed and released sample keyrecords with a delay of MEDIA_KEY_DELAY. The idea is to allow custom keycodes a simulation of a key press and release, allowing them to be treated in process_record_user. This, in turn, allows the custom keycodes to be used both in the encoder callback and the keyboard keymap.
uint16_t temp_timer = 0;
void tap_process_record_user(uint16_t keycode)
{
temp_timer = timer_read();
sample_pressed_keyrecord.event.time = timer_read();
process_record_user( keycode, &sample_pressed_keyrecord );
while (timer_elapsed(temp_timer) < MEDIA_KEY_DELAY);
sample_released_keyrecord.event.time = timer_read();
process_record_user( keycode, &sample_released_keyrecord );
}
// process_special_keycode is a function that distinguishes between the native keycodes and the ones custom-defined here. Normal keycodes are tapped, while keycodes in the SAFE_RANGE - NEW_SAFE_RANGE interval are treated with tap_process_record_user.
void process_special_keycode(uint16_t keycode) {
if (SAFE_RANGE <= keycode && keycode < NEW_SAFE_RANGE) tap_process_record_user(keycode);
else tap_code(keycode);
}
uint16_t encoder_click_delay = ENCODER_MODE_CHANGE_DELAY;
uint8_t startup_color[3] = {0xFF,0xFF,0xFF};
typedef struct _encoder_mode_t {
uint8_t indicator_color[3];
uint16_t clockwise_key[4];
uint16_t counterclockwise_key[4];
uint16_t clicked_key[4] ;
uint16_t hold_key;
} encoder_mode_t;
encoder_mode_t encoder_modes[] = {
{ .indicator_color = {0x22,0x00,0xFF} , .clockwise_key = {KC_VOLU, KC_VOLU, ENCMUP, KC_VOLU}, .counterclockwise_key = {KC_VOLD, KC_VOLD, ENCMDN, KC_VOLD}, .clicked_key = {KC_MUTE, KC_MPLY, KC_MUTE, KC_MUTE}, .hold_key = ENCMUP },
{ .indicator_color = {0x00,0x33,0xFF} , .clockwise_key = {KC_WH_D, KC_WH_D, ENCMUP, KC_WH_D}, .counterclockwise_key = {KC_WH_U, KC_WH_U, ENCMDN, KC_WH_U}, .clicked_key = {KC_BTN1, KC_BTN1, KC_BTN1, KC_BTN1}, .hold_key = ENCMUP },
{ .indicator_color = {0xFF,0x88,0x00} , .clockwise_key = {ALTTABF, ALTTABF, ENCMUP, ALTTABF}, .counterclockwise_key = {ALTTABB, ALTTABB, ENCMDN, ALTTABB}, .clicked_key = {ALTTABC, ALTTABC, ALTTABC, ALTTABC}, .hold_key = ENCMUP }
// Insert your custom encoder mode here
};
#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes)
// This counter is used to track what encoder mode is being used at a certain time
int encoder_mode_count = 0;
#ifdef PERSISTENT_ENCODER_MODES
typedef union {
uint32_t raw;
struct {
int user_encoder_mode_count;
};
} user_config_t;
user_config_t user_config;
#endif
void set_indicator_colors(uint8_t color[3]){
rgblight_setrgb(color[0], color[1], color[2]);
}
// Board init: RGB indicator is set to startup_color
void keyboard_pre_init_user(void){
set_indicator_colors(startup_color);
};
void keyboard_post_init_user(void){
#ifdef PERSISTENT_ENCODER_MODES
user_config.raw = eeconfig_read_user();
encoder_mode_count = user_config.user_encoder_mode_count ;
#else
encoder_mode_count = 0;
#endif
set_indicator_colors(encoder_modes[ encoder_mode_count ].indicator_color);
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_4x12(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, ECLICK ,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
KC_LCTL, KC_LALT, KC_LGUI, _______, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
[1] = LAYOUT_ortho_4x12(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_ortho_4x12(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_ortho_4x12(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
// ------------------------------------------------------------------------------------------------
bool is_alt_tab_active = false; // Flag to check if alt tab is active
uint32_t alt_tab_timer = 0; // Time trigger for alt tab
uint16_t mapped_code = 0;
uint32_t held_keycode_timer = 0;
int current_layer = 0 ; // Updated in layer_state_set_user each time a layer change is made
void cycle_encoder_mode(bool forward){
if (forward) encoder_mode_count++ ; // Shifts encoder mode forward
else encoder_mode_count-- ;
if (encoder_mode_count == -1) encoder_mode_count = NUM_ENCODER_MODES - 1;
// Shifts encoder mode backward
encoder_mode_count = encoder_mode_count % NUM_ENCODER_MODES ; // This makes sure encoder_mode_count keeps cycling between 0,1,...,NUM_ENCODER_MODES and doesnt eventually overflow
#ifdef PERSISTENT_ENCODER_MODES
user_config.user_encoder_mode_count = encoder_mode_count ;
eeconfig_update_user(user_config.raw);
#endif
set_indicator_colors( encoder_modes[ encoder_mode_count ].indicator_color ); // Set indicator color to the corresponding defined color
}
bool encoder_update_user(uint8_t index, bool clockwise) {
process_special_keycode(clockwise ? encoder_modes[ encoder_mode_count ].clockwise_key[ current_layer ] : encoder_modes[ encoder_mode_count ].counterclockwise_key[ current_layer ]);
return false;
}
uint32_t held_click_timer = 0;
bool is_click_held = false;
bool is_shift_held = false;
bool automatic_hold_cycle = false; // This flag registers if the encoder hold was automatically cycled
// This bool records if LALT is pressed or not. Due to the automatic disabling of the ALT-TAB of the ALTTABS custom keystroke, the automatic disabling can un-register KC_LALT even when the LALT key is phisically pressed. Hence there needs to be two bools: one that keebs track of the ALT-TAB activity and one that keeps track of LALT so that the automatic disabling will not disable LALT if it is phisically pressed.
bool is_lalt_pressed = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LSFT:
case KC_RSFT:
if (record->event.pressed) is_shift_held = true;
else is_shift_held = false;
return true;
case ECLICK:
// Checks if the encoder has been pressed; if so, sets the corresponding flag and starts the corresponding timer
if (record->event.pressed) {
is_click_held = true;
held_click_timer = timer_read32();
// Checks if the encoder has been released: samples the duration of the encoder push; if this time was less than the encoder_click_delay, processes the clicked key. If it was bigger, processes the hold key. This behavior is adjusted using the ENCODER_MODE_CHANGE_DELAY macro. There is an exception made when automatic_hold_cycle is true; this means that the encoder push has been pressed enough to trigger a hold cycle. This case is taken care of in the housekeeping routine, where the held key is triggered and the timer reset. Hence the automatic_hold_cycle needs to be checked because without this check the function will trigger the clicked key after the hold cycle has been cycled more than once.
} else {
is_click_held = false;
if (timer_elapsed32(held_click_timer) < encoder_click_delay && !automatic_hold_cycle ) process_special_keycode( encoder_modes[ encoder_mode_count ].clicked_key[ current_layer ] ) ;
automatic_hold_cycle = false;
}
return true; // Skip all further processing of this key
case KC_LALT: // If this is not defined, if the encoder is activated in the alt-tab mode while the LALT key is pressed, the menu goes away.
if (record->event.pressed) is_lalt_pressed = true;
else is_lalt_pressed = false;
return true;
case ENCMUP:
case ENCMDN:
if (record->event.pressed) cycle_encoder_mode(keycode == ENCMUP); // If keycode == ENCMUP the expression returns true and the cycle function cycles the modes forward. If not, then cycles backwards.
return false;
case ALTTABF:
case ALTTABB:
if (record->event.pressed) {
if (!is_alt_tab_active) {
is_alt_tab_active = true;
register_code(KC_LALT);
}
tap_code16(keycode == ALTTABF ? KC_TAB : S(KC_TAB)); // Due to S(KC_TAB), the 16-bit tap_code16 is needed.
alt_tab_timer = timer_read32();
}
return true;
case ALTTABC:
if (record->event.pressed) {
if (is_alt_tab_active) {
if (!is_lalt_pressed) unregister_code(KC_LALT);
is_alt_tab_active = false;
}
}
return false;
default:
return true; // Process all other keycodes normally
}
}
void housekeeping_task_user(void) {
if (is_alt_tab_active) {
if (is_lalt_pressed) alt_tab_timer = timer_read32();
else if (timer_elapsed32(alt_tab_timer) > ALT_TAB_DELAY) {
unregister_code(KC_LALT);
is_alt_tab_active = false;
}
}
/* This piece of the code checks for the encoder push timer. If the encoder push interval was less than encoder_click_delay then it is automatically processed by process_record_user by triggering the current mode's click key. However, if the encoder push is held for more time than the defined delay, then the encoder hold "cycles", that is, gets activated and the timer needs to be reset. This does three things:
- (1) Sets the automatic_hold_cycle flag which prevents process_record_user from triggering the click key when the push is released
- (2) Processes the current mode's hold key in process_record_user
- (3) Resets the click timer
*/
if (is_click_held && timer_elapsed32(held_click_timer) > encoder_click_delay ){
automatic_hold_cycle = true;
process_special_keycode( encoder_modes[ encoder_mode_count ].hold_key );
held_click_timer = timer_read32();
}
}

View file

@ -1 +0,0 @@
VIA_ENABLE = yes

View file

@ -1,76 +0,0 @@
/* Copyright 2020 floookay
*
* 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
enum adelheid_layers {
_BASE,
_SECONDARY
};
// tap dance declarations
enum {
_TD_CTGU = 0,
_TD_PGUP = 1,
_TD_PGDN = 2,
_TD_HOME = 3,
_TD_END = 4,
_TD_RSHC = 5,
_TD_PSCR = 6
};
#define MO_SEC MO(_SECONDARY)
#define TD_CTGU TD(_TD_CTGU)
#define TD_PGUP TD(_TD_PGUP)
#define TD_PGDN TD(_TD_PGDN)
#define TD_HOME TD(_TD_HOME)
#define TD_END TD(_TD_END)
#define TD_RSHC TD(_TD_RSHC)
#define TD_PSCR TD(_TD_PSCR)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, TD_PGUP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, TD_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, TD_END,
TD_CTGU, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, TD_PGDN,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, MO_SEC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
),
[_SECONDARY] = LAYOUT(
KC_SLEP, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, TD_PSCR, KC_VOLU,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS, BL_STEP,
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_DEL, KC_MUTE,
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_MPLY, KC_VOLD,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD_RSHC, KC_MPLY,
_______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MNXT
)
};
// Tap Dance Definitions
tap_dance_action_t tap_dance_actions[] = {
// Tap once for first parameter, twice for second
[_TD_CTGU] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_LGUI),
[_TD_PGUP] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, LCTL(KC_PGUP)),
[_TD_PGDN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, LCTL(KC_PGDN)),
[_TD_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, LCTL(KC_HOME)),
[_TD_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, LCTL(KC_END)),
[_TD_RSHC] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT, KC_CAPS),
[_TD_PSCR] = ACTION_TAP_DANCE_DOUBLE(KC_PSCR, LSFT(LGUI(KC_S))) // screenshot tool tap dance
};

View file

@ -1,9 +0,0 @@
# The default keymap for the Adelheid
- ANSI QWERTY
- split backspace
- ctrl on caps lock with super on tap dance
- caps lock on fn + right shift tap dance
![adelheid_layout](https://gist.githubusercontent.com/floookay/7bf6511a8d84804d32de4d7bbe3bd0fb/raw/dffd622a762463f341466ffecefad3b31ad3ee4f/layout.png)
View in [Keyboard-Layout-Editor](http://www.keyboard-layout-editor.com/#/gists/4262535adb5ac81a913edbebc4de8226).

View file

@ -1 +0,0 @@
TAP_DANCE_ENABLE = yes

View file

@ -1,392 +0,0 @@
// Copyright 2022 Arturo Avila (@ADPenrose)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#ifdef OLED_ENABLE
// Enable OLED bitmpa compression selectively.
#define USE_OLED_BITMAP_COMPRESSION
#define NUM_IDLE_FRAMES 5
#define NUM_TAP_FRAMES 2
#define NUM_OLED_BYTES 512
#ifdef USE_OLED_BITMAP_COMPRESSION
static const char PROGMEM idle_1_block_map[] = { //IDLE_1 and IDLE_2 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x1c, 0x00, 0xb8, 0x8f, 0x3f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_2_block_map[] = { //IDLE_3 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xd8, 0xe0, 0x03,
0xf0, 0x6f, 0x00, 0x3e, 0x00, 0xf8, 0xc7, 0x7f, 0x00, 0x98, 0x7f, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_3_block_map[] = { //IDLE_4 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8f, 0xff, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_4_block_map[] = { //IDLE_5 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x3c, 0x00, 0xb8, 0x8f, 0x7f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM tap_1_block_map[] = { //TAP_1 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xc1, 0x07,
0x00, 0xce, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0x98, 0xff, 0x1f, 0xc0, 0xff, 0xff, 0x1f,
0x00, 0x3f, 0xfe, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM tap_2_block_map[] = { //TAP_2 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x01, 0xfc, 0x80, 0xc1, 0x07,
0xf1, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_1_block_list[] = { //IDLE_1 and IDLE_2 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02,
0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0xe0, 0x18, 0x06, 0x01, 0x78, 0x78,
0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30,
0xc8, 0x01, 0x3e, 0xc0, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01,
0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
};
static const char PROGMEM idle_2_block_list[] = { //IDLE_3 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04,
0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80,
0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04,
0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01,
0x1e, 0xe0
};
static const char PROGMEM idle_3_block_list[] = { //IDLE_4 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01,
0x78, 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c,
0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18,
0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10,
0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f,
0xe0, 0x01, 0x1e, 0xe0
};
static const char PROGMEM idle_4_block_list[] = { //IDLE_5 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
0x30, 0xc8, 0x01, 0x1e, 0x60, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40,
0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02,
0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
0xe0
};
static const char PROGMEM tap_1_block_list[] = { //TAP_1 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44,
0x84, 0x88, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x01, 0x0e, 0xf0, 0x20,
0x26, 0x26, 0x29, 0x10, 0xd5, 0xce, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x1c, 0xe0, 0x30, 0xc8,
0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07, 0x78,
0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03,
0x07, 0x07, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
0xe0
};
static const char PROGMEM tap_2_block_list[] = { //TAP_2 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x7e, 0xfe, 0xfe, 0xfe, 0x07, 0xf9, 0x01,
0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18,
0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x0f, 0x03, 0x04,
0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0,
0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x0f, 0x70, 0x80,
0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x07, 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
};
// idle_1 and idle_2 are identical, so share them and save some space
const char* idle_frames[NUM_IDLE_FRAMES] = {
idle_1_block_list,
idle_1_block_list,
idle_2_block_list,
idle_3_block_list,
idle_4_block_list
};
const char* tap_frames[NUM_TAP_FRAMES] = {
tap_1_block_list,
tap_2_block_list
};
// idle_1 and idle_2 are identical, so save some space
const char* idle_block_map[NUM_IDLE_FRAMES] = {
idle_1_block_map,
idle_1_block_map,
idle_2_block_map,
idle_3_block_map,
idle_4_block_map
};
const char* tap_block_map[NUM_TAP_FRAMES] = {
tap_1_block_map,
tap_2_block_map
};
#else
static const char PROGMEM idle_frames[NUM_IDLE_FRAMES][NUM_OLED_BYTES] = {
{ // IDLE 1 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 2 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 3 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04, 0x08, 0x08, 0x04,
0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x30, 0xc8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x03, 0xc2,
0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x83,
0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 4 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 5 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}
};
static const char PROGMEM tap_frames[NUM_TAP_FRAMES][NUM_OLED_BYTES] = {
{ //Tap 1 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44, 0x84, 0x88, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x20, 0x26, 0x26, 0x29, 0x10, 0xd5,
0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07,
0x78, 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x00, 0x00,
0x00, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //Tap 2 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x7e, 0xfe, 0xfe, 0xfe, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80,
0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0x78, 0x81, 0x01, 0x01, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
};
#endif //USE_BITMAP_COMPRESSION
#endif //OLED_ENABLE

View file

@ -1,97 +0,0 @@
// Copyright 2022 Arturo Avila (@ADPenrose)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "animation_frames.h"
#ifdef OLED_ENABLE
#define IDLE_FRAME_DURATION 200 // Idle animation iteration rate in ms
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
uint8_t current_idle_frame = 0;
bool tap_anim = false;
bool tap_anim_toggle = false;
// Decompress and write a precompressed bitmap frame to the OLED.
// Documentation and python compression script available at:
// https://github.com/nullbitsco/squeez-o
#ifdef USE_OLED_BITMAP_COMPRESSION
static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) {
uint16_t block_index = 0;
for (uint16_t i=0; i<NUM_OLED_BYTES; i++) {
uint8_t bit = i%8;
uint8_t map_index = i/8;
uint8_t _block_map = (uint8_t)pgm_read_byte_near(input_block_map + map_index);
uint8_t nonzero_byte = (_block_map & (1 << bit));
if (nonzero_byte) {
const char data = (const char)pgm_read_byte_near(input_block_list + block_index++);
oled_write_raw_byte(data, i);
} else {
const char data = (const char)0x00;
oled_write_raw_byte(data, i);
}
}
}
#endif
static void render_anim(void) {
// Idle animation
void animation_phase(void) {
if (!tap_anim) {
current_idle_frame = (current_idle_frame + 1) % NUM_IDLE_FRAMES;
uint8_t idx = abs((NUM_IDLE_FRAMES - 1) - current_idle_frame);
#ifdef USE_OLED_BITMAP_COMPRESSION
oled_write_compressed_P(idle_block_map[idx], idle_frames[idx]);
#else
oled_write_raw_P(idle_frames[idx], NUM_OLED_BYTES);
#endif
}
}
// Idle behaviour
if (get_current_wpm() != 000) { // prevent sleep
oled_on();
if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
anim_sleep = timer_read32();
} else { // Turn off screen when timer threshold elapsed or reset time since last input
if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
oled_off();
} else {
if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
}
}
}
#endif
// Animate tap
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef OLED_ENABLE
// Check if non-mod
if ((keycode >= KC_TAB && keycode <= KC_SLASH) || // Tab - Slash (Symbols, Punctuation, Space)
(keycode >= KC_KP_SLASH && keycode <= KC_KP_COMMA) || // Keypad slash - Keypad Dot
(keycode >= KC_F1 && keycode <= KC_F12)) { // F1 - F12
if (record->event.pressed) {
// Display tap frames
tap_anim_toggle = !tap_anim_toggle;
#ifdef USE_OLED_BITMAP_COMPRESSION
oled_write_compressed_P(tap_block_map[tap_anim_toggle], tap_frames[tap_anim_toggle]);
#else
oled_write_raw_P(tap_frames[tap_anim_toggle], NUM_OLED_BYTES);
#endif
}
}
#endif
return true;
}

View file

@ -1,17 +0,0 @@
// Copyright 2022 Arturo Avila (@ADPenrose)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#ifdef AUDIO_ENABLE
# define NO_MUSIC_MODE
#endif
#ifdef OLED_ENABLE
# define OLED_TIMEOUT 120000
#endif
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
#define NO_ACTION_ONESHOT
#define LAYER_STATE_8BIT

View file

@ -1,177 +0,0 @@
// Copyright 2022 Arturo Avila (@ADPenrose), Christopher Courtney/Drashna Jael're (@drashna)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "animation_process.h"
/* Structure that helps store settings in memory and write to the EEPROM: */
typedef union {
uint32_t raw;
struct {
bool split_zero :1;
bool split_enter :1;
bool split_plus :1;
};
} via_layout_t;
via_layout_t via_layouts;
/* Keymap */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
MO(1), MO(2), MO(3), CK_TOGG,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3, KC_PENT,
KC_MUTE, KC_P0, KC_P0, KC_PDOT, KC_PENT
),
[1] = LAYOUT_all(
KC_TRNS, CK_DOWN, CK_UP, CK_RST,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_all(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
[2] = { ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
[3] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
};
#endif
/* Setting layout options and debuggin text */
void via_set_layout_options_kb(uint32_t value) {
via_layouts.raw = value;
#ifdef CONSOLE_ENABLE
if (via_layouts.split_zero && via_layouts.split_enter && via_layouts.split_plus){
xprintf("All three layouts are active with a value of: %d\n", value);
} else if (!(via_layouts.split_zero) && via_layouts.split_enter && via_layouts.split_plus){
xprintf("SE and SP layouts are active with a value of: %d\n", value);
} else if (via_layouts.split_zero && !(via_layouts.split_enter) && via_layouts.split_plus){
xprintf("SZ and SP layouts are active with a value of: %d\n", value);
} else if (!(via_layouts.split_zero) && !(via_layouts.split_enter) && via_layouts.split_plus){
xprintf("SP is the only layout active with a value of: %d\n", value);
} else if (via_layouts.split_zero && via_layouts.split_enter && !(via_layouts.split_plus)){
xprintf("SE and SZ layouts are active with a value of: %d\n", value);
} else if (!(via_layouts.split_zero) && via_layouts.split_enter && !(via_layouts.split_plus)) {
xprintf("SE is the only layout active with a value of: %d\n", value);
} else if (via_layouts.split_zero && !(via_layouts.split_enter) && !(via_layouts.split_plus)){
xprintf("SZ is the only layout active with a value of: %d\n", value);
} else {
xprintf("The base layout is active with a value of: %d\n", value);
}
#endif
}
/* Turing LEDs on/off depending on the layout selected on VIA */
bool rgb_matrix_indicators_user(void){
if (via_layouts.split_zero && via_layouts.split_enter && via_layouts.split_plus){
rgb_matrix_set_color(12, 0, 0, 0);
rgb_matrix_set_color(21, 0, 0, 0);
rgb_matrix_set_color(23, 0, 0, 0);
} else if (!(via_layouts.split_zero) && via_layouts.split_enter && via_layouts.split_plus){
rgb_matrix_set_color(12, 0, 0, 0);
rgb_matrix_set_color(21, 0, 0, 0);
rgb_matrix_set_color(22, 0, 0, 0);
rgb_matrix_set_color(24, 0, 0, 0);
} else if (via_layouts.split_zero && !(via_layouts.split_enter) && via_layouts.split_plus){
rgb_matrix_set_color(12, 0, 0, 0);
rgb_matrix_set_color(20, 0, 0, 0);
rgb_matrix_set_color(23, 0, 0, 0);
rgb_matrix_set_color(26, 0, 0, 0);
} else if (!(via_layouts.split_zero) && !(via_layouts.split_enter) && via_layouts.split_plus){
rgb_matrix_set_color(12, 0, 0, 0);
rgb_matrix_set_color(20, 0, 0, 0);
rgb_matrix_set_color(22, 0, 0, 0);
rgb_matrix_set_color(24, 0, 0, 0);
rgb_matrix_set_color(26, 0, 0, 0);
} else if (via_layouts.split_zero && via_layouts.split_enter && !(via_layouts.split_plus)){
rgb_matrix_set_color(11, 0, 0, 0);
rgb_matrix_set_color(16, 0, 0, 0);
rgb_matrix_set_color(21, 0, 0, 0);
rgb_matrix_set_color(23, 0, 0, 0);
} else if (!(via_layouts.split_zero) && via_layouts.split_enter && !(via_layouts.split_plus)) {
rgb_matrix_set_color(11, 0, 0, 0);
rgb_matrix_set_color(16, 0, 0, 0);
rgb_matrix_set_color(21, 0, 0, 0);
rgb_matrix_set_color(22, 0, 0, 0);
rgb_matrix_set_color(24, 0, 0, 0);
} else if (via_layouts.split_zero && !(via_layouts.split_enter) && !(via_layouts.split_plus)){
rgb_matrix_set_color(11, 0, 0, 0);
rgb_matrix_set_color(16, 0, 0, 0);
rgb_matrix_set_color(20, 0, 0, 0);
rgb_matrix_set_color(23, 0, 0, 0);
rgb_matrix_set_color(26, 0, 0, 0);
} else {
rgb_matrix_set_color(11, 0, 0, 0);
rgb_matrix_set_color(16, 0, 0, 0);
rgb_matrix_set_color(20, 0, 0, 0);
rgb_matrix_set_color(22, 0, 0, 0);
rgb_matrix_set_color(24, 0, 0, 0);
rgb_matrix_set_color(26, 0, 0, 0);
}
return false;
}
/* OLED stuff */
#ifdef OLED_ENABLE
bool oled_task_user(void) {
render_anim();
// WPM render
oled_set_cursor(1, 0);
oled_write_P(PSTR(">"), false);
oled_write(get_u8_str(get_current_wpm(), '0'), false);
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_set_cursor(0,14);
oled_write_P(led_state.caps_lock ? PSTR("CPSLK") :" ", true);
oled_set_cursor(0,15);
oled_write_P(led_state.num_lock ? PSTR("NUMLK") :" ", true);
return false;
}
/* WPM calculation considerations */
bool wpm_keycode_user(uint16_t keycode) {
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
(keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) ||
(keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
keycode = keycode & 0xFF;
} else if (keycode > 0xFF) {
keycode = 0;
}
// Include keys in WPM calculation
if ((keycode >= KC_TAB && keycode <= KC_SLASH) || // Tab - Slash (Symbols, Punctuation, Space)
(keycode >= KC_KP_SLASH && keycode <= KC_KP_COMMA) || // Keypad numbers - Keypad Dot
(keycode >= KC_F1 && keycode <= KC_F12)) { // F1 - F12
return true;
}
return false;
}
#endif

View file

@ -1,19 +0,0 @@
# The Bongo Cat VIA-compatible keymap for the AkemiPad
# Features
- Audio Click capabilitiy.
- RGB Matrix Lighting (cycles left-right and up-down).
- LEDs turn on and off depending on the layout selected on the VIA UI.
- Encoder Map feature.
- Bongo Cat animation with WPM counter and Caps Lock/Num Lock indicators.
This keymap is optimized for a numpad and can fit the RGB matrix (with
very few animations due to AVR constraints), the encoder map, the audio
click feature and the display of the OLED animations. This was possible
thanks to the [squeez-o](https://github.com/nullbitsco/squeez-o) compression tool.
![Bongo Cat](https://i.imgur.com/Ty0qKnV.gif)
___
###### *This keymap is an adaptation designed to work with the AkemiPad. The reference keymap used was created for the Nibble keyboard, and you can check it [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nullbitsco/nibble/keymaps/oled_bongocat).*

View file

@ -1,8 +0,0 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
ENCODER_MAP_ENABLE = yes
OLED_ENABLE = yes
WPM_ENABLE = yes

View file

@ -1,405 +0,0 @@
/* Copyright 2022 adpenrose
*
* 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/>.
*/
#pragma once
#ifdef OLED_ENABLE
// Enable OLED bitmpa compression selectively.
#define USE_OLED_BITMAP_COMPRESSION
#define NUM_IDLE_FRAMES 5
#define NUM_TAP_FRAMES 2
#define NUM_OLED_BYTES 512
#ifdef USE_OLED_BITMAP_COMPRESSION
static const char PROGMEM idle_1_block_map[] = { //IDLE_1 and IDLE_2 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x1c, 0x00, 0xb8, 0x8f, 0x3f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_2_block_map[] = { //IDLE_3 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xd8, 0xe0, 0x03,
0xf0, 0x6f, 0x00, 0x3e, 0x00, 0xf8, 0xc7, 0x7f, 0x00, 0x98, 0x7f, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_3_block_map[] = { //IDLE_4 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8f, 0xff, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_4_block_map[] = { //IDLE_5 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
0xf0, 0xcf, 0x00, 0x3c, 0x00, 0xb8, 0x8f, 0x7f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM tap_1_block_map[] = { //TAP_1 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xc1, 0x07,
0x00, 0xce, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0x98, 0xff, 0x1f, 0xc0, 0xff, 0xff, 0x1f,
0x00, 0x3f, 0xfe, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM tap_2_block_map[] = { //TAP_2 flipped
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x01, 0xfc, 0x80, 0xc1, 0x07,
0xf1, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
};
static const char PROGMEM idle_1_block_list[] = { //IDLE_1 and IDLE_2 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02,
0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0xe0, 0x18, 0x06, 0x01, 0x78, 0x78,
0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30,
0xc8, 0x01, 0x3e, 0xc0, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01,
0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
};
static const char PROGMEM idle_2_block_list[] = { //IDLE_3 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04,
0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80,
0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04,
0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01,
0x1e, 0xe0
};
static const char PROGMEM idle_3_block_list[] = { //IDLE_4 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01,
0x78, 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c,
0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18,
0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10,
0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f,
0xe0, 0x01, 0x1e, 0xe0
};
static const char PROGMEM idle_4_block_list[] = { //IDLE_5 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
0x30, 0xc8, 0x01, 0x1e, 0x60, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40,
0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02,
0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
0xe0
};
static const char PROGMEM tap_1_block_list[] = { //TAP_1 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44,
0x84, 0x88, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x01, 0x0e, 0xf0, 0x20,
0x26, 0x26, 0x29, 0x10, 0xd5, 0xce, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x1c, 0xe0, 0x30, 0xc8,
0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07, 0x78,
0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03,
0x07, 0x07, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
0xe0
};
static const char PROGMEM tap_2_block_list[] = { //TAP_2 flipped
0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x7e, 0xfe, 0xfe, 0xfe, 0x07, 0xf9, 0x01,
0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18,
0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x0f, 0x03, 0x04,
0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0,
0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x0f, 0x70, 0x80,
0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x07, 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
};
// idle_1 and idle_2 are identical, so share them and save some space
const char* idle_frames[NUM_IDLE_FRAMES] = {
idle_1_block_list,
idle_1_block_list,
idle_2_block_list,
idle_3_block_list,
idle_4_block_list
};
const char* tap_frames[NUM_TAP_FRAMES] = {
tap_1_block_list,
tap_2_block_list
};
// idle_1 and idle_2 are identical, so save some space
const char* idle_block_map[NUM_IDLE_FRAMES] = {
idle_1_block_map,
idle_1_block_map,
idle_2_block_map,
idle_3_block_map,
idle_4_block_map
};
const char* tap_block_map[NUM_TAP_FRAMES] = {
tap_1_block_map,
tap_2_block_map
};
#else
static const char PROGMEM idle_frames[NUM_IDLE_FRAMES][NUM_OLED_BYTES] = {
{ // IDLE 1 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 2 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 3 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04, 0x08, 0x08, 0x04,
0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x30, 0xc8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x03, 0xc2,
0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x83,
0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 4 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //IDLE 5 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
0x78, 0x80, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}
};
static const char PROGMEM tap_frames[NUM_TAP_FRAMES][NUM_OLED_BYTES] = {
{ //Tap 1 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44, 0x84, 0x88, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x20, 0x26, 0x26, 0x29, 0x10, 0xd5,
0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07,
0x78, 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x00, 0x00,
0x00, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //Tap 2 flipped
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,
0x3e, 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, 0x07, 0xf8, 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, 0x1f, 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,
0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 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, 0x7e, 0xfe, 0xfe, 0xfe, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80,
0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0x78, 0x81, 0x01, 0x01, 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, 0x07, 0x78, 0x80, 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, 0x07, 0xf8, 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, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
};
#endif //USE_BITMAP_COMPRESSION
#endif //OLED_ENABLE

View file

@ -1,181 +0,0 @@
/* Copyright 2022 adpenrose
*
* 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
#include "animation_frames.h"
/* Base layout:
* ,---------------------------------------------------------------------|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
* |--------------------------------------------------------------- |
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
* |---------------------------------------------------------------------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
* |---------------------------------------------------------------------|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M0(3) |
* |---------------------------------------------------------------------|
* |Ctrl|GUI |Alt | Space |MO(1) |MO(2)| |Lt |Dn |Rt |
* `---------------------------------------------------------------------|'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_MUTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(3),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
/* Encoder */
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
};
#endif
#ifdef OLED_ENABLE
#define IDLE_FRAME_DURATION 200 // Idle animation iteration rate in ms
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
uint8_t current_idle_frame = 0;
bool tap_anim = false;
bool tap_anim_toggle = false;
// Decompress and write a precompressed bitmap frame to the OLED.
// Documentation and python compression script available at:
// https://github.com/nullbitsco/squeez-o
#ifdef USE_OLED_BITMAP_COMPRESSION
static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) {
uint16_t block_index = 0;
for (uint16_t i=0; i<NUM_OLED_BYTES; i++) {
uint8_t bit = i%8;
uint8_t map_index = i/8;
uint8_t _block_map = (uint8_t)pgm_read_byte_near(input_block_map + map_index);
uint8_t nonzero_byte = (_block_map & (1 << bit));
if (nonzero_byte) {
const char data = (const char)pgm_read_byte_near(input_block_list + block_index++);
oled_write_raw_byte(data, i);
} else {
const char data = (const char)0x00;
oled_write_raw_byte(data, i);
}
}
}
#endif
static void render_anim(void) {
// Idle animation
void animation_phase(void) {
if (!tap_anim) {
current_idle_frame = (current_idle_frame + 1) % NUM_IDLE_FRAMES;
uint8_t idx = abs((NUM_IDLE_FRAMES - 1) - current_idle_frame);
#ifdef USE_OLED_BITMAP_COMPRESSION
oled_write_compressed_P(idle_block_map[idx], idle_frames[idx]);
#else
oled_write_raw_P(idle_frames[idx], NUM_OLED_BYTES);
#endif
}
}
// Idle behaviour
if (get_current_wpm() != 000) { // prevent sleep
oled_on();
if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
anim_sleep = timer_read32();
} else { // Turn off screen when timer threshold elapsed or reset time since last input
if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
oled_off();
} else {
if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
}
}
}
bool oled_task_user(void) {
render_anim();
oled_set_cursor(0, 0);
uint8_t n = get_current_wpm();
char wpm_counter[6];
wpm_counter[5] = '\0';
wpm_counter[4] = '0' + n % 10;
wpm_counter[3] = '0' + (n /= 10) % 10;
wpm_counter[2] = '0' + n / 10 ;
wpm_counter[1] = '0';
wpm_counter[0] = '>';
oled_write_ln(wpm_counter, false);
return false;
}
#endif
// Animate tap
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef OLED_ENABLE
// Check if non-mod
if ((keycode >= KC_A && keycode <= KC_0) || (keycode >= KC_TAB && keycode <= KC_SLASH)) {
if (record->event.pressed) {
// Display tap frames
tap_anim_toggle = !tap_anim_toggle;
#ifdef USE_OLED_BITMAP_COMPRESSION
oled_write_compressed_P(tap_block_map[tap_anim_toggle], tap_frames[tap_anim_toggle]);
#else
oled_write_raw_P(tap_frames[tap_anim_toggle], NUM_OLED_BYTES);
#endif
}
}
#endif
return true;
}

View file

@ -1,6 +0,0 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
WPM_ENABLE = yes
SPACE_CADET_ENABLE = no
MAGIC_ENABLE = no
ENCODER_MAP_ENABLE = yes

View file

@ -1,401 +0,0 @@
/* Copyright 2022 adpenrose
*
* 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
/* Base layout:
* ,---------------------------------------------------------------------|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
* |--------------------------------------------------------------- |
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
* |---------------------------------------------------------------------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
* |---------------------------------------------------------------------|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M0(3) |
* |---------------------------------------------------------------------|
* |Ctrl|GUI |Alt | Space |MO(1) |MO(2)| |Lt |Dn |Rt |
* `---------------------------------------------------------------------|'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_MUTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(3),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
/* Encoder */
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
};
#endif
#ifdef OLED_ENABLE
/*=========================================== OLED CONFIGURATION ===========================================*/
bool oled_horizontal = true; // OLED rotation (true = horizontal, false = vertical)
bool graph_direction = false; // Graph movement (true = right to left, false = left to right)
float graph_top_wpm = 100.0; // Minimum WPM required to reach the top of the graph
int graph_refresh = 1000; // In milliseconds, determines the graph-line frequency
int icon_med_wpm = 50; // WPM required to display the medium snail
int icon_fast_wpm = 72; // WPM required to display the fast snail
// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal
#define MA_LAYER_NAME "QWRTY" // Layer 0 name
#define L1_LAYER_NAME "FUNCT" // Layer 1 name
#define L2_LAYER_NAME "NMPAD" // Layer 2 name
#define L3_LAYER_NAME "RANDM" // Layer 3 name
// Constants required for the background render, the graph render and the WPM counter. THESE VALUES SHOULD NOT BE CHANGED.
bool first_loop = true;
int timer = 0;
int wpm_limit = 20;
int max_wpm = -1;
int wpm_icon = -1;
int graph_lines[65];
/*================================================================================================================*/
/* Rotation of the OLED: */
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (oled_horizontal) {
return OLED_ROTATION_180;
} else {
return OLED_ROTATION_270;
}
}
// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary
static void write_pixel(int x, int y, bool onoff) {
if (oled_horizontal) {
oled_write_pixel(x, y, onoff);
} else {
oled_write_pixel(y, 127 - x, onoff);
}
}
/*====================================== BASE KEYBOARD MATRIX IMAGES =======================================*/
// Draw static background image to OLED (keyboard with no bottom row)
static void render_background(void) {
if (oled_horizontal) {
static const char PROGMEM oled_keymap_horizontal[] = {
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,
0x84, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04,
0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00,
0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,
0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00,
0x80, 0x04, 0x04, 0x04, 0x04, 0x84, 0x84, 0x84, 0x84, 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,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 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,
0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x40, 0x00, 0x00,
0x00, 0x02, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40,
0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42,
0x40, 0x40, 0x40, 0x00, 0x02, 0x00, 0x00, 0x40, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x42, 0x02,
0x02, 0x02, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 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, 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(oled_keymap_horizontal, sizeof(oled_keymap_horizontal));
} else {
static const char PROGMEM oled_keymap_vertical[] = {
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc3, 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, 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, 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(oled_keymap_vertical, sizeof(oled_keymap_vertical));
}
}
/*================================================================================================================*/
/*=============================== PIXEL'S COORDINATES FOR EACH PHYSICAL KEY ================================*/
// Location of OLED keyboard's top left pixel, relative to the display
static const int keymap_template[2] = {46, 0};
// Location of key highlights top left pixels, relative to keymap_template {X, Y, Key length in px}
static int keymap_coords[MATRIX_ROWS][MATRIX_COLS][3] = {
{ {0, 0, 1}, {5, 0, 1}, {10, 0, 1}, {15, 0, 1}, {20, 0, 1}, {25, 0, 1}, {30, 0, 1} },
{ {0, 5, 5}, {9, 5, 1}, {14, 5, 1}, {19, 5, 1}, {24, 5, 1}, {29, 5, 1}, {34, 5, 1} },
{ {0, 10, 6}, {10, 10, 1}, {15, 10, 1}, {20, 10, 1}, {25, 10, 1}, {30, 10, 1}, {35, 10, 1} },
{ {0, 15, 8}, {12, 15, 1}, {17, 15, 1}, {22, 15, 1}, {27, 15, 1}, {32, 15, 1}, {37, 15, 1} },
{ {0, 20, 2}, {6, 20, 2}, {12, 20, 2}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {18, 20, 33} },
{ {35, 0, 1}, {40, 0, 1}, {45, 0, 1}, {50, 0, 1}, {55, 0, 1}, {60, 0, 1}, {65, 0, 8} },
{ {39, 5, 1}, {44, 5, 1}, {49, 5, 1}, {54, 5, 1}, {59, 5, 1}, {64, 5, 1}, {69, 5, 4} },
{ {40, 10, 1}, {45, 10, 1}, {50, 10, 1}, {55, 10, 1}, {60, 10, 1}, {65, 10, 8}, {77, 10, 1} },
{ {42, 15, 1}, {47, 15, 1}, {52, 15, 1}, {57, 15, 1}, {62, 15, 6}, {72, 15, 1}, {77, 15, 1} },
{ {0, 0, 0}, {0, 0, 0}, {55, 20, 2}, {61, 20, 2}, {67, 20, 1}, {72, 20, 1}, {77, 20, 1} },
};
// Toggles pixels surrounding key
static void render_keymap(uint8_t key_row, uint8_t key_col, bool onoff) {
int length = keymap_coords[key_row][key_col][2] + 4;
int left = keymap_coords[key_row][key_col][0] + keymap_template[0];
int top = keymap_coords[key_row][key_col][1] + keymap_template[1];
int right = left + length - 1;
int bottom = top + 4;
// Draw top and bottom walls (horizontal for <length>px)
for (int x = 0; x < length; x++) {
write_pixel(left + x, top, onoff);
write_pixel(left + x, bottom, onoff);
}
// Draw left and right walls (vertical for 5px)
for (int y = 0; y < 5; y++) {
write_pixel(left, top + y, onoff);
write_pixel(right, top + y, onoff);
}
}
/*================================================================================================================*/
/*============================================= LAYER'S NAME ===============================================*/
// Write active layer name
static void render_layer_state(void) {
if (oled_horizontal) {
oled_set_cursor(0, 0);
} else {
oled_set_cursor(0, 15);
}
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_P(PSTR(MA_LAYER_NAME), false);
break;
case 1:
oled_write_P(PSTR(L1_LAYER_NAME), false);
break;
case 2:
oled_write_P(PSTR(L2_LAYER_NAME), false);
break;
case 3:
oled_write_P(PSTR(L3_LAYER_NAME), false);
break;
default:
oled_write("ERROR", false);
break;
}
}
/*================================================================================================================*/
/*==================================== WPM COUNTERS (CURRENT AND MAX) ======================================*/
// Update WPM counters
static void render_wpm_counters(int current_wpm) {
int cursorposition_cur = 2;
int cursorposition_max = 1;
if (oled_horizontal == false) {
cursorposition_cur = 13;
cursorposition_max = 14;
}
oled_set_cursor(0, cursorposition_cur);
oled_write(get_u8_str(get_current_wpm(), '0'), false);
char wpm_counter[4];
wpm_counter[3] = '\0';
wpm_counter[2] = '0' + current_wpm % 10;
wpm_counter[1] = '0' + (current_wpm / 10) % 10;
wpm_counter[0] = '0' + (current_wpm / 100) % 10;
if (current_wpm > max_wpm) {
max_wpm = current_wpm;
wpm_limit = max_wpm + 20;
oled_set_cursor(0, cursorposition_max);
oled_write(wpm_counter, false);
}
}
/*================================================================================================================*/
/*============================================== WPM GRAPH =================================================*/
// Update WPM graph
static void render_wpm_graph(int current_wpm) {
int line_height = ((current_wpm / graph_top_wpm) * 7);
if (line_height > 7) {
line_height = 7;
}
// Count graph line pixels, return if nothing to draw
int pixel_count = line_height;
for (int i = 0; i < 64; i++) {
pixel_count += graph_lines[i];
}
if (pixel_count == 0) {
return;
}
// Shift array elements left or right depending on graph_direction, append new graph line
if (graph_direction) {
for (int i = 0; i < 64; i++) {
graph_lines[i] = graph_lines[i + 1];
}
graph_lines[64] = line_height;
} else {
for (int i = 64; i > 0; i--) {
graph_lines[i] = graph_lines[i - 1];
}
graph_lines[0] = line_height;
}
// Draw all graph lines (left to right, bottom to top)
int draw_count, arrpos;
for (int x = 1; x <= 127; x += 2) {
arrpos = x / 2;
draw_count = graph_lines[arrpos];
for (int y = 31; y >= 25; y--) {
if (draw_count > 0) {
write_pixel(x, y, true);
draw_count--;
} else {
write_pixel(x, y, false);
}
}
}
}
/*================================================================================================================*/
/*======================================== WPM BASED SNAIL ICON ============================================*/
// Update WPM snail icon
static void render_wpm_icon(int current_wpm) {
// wpm_icon is used to prevent unnecessary redraw
if ((current_wpm < icon_med_wpm) && (wpm_icon != 0)) {
wpm_icon = 0;
} else if ((current_wpm >= icon_med_wpm) && (current_wpm < icon_fast_wpm) && (wpm_icon != 1)) {
wpm_icon = 1;
} else if ((current_wpm >= icon_fast_wpm) && (wpm_icon != 2)) {
wpm_icon = 2;
} else {
return;
}
static const char PROGMEM snails[][2][24] = {
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00},
{0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}},
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00},
{0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}},
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00},
{0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}}
};
if (oled_horizontal) {
oled_set_cursor(3, 1);
oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
oled_set_cursor(3, 2);
oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
} else {
oled_set_cursor(0, 11);
oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
oled_set_cursor(0, 12);
oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
}
}
/*================================================================================================================*/
/* Function that renders stuff on the oled */
bool oled_task_user(void) {
// Draw OLED keyboard, preventing redraw.
if (first_loop) {
render_background();
first_loop = false;
}
// Get current WPM
int current_wpm = get_current_wpm();
// Write active layer name to display
render_layer_state();
// Update WPM counters
render_wpm_counters(current_wpm);
// Update WPM snail icon
render_wpm_icon(current_wpm);
// Update WPM graph every graph_refresh milliseconds
if (timer_elapsed(timer) > graph_refresh) {
render_wpm_graph(current_wpm);
timer = timer_read();
}
return false;
}
#endif
// Called by QMK during key processing
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef OLED_ENABLE
// Toggle pixels surrounding key
render_keymap(record->event.key.row, record->event.key.col, record->event.pressed);
#endif
return true;
}

View file

@ -1,30 +0,0 @@
# SnailMap-ported keymap for the Kintsugi
## Features
- Keyboard matrix that highlights whichever key is currently pressed.
- Little cute snail icon that changes acording to the current WPM.
- Counters for current and max WPM values.
- Active layer name.
- Mini WPM graph.
## How to customize
The `OLED configuration variables` can be used to easily customize the display:
```
oled_horizontal - Horizontal or vertical orientation
graph_direction - Graph movement direction
graph_refresh - Frequency of graph lines
graph_top_wpm - WPM required to reach the top of the graph
icon_med_wpm - WPM required to display the medium snail
icon_fast_wpm - WPM required to display the fast snail
MA_LAYER_NAME - Layer 0 display name
L1_LAYER_NAME - Layer 1 display name
L2_LAYER_NAME - Layer 2 display name
L3_LAYER_NAME - Layer 3 display name
```
___
###### *This keymap is an adaptation designed to work with the Kintsugi keyboard. The original SnailMap keymap was created by [dogspace](https://github.com/dogspace) for the Nibble keyboard, and you can check it [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nullbitsco/nibble/keymaps/snailmap).*

View file

@ -1,6 +0,0 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
WPM_ENABLE = yes
SPACE_CADET_ENABLE = no
MAGIC_ENABLE = no
ENCODER_MAP_ENABLE = yes

View file

@ -1,43 +0,0 @@
// Copyright 2022 Arturo Avila (@Arturo Avila)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
HF_TOGG,
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P4, KC_P5, KC_P6,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT_all(
KC_TRNS,
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
};
#endif
#ifdef HAPTIC_ENABLE
bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_VOLU ... KC_VOLD:
return false;
}
return true;
}
#endif

View file

@ -1,4 +0,0 @@
VIA_ENABLE = yes
HAPTIC_ENABLE = yes
HAPTIC_DRIVER = solenoid
ENCODER_MAP_ENABLE = yes # Encoder mapping functionality

View file

@ -1,32 +0,0 @@
// Copyright 2022 Arturo Avila (@ADPenrose)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
KC_LSFT, MO(2), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT(
KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, HF_TOGG,
KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, KC_BSLS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View file

@ -1 +0,0 @@
# Solenoid keymap for Shisaku

View file

@ -1,4 +0,0 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
HAPTIC_ENABLE = yes
HAPTIC_DRIVER = solenoid

View file

@ -1,73 +0,0 @@
/* Copyright 2021 eithanshavit
*
* 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
enum layer_names {
_MAIN,
_FUNCTION,
_NUMPAD,
};
#define FUNCTION MO(_FUNCTION)
#define NUMPAD MO(_NUMPAD)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMPAD] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, KC_PMNS, _______, LCA(KC_D),LCA(KC_F),LCA(KC_G),
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, LCA(KC_E),LCA(KC_ENT),LCA(KC_T),
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU,
//└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
_______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT
// └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
),
[_FUNCTION] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LCA(KC_D),LCA(KC_F),LCA(KC_G),
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, LCA(KC_E),LCA(KC_ENT),LCA(KC_T),
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,_______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU,
//└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
_______, _______, _______, _______, _______, _______, _______, _______
// └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
),
[_MAIN] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_MINS, KC_EQL, KC_GRV,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_LBRC, KC_RBRC, KC_BSLS,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_UP,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_DOWN, KC_RIGHT,
//└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
NUMPAD, KC_LALT, KC_LCMD, KC_SPC, KC_ENT, FUNCTION,LCMD(KC_GRV),LALT(KC_SPC)
// └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
)
};

View file

@ -1,34 +0,0 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
/* Coordinate keymap - designed to send a string in the format [a-r][0-5] corresponding to the matrix position, where a0 is the top left and r5 is bottom right */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0
),
};
/* String generation */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
char col = record->event.key.col + 'a';
char row = record->event.key.row + '0';
char result[2] = {col, row};
send_string(result);
}
return false;
}

View file

@ -1,4 +0,0 @@
# The coordinate keymap for Duet
An example keymap which sends a string `[a-r][0-5]` corresponding to the column-row position of the pressed switch.
Possibly useful for pairing to a kiosk device provided the display application can parse and handle this format.

View file

@ -1,41 +0,0 @@
/* Copyright 2019 Ryota Goto
*
* 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
#define KC_CTES RCTL_T(KC_ESC)
#define KC_BSM1 LT(1, KC_BSPC)
#define KC_SPM1 LT(1, KC_SPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all( /* Base */
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_GRV,
KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_ENT,
KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
KC_LCTL, XXXXXXX, KC_RGUI, KC_BSM1, MO(2), KC_SPM1, KC_RALT, XXXXXXX, KC_RCTL
),
[1] = LAYOUT_all( /* Extra Keys */
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
_______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_all( /* Num and FN */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_MINS, KC_EQL, _______,
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, KC_SCLN, KC_QUOT, XXXXXXX, _______,
_______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______,
_______, XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX, _______
)
};

View file

@ -1,3 +0,0 @@
# crd's keymap for equinox
[KLE](http://www.keyboard-layout-editor.com/#/gists/0be9c4a916dba80ebb5533cd00c5304c)

View file

@ -1,22 +0,0 @@
/*
Copyright 2019 Ryota Goto
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/>.
*/
#pragma once
// Define some configuration for modtap behavior
// #define TAPPING_TERM 150
#define PERMISSIVE_HOLD

View file

@ -1,97 +0,0 @@
/* Copyright 2019 Ryota Goto
*
* 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
enum layer_names {
_BASE,
_NAV,
_FN
};
#define MY_LOCK C(LCMD(KC_L)) // Mac: Custom lock hotkey in BTT (when Alt/Command have been swapped in macOS)
/*
KBD6x ANSI physical layout
1u == 8chars
| | | | | | | | | | | | | | | |
||
| 1,5u | | | | | | | | | | | | | 1,5u |
||
| 1,75u | | | | | | | | | | | | 1,25u |
||
| 2,25u | | | | | | | | | | | 1,75u | |
| | 1,25u | | 1,25u | |
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_60_tsangan_hhkb(
// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// | | | | | | | | | | | | | | | |
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NUBS, KC_RBRC,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,5u | | | | | | | | | | | | | 1,5u |
LT(_NAV,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_NUHS, KC_BSPC,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,75u | | | | | | | | | | | | 1,25u |
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,25u | | | | | | | | | | | 1,75u | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// | | 1,25u | | 1,25u | |
XXXXXXX, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, XXXXXXX
// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
),
[_NAV] = LAYOUT_60_tsangan_hhkb(
// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// | | | | | | | | | | | | | | | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_BSPC,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,5u | | | | | | | | | | | | | 1,5u |
_______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, _______, _______, KC_DEL,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,75u | | | | | | | | | | | | 1,25u |
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,25u | | | | | | | | | | | 1,75u | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// | | 1,25u | | 1,25u | |
XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX
// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
),
[_FN] = LAYOUT_60_tsangan_hhkb(
// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// | | | | | | | | | | | | | | | |
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,5u | | | | | | | | | | | | | 1,5u |
_______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,75u | | | | | | | | | | | | 1,25u |
KC_RCTL, KC_VOLD, KC_VOLU, KC_MUTE, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, MY_LOCK,
// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
// | 1,25u | | | | | | | | | | | 1,75u | |
_______, BL_TOGG, BL_UP, BL_DOWN,BL_STEP, _______, _______, _______, KC_MRWD, KC_MFFD, _______, _______, _______,
// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// | | 1,25u | | 1,25u | |
XXXXXXX, _______, _______, KC_MPLY, _______, _______, XXXXXXX
// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
),
};

View file

@ -1,14 +0,0 @@
# General Information
This is more or less a HHKB base layout, but with completely different Fn layers. I don't use most of the HHKB secondary key positions because, honestly, they make no sense to me at all.
Fn key layer is focused mostly on keyboard firmware features (like RGB) as well as some of the necessary alternate functions. It also hold media controls, F-keys and Reset.
Left Tab-Hold layer is focused on nav cluster functionality, and turns Backspace into Delete (and moves Backspace up into the top right 1u position).
# Build instructions
To simply build the firmware file: `make clean && make ai03/polaris:mekberg`
To build and immediately flash: `make clean && make ai03/polaris:mekberg:flash`

View file

@ -1,2 +0,0 @@
BACKLIGHT_ENABLE = no # Disable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Disable keyboard RGB underglow

View file

@ -1,35 +0,0 @@
/* Copyright 2019 Ryota Goto
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_GRV, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT( /* FN */
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______,
KC_CAPS, _______, KC_UP, _______, _______, _______, _______, _______, KC_PGUP, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_VOLU, KC_VOLD, KC_HOME, KC_PGDN, KC_END, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_PGUP,
_______, _______, _______, _______, KC_BSPC, KC_HOME, KC_PGDN, KC_END
)
};

View file

@ -1,3 +0,0 @@
# The ai03 keymap for Quasar
Focuses functionality mainly into the 60% cluster.

View file

@ -1,75 +0,0 @@
/* Copyright 2019 Elliot Powell
*
* 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
/*
BLANK
,----------------------------------------------------------------. ,--------------.
| | | | | | | | | | | | | | | | | |
|----------------------------------------------------------------| |--------------|
| | | | | | | | | | | | | | | | |
|------------------------------------------------------------ | |--------------|
| | | | | | | | | | | | | | | | |
|----------------------------------------------------------------' |--------------|
| | | | | | | | | | | | ,----. | | | |
|-----------------------------------------------------------' | | `--------------|
| | | | | | ,--------------. | | |
`------` '------------------------------` '-----' | | | | `---------'
`--------------'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base
,----------------------------------------------------------------. ,--------------.
|Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | Bac| | / | * | + |
|----------------------------------------------------------------| |--------------|
| Tab | Q | W | E | R | T | Y | U | I | O | P | Enter| | 7 | 8 | 9 |
|------------------------------------------------------------ | |--------------|
|CapsLock | A | S | D | F | G | H | J | K | L | : | | | 4 | 5 | 6 |
|----------------------------------------------------------------' |--------------|
|Shift | \ | Z | X | C | V | B | N | M | , | . | ,----. | 1 | 2 | 3 |
|-----------------------------------------------------------' | Up | `--------------|
| Ctrl | | SPACE | |AltGr| ,--------------. | 0 | . |
`------` '------------------------------` '-----' |L/fn|Down|Rght| `---------'
`--------------'
*/
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, KC_PSLS, KC_PAST, KC_PPLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, _______, KC_P7, KC_P8, KC_P9,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_P1, KC_P2, KC_P3,
KC_LCTL, _______, _______, _______, KC_SPC, _______, _______, KC_RALT, LT(1, KC_LEFT), KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[1] = LAYOUT( /* Second
,----------------------------------------------------------------. ,--------------.
| GRV| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9| F10| F11| F12 | |Nlck|Pscr| = |
|----------------------------------------------------------------| |--------------|
| | | | | | | | | | | ? | DEL | |Home| Up |PgUp|
|------------------------------------------------------------ | |--------------|
| | | | | | | | | | | ' |DEL | |Left|ScrL|Rght|
|----------------------------------------------------------------' |--------------|
| | | | | | | | | | [ | ] | ,----. |End |Down|PgDn|
|-----------------------------------------------------------' | | `--------------|
| GUI | | | | | ,--------------. | |Rest|
`------` '------------------------------` '-----' | | | | `---------'
`--------------'
*/
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUM, KC_PSCR, KC_EQUAL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, _______, KC_HOME, KC_UP, KC_PGUP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_DEL, KC_LEFT, KC_SCRL, KC_RGHT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_END, KC_DOWN, KC_PGDN,
KC_LGUI, _______, _______, _______, KC_LALT, _______, _______, _______, _______, _______, _______, _______, QK_BOOT),
};

View file

@ -1,68 +0,0 @@
# Eyecandy
![Eyecandy](https://i.imgur.com/gYWNDlF.png)
# MehAdviceGuy Raine layout
Welcome to one of the most useless layouts you will find this side of town!
The layout is born out of the need for AltGr to get to æø and å when you don't have a full bottom row.
## Base Layer (0)
The base layer borrows alot from the Default Raine layer in regards to the alphas, and the numpad. But deviates ever so slightly by putting the layer key on the Left arrow key, relacing it from its original location with AltGr. And putting , and . on what was normally ? and right shift.
```
,----------------------------------------------------------------. ,--------------.
|Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | Bac| | / | * | + |
|----------------------------------------------------------------| |--------------|
| Tab | Q | W | E | R | T | Y | U | I | O | P | Enter| | 7 | 8 | 9 |
|------------------------------------------------------------ | |--------------|
|CapsLock | A | S | D | F | G | H | J | K | L | : | | | 4 | 5 | 6 |
|----------------------------------------------------------------' |--------------|
|Shift | \ | Z | X | C | V | B | N | M | , | . | ,----. | 1 | 2 | 3 |
|-----------------------------------------------------------' | Up | `--------------|
| Ctrl | | SPACE | |AltGr| ,--------------. | 0 | . |
`------` '------------------------------` '-----' |L/fn|Down|Rght| `---------'
`--------------'
```
## Modifier Layer (1)
The Modifier layer also borrows a few things from the Default Raine layout, but changes a fair bit of things in it. These changes include:
* Moving Delete to Enter and completing the F-row
* Moving [ and ] to , and .
* Adding GUI to Left Ctrl
* Replacing insert with =
* Adding / to the P position
* Moving ' one to the left
```
,----------------------------------------------------------------. ,--------------.
| GRV| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9| F10| F11| F12 | |Nlck|Pscr| = |
|----------------------------------------------------------------| |--------------|
| | | | | | | | | | | ? | DEL | |Home| Up |PgUp|
|------------------------------------------------------------ | |--------------|
| | | | | | | | | | | ' |DEL | |Left|ScrL|Rght|
|----------------------------------------------------------------' |--------------|
| | | | | | | | | | [ | ] | ,----. |End |Down|PgDn|
|-----------------------------------------------------------' | | `--------------|
| GUI | | | | | ,--------------. | |Rest|
`------` '------------------------------` '-----' | | | | `---------'
`--------------'
```
### Blank ASKII version if anyone needs!
```
,----------------------------------------------------------------. ,--------------.
| | | | | | | | | | | | | | | | | |
|----------------------------------------------------------------| |--------------|
| | | | | | | | | | | | | | | | |
|------------------------------------------------------------ | |--------------|
| | | | | | | | | | | | | | | | |
|----------------------------------------------------------------' |--------------|
| | | | | | | | | | | | ,----. | | | |
|-----------------------------------------------------------' | | `--------------|
| | | | | | ,--------------. | | |
`------` '------------------------------` '-----' | | | | `---------'
`--------------'
```
### KLE
![KLE Layout](https://i.imgur.com/JDc1oM4.png)
![KLE Link](http://www.keyboard-layout-editor.com/##@@=Esc%0A%60&=!%0A1&=%2F@%0A2&=%23%0A3&=$%0A4&=%25%0A5&=%5E%0A6&=%2F&%0A7&=*%0A8&=(%0A9&=)%0A0&=%2F_%0A-&=+%0A%2F=&_x:0.25%3B&=%2F%2F&=*&=+%3B&@_w:1.5%3B&=Tab&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_x:0.25&w:1.25&h:2&w2:1.5&h2:1&x2:-0.25%3B&=Enter&_x:0.25%3B&=7&=8&=9%3B&@_w:1.75%3B&=Caps%20Lock&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F:%0A%2F%3B&_x:1.5%3B&=4&=5&=6%3B&@_w:1.25%3B&=Shift&=%7C%0A%5C&=Z&=X&=C&=V&=B&=N&=M&=%3C%0A,&_w:1.5%3B&=%3E%0A.&_x:1.5%3B&=1&=2&=3%3B&@_y:-0.75&x:12%3B&=%E2%86%91%3B&@_y:-0.25&w:1.25%3B&=Ctrl&_x:1&a:7&w:6.25%3B&=&_x:1&a:4&w:1.25%3B&=AltGr&_x:3.5%3B&=0&=.%3B&@_y:-0.75&x:11%3B&=%E2%86%90%0AFN&=%E2%86%93&=%E2%86%92%3B&@_y:0.25%3B&=%60&=F1&=F2&=F3&=F4&=F5&=F6&=F7&=F8&=F9&=F10&=F11&=F12&_x:0.25%3B&=NLock&=Print&=%2F=%3B&@_a:7&w:1.5%3B&=&=&=&=&=&=&=&=&=&=&_a:4%3B&=%2F%2F&_x:0.25&w:1.25&h:2&w2:1.5&h2:1&x2:-0.25%3B&=Del&_x:0.25%3B&=Home&=Up&=PgUp%3B&@_a:7&w:1.75%3B&=&=&=&=&=&=&=&=&=&=&_a:4%3B&='&_x:1.5%3B&=Left&=ScrLc&=Right%3B&@_a:7&w:1.25%3B&=&=&=&=&=&=&=&=&=&_a:4%3B&=%5B&_w:1.5%3B&=%5D&_x:1.5%3B&=End&=Down&=PgDn%3B&@_y:-0.75&x:12&a:7%3B&=%3B&@_y:-0.25&a:4&w:1.25%3B&=Win&_x:1&w:6.25%3B&=RAlt&_x:1&a:7&w:1.25%3B&=&_x:3.5%3B&=&_a:4%3B&=Rst%3B&@_y:-0.75&x:11&a:7%3B&=&=&=)

View file

@ -1,35 +0,0 @@
/* Copyright 2018 MechMerlin
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT_split_bs(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_INS, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
LAYOUT_split_bs(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, _______, _______, _______, _______, _______,
_______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DOWN, BL_UP, _______, _______
)
};

View file

@ -1,22 +0,0 @@
/*
Copyright 2021 Spencer Deven <splitlogicdesign@gmail.com>
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 3 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/>.
*/
#pragma once
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X32
#define OLED_TIMEOUT 400000
#endif

View file

@ -1,332 +0,0 @@
/*
Copyright 2021 Spencer Deven <splitlogicdesign@gmail.com>
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 3 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
enum sofle_layers {
/* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
_QWERTY,
_COLEMAK,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
KC_QWERTY = SAFE_RANGE,
KC_COLEMAK,
KC_LOWER,
KC_RAISE,
KC_ADJUST,
KC_PRVWD,
KC_NXTWD,
KC_LSTRT,
KC_LEND,
KC_DLINE
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_ADJUST, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_EQL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_GRV, KC_MUTE, RGB_TOG, KC_DEL,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
KC_LCTL, KC_LALT, KC_LGUI, LALT(KC_TAB), KC_LOWER, KC_SPC, KC_ENT, KC_ENT, KC_SPC, KC_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
[_LOWER] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NUM, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12,
KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NUM, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NUM,
_______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______,
_______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______
),
[_RAISE] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NUM, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12,
KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NUM, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NUM,
_______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______,
_______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______
),
[_ADJUST] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
_______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, KC_F12,
_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI,
_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD
)
};
#ifdef OLED_ENABLE
static void render_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,0
};
oled_write_P(qmk_logo, false);
}
static void print_status_narrow(void) {
// Print current mode
oled_write_P(PSTR("\n\n"), false);
oled_write_ln_P(PSTR("MODE"), false);
oled_write_ln_P(PSTR(""), false);
if (keymap_config.swap_lctl_lgui) {
oled_write_ln_P(PSTR("MAC"), false);
} else {
oled_write_ln_P(PSTR("WIN"), false);
}
switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
oled_write_ln_P(PSTR("Qwrt"), false);
break;
case _COLEMAK:
oled_write_ln_P(PSTR("Clmk"), false);
break;
default:
oled_write_P(PSTR("Undef"), false);
}
oled_write_P(PSTR("\n\n"), false);
// Print current layer
oled_write_ln_P(PSTR("LAYER"), false);
switch (get_highest_layer(layer_state)) {
case _COLEMAK:
case _QWERTY:
oled_write_P(PSTR("Base\n"), false);
break;
case _RAISE:
oled_write_P(PSTR("Raise"), false);
break;
case _LOWER:
oled_write_P(PSTR("Lower"), false);
break;
case _ADJUST:
oled_write_P(PSTR("Adj\n"), false);
break;
default:
oled_write_ln_P(PSTR("Undef"), false);
}
oled_write_P(PSTR("\n\n"), false);
led_t led_usb_state = host_keyboard_led_state();
oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
}
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master()) {
return OLED_ROTATION_90;
}
return rotation;
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
return false;
}
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
case KC_COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
case KC_LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
case KC_RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
case KC_ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
} else {
layer_off(_ADJUST);
}
return false;
case KC_PRVWD:
if (record->event.pressed) {
if (keymap_config.swap_lctl_lgui) {
register_mods(mod_config(MOD_LALT));
register_code(KC_LEFT);
} else {
register_mods(mod_config(MOD_LCTL));
register_code(KC_LEFT);
}
} else {
if (keymap_config.swap_lctl_lgui) {
unregister_mods(mod_config(MOD_LALT));
unregister_code(KC_LEFT);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_LEFT);
}
}
break;
case KC_NXTWD:
if (record->event.pressed) {
if (keymap_config.swap_lctl_lgui) {
register_mods(mod_config(MOD_LALT));
register_code(KC_RIGHT);
} else {
register_mods(mod_config(MOD_LCTL));
register_code(KC_RIGHT);
}
} else {
if (keymap_config.swap_lctl_lgui) {
unregister_mods(mod_config(MOD_LALT));
unregister_code(KC_RIGHT);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_RIGHT);
}
}
break;
case KC_LSTRT:
if (record->event.pressed) {
if (keymap_config.swap_lctl_lgui) {
//CMD-arrow on Mac, but we have CTL and GUI swapped
register_mods(mod_config(MOD_LCTL));
register_code(KC_LEFT);
} else {
register_code(KC_HOME);
}
} else {
if (keymap_config.swap_lctl_lgui) {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_LEFT);
} else {
unregister_code(KC_HOME);
}
}
break;
case KC_LEND:
if (record->event.pressed) {
if (keymap_config.swap_lctl_lgui) {
//CMD-arrow on Mac, but we have CTL and GUI swapped
register_mods(mod_config(MOD_LCTL));
register_code(KC_RIGHT);
} else {
register_code(KC_END);
}
} else {
if (keymap_config.swap_lctl_lgui) {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_RIGHT);
} else {
unregister_code(KC_END);
}
}
break;
case KC_DLINE:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_BSPC);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_BSPC);
}
break;
case KC_COPY:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_C);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_C);
}
return false;
case KC_PASTE:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_V);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_V);
}
return false;
case KC_CUT:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_X);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_X);
}
return false;
break;
case KC_UNDO:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_Z);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_Z);
}
return false;
}
return true;
}
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) {
if (clockwise) {
rgblight_step();
} else {
rgblight_step_reverse();
}
}
return true;
}
#endif

View file

@ -1 +0,0 @@
RGBLIGHT_ENABLE = yes

View file

@ -1,48 +0,0 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* TG1 / * -
*
* 7 8 9
* +
* 4 5 6
*
* 1 2 3
* Ent
* 0 .
*
*/
[0] = LAYOUT_numpad_5x4(
TG(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
),
/*
*
* TG1 / * -
*
* Hom PgU
* +
*
*
* End PgD
* Ent
* Insert Del
*
*/
[1] = LAYOUT_numpad_5x4(
_______, _______, _______, _______,
KC_HOME, KC_UP, KC_PGUP,
KC_LEFT, XXXXXXX, KC_RGHT, _______,
KC_END, KC_DOWN, KC_PGDN,
KC_INS, KC_DEL, _______
)
};

View file

@ -1,35 +0,0 @@
# Alpha 28-Key Keyboard Alternate Keymap
Alternate keymap for [Alpha 28-key keyboard](https://github.com/qmk/qmk_firmware/tree/master/keyboards/alpha).
## How-to
Assuming you've followed all the instructions from the original post, put my "keymap.c" file in "$qmk-firmware-folder$/keyboards/alpha/keymaps/vderm/" and then run your make command ("make alpha:vderm" while in $qmk-firmware-folder$ where this folder is what you've downloaded from the official github page) to compile the hex file to upload to your microcontroller. I've also uploaded my hex file.
## Description
Instead of going up and down layers like in the original Alpha keyboard, I've made the bottom row keys all have alternate functions:
+ Like in the original Alpha28 keymap, the 2U spacebar is a shift key when held down and space when tapped
+ Z and M are Ctrl keys when held down or Z and M when tapped
+ X and N are Alt keys
+ C activates the function keys layer (arrows, page up/dn, esc, tab, etc.)
+ V activates the characters and numbers layer
+ C and V combined activated the F-keys layer (F1, F2, F3, etc.)
+ The enter key is an enter key in the home layer, backspace in the function keys and characters/numbers layer and a delete in the F-keys layer
+ While in the other layers, the bottom row acts like a "regular" bottom modified row: ctrl, alt, winkey
## Keymap
![keymap](https://imgur.com/ZbDz0eL.jpg)
## Build Images
Here is my keyboard.
+ Switches: Aliaz Silent Switches (Tactile), PCB mount, 80g from [KBDfans](https://kbdfans.cn/collections/aliaz-switches/products/pre-orderaliaz-silent-switch-tactile?variant=2519899832333)
+ PCB board: ordered from JLCPCB, in white
+ Keycaps: ebay, can't find link :S
+ Bottom plate: I cut a piece of canary wood that was laying around, needs to be varnished; I also need to actually screw the pcb to the wood instead of relying on double-sided tape
![vderm_alpha0](https://imgur.com/MjjoVtr.jpg)
![vderm_alpha1](https://imgur.com/mIFu9WV.jpg)
![vderm_alpha2](https://imgur.com/A70Iemw.jpg)
![vderm_alpha3](https://imgur.com/eYljPWh.jpg)
![vderm_alpha4](https://imgur.com/OhUKowj.jpg)
Good luck on your build!
//vderm

View file

@ -1,34 +0,0 @@
#include QMK_KEYBOARD_H
#define HOME 0
#define FN 1
#define FNCHAR 2
#define FKEYS 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[HOME] = LAYOUT(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(1, KC_C), LT(2, KC_V), MT(MOD_LSFT, KC_SPC), MT(MOD_RGUI,KC_B), MT(MOD_RALT, KC_N), MT(MOD_RCTL, KC_M)),
[FN] = LAYOUT(
KC_ESC, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO,
KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
KC_LCTL, KC_LALT, KC_TRNS, MO(3), MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
[FNCHAR] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_GRV,KC_NO,KC_MINS,KC_EQL,KC_BSLS,KC_LBRC,KC_RBRC,KC_SCLN,KC_QUOT,KC_BSPC,
KC_LCTL, KC_LALT, MO(3), KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_COMM, KC_DOT, KC_SLSH),
[FKEYS] = LAYOUT(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11,KC_F12,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_DEL,
KC_LCTL, KC_LALT, KC_TRNS, KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}

View file

@ -1,30 +0,0 @@
#include QMK_KEYBOARD_H
enum keyboard_layers {
_BL = 0, // Base Layer
_FL // Function Layer
};
// Custom #defined keycodes (shorter macros for readability)
#define KC_CTES CTL_T(KC_ESC)
#define KC_RSUP RSFT_T(KC_UP)
#define KC_FNDN LT(_FL, KC_DOWN)
#define KC_RGLT RCMD_T(KC_LEFT)
#define KC_RCRT RCTL_T(KC_RIGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_aek_103(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
MO(_FL), KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_FNDN, KC_RCRT
),
[_FL] = LAYOUT_aek_103(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, QK_BOOT,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SCRL, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -1,40 +0,0 @@
/* Copyright 2021
*
* 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 names for use in layer keycodes and the keymap
enum layer_names {
BASE,
FN1
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT( /* Base Layer */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
MO(FN1), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_SPC
),
[FN1] = LAYOUT( /* Function Layer */
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
_______, RGB_TOG, RGB_VAI, RGB_MOD, RGB_HUI, _______,
_______, _______, RGB_VAD, RGB_RMOD,RGB_HUD, _______,
_______, _______, _______, _______, _______
),
};
// clang-format on

View file

@ -1,14 +0,0 @@
# QWERT Keymap for Koolertron AMAG23
## Additional Notes
QWERT keymap, based on the left hand of an ortholinear layout.
## Keymap
![AMAG23 QWERT Layout](https://i.imgur.com/fiDUo77.png)
## Build
To build the factory keymap, simply run:
make amag23:qwert

View file

@ -1,10 +0,0 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
#define TAPPING_TERM 25
#define RETRO_TAPPING
#define PERMISSIVE_HOLD
#endif

View file

@ -1,93 +0,0 @@
#include QMK_KEYBOARD_H
// Keymap myee
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
#define _ADJUST 3
#define LOW_SPC LT(_LOWER, KC_SPC)
#define RSE_SPC LT(_RAISE, KC_SPC)
#define ADJ_TAB LT(ADJUST, KC_TAB)
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
ADJUST,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
ADJ_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LCTL, KC_LGUI,KC_LALT, LOW_SPC, RSE_SPC, KC_RGUI,KC_RALT, KC_RCTL
),
[_LOWER] = LAYOUT(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_UP, KC_MINS, KC_EQL, KC_DEL,
_______, _______, KC_ASTR, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQUO, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSLS,
_______, _______, _______, KC_LPRN, KC_RPRN, KC_HOME, KC_PGUP, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT(
KC_GRV, KC_LPRN, KC_RPRN, KC_DQUO, KC_QUOT, KC_SCLN, KC_COLON,KC_UNDS, KC_PLUS, _______, _______, KC_BSPC,
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
_______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, BL_UP, BL_DOWN
),
[_ADJUST] = LAYOUT(
_______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_SYSTEM_SLEEP, _______, _______, _______, _______, _______, _______, _______
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
} else {
layer_off(_ADJUST);
}
return false;
break;
}
return true;
}

View file

@ -1,11 +0,0 @@
AMJ40 Default Layout
=====================
##Quantum MK Firmware
For the full Quantum feature list, see the parent readme.md.
# Features
* Based on a combination of the original AMJ40 keymap from the TMK firmware as well as the Planck Ortholinear keyboard's "Lower," "Raise," and "Adjust" layers.
* View the keymap.c file to understand they layout of the keymap.
* Has keys to toggle both the switch LEDs and underglow LEDs.

View file

@ -1,19 +0,0 @@
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend

View file

@ -1,4 +0,0 @@
#!/bin/bash
git checkout amj60 # gets you on branch amj60
git fetch origin # gets you up to date with origin
git merge origin/master

View file

@ -1,30 +0,0 @@
/*
Copyright 2022 an_achronism (@an-achronism)
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/>.
*/
#pragma once
#define RGB_TRIGGER_ON_KEYDOWN
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View file

@ -1,125 +0,0 @@
/*
Copyright 2022 an_achronism (@an-achronism)
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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Del
*
* Tab| Q W E | R T Y U I O P [ ] Bsp
*
* Ctl A S D F G H J K L ; ' UK#Rtn|
*
* Sft Z X C V B N M , . / Sft App|
*
* EscCtlAltGUIL_1SpcL_2|GUIAltCtl|UK\
*
*/
[0] = LAYOUT_ortho_5x14(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, RSFT_T(KC_APP),
KC_ESC, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_RGUI, KC_RALT, KC_RCTL, KC_NUBS, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ortho_5x14(
KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PEQL, _______, _______, _______, KC_PWR,
_______, _______, KC_UP, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_PAUS, KC_ESC, _______, KC_SLEP,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_CALC,
KC_CAPS, _______, _______, _______, _______, KC_PAUS, KC_P1, KC_P2, KC_P3, KC_PENT, _______, KC_CAPS, _______, _______,
_______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_ortho_5x14(
_______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MSTP,
_______, KC_F4, KC_F3, KC_F2, KC_F1, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, C(KC_BRK), KC_ESC, _______, _______,
_______, KC_F8, KC_F7, KC_F6, KC_F5, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_MPRV, KC_MNXT, KC_MPLY,
KC_CAPS, KC_F12, KC_F11, KC_F10, KC_F9, C(KC_BRK),_______, _______, _______, _______, _______, KC_CAPS, _______, KC_PSCR,
_______, _______, _______, _______, MO(3), _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_ortho_5x14(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
// Initialise RBG matrix with all LEDs set to solid colour and zero HSV (i.e. off):
void keyboard_post_init_user(void) {
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_OFF);
};
// Custom RGB indicator behaviour:
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
uint8_t led_processed_count = 0;
for (uint8_t row = 0; row < MATRIX_ROWS; ++row) {
for (uint8_t col = 0; col < MATRIX_COLS; ++col) {
if (led_processed_count == RGB_MATRIX_LED_PROCESS_LIMIT){
return;
}
uint8_t led_index = g_led_config.matrix_co[row][col];
uint16_t keycode = keymap_key_to_keycode(0, (keypos_t){col,row});
if (led_index >= led_min && led_index <= led_max && led_index != NO_LED) {
// Light base layer arrow keys orange if Scroll Lock is on, otherwise light them magenta:
led_processed_count++;
if (keycode >= KC_RIGHT && keycode <= KC_UP) {
if (host_keyboard_led_state().scroll_lock) {
rgb_matrix_set_color(led_index, RGB_ORANGE);
} else {
rgb_matrix_set_color(led_index, RGB_MAGENTA);
}
}
// Light alpha keys (A-Z only) red if Caps Lock is on:
if (host_keyboard_led_state().caps_lock && keycode >= KC_A && keycode <= KC_Z) {
rgb_matrix_set_color(led_index, RGB_RED);
}
// Whenever a layer above base is active, recolour only the keys that are different on that layer:
if (get_highest_layer(layer_state) > 0) {
uint8_t layer = get_highest_layer(layer_state);
uint16_t momentary_keycode = keymap_key_to_keycode(layer, (keypos_t){col,row});
if (momentary_keycode > KC_TRNS) {
switch(layer) {
case 2:
// The uppermost layer is blue:
rgb_matrix_set_color(led_index, RGB_BLUE);
break;
case 1:
// The middle layer is green, except that the numpad section turns
// orange when Num Lock is on:
if (host_keyboard_led_state().num_lock &&
(momentary_keycode == KC_KP_EQUAL ||
(momentary_keycode >= KC_NUM_LOCK && momentary_keycode <= KC_KP_DOT)
)) {
rgb_matrix_set_color(led_index, RGB_ORANGE);
} else {
rgb_matrix_set_color(led_index, RGB_GREEN);
}
break;
default:
break;
}
}
}
}
}
}
return false;
}

View file

@ -1,24 +0,0 @@
/* Copyright 2021 Leon Anavi <leon@anavi.org>
*
* 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/>.
*/
#pragma once
#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
#undef RGBLIGHT_EFFECT_KNIGHT
#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
#undef RGBLIGHT_EFFECT_RGB_TEST
#undef RGBLIGHT_EFFECT_ALTERNATING
#undef RGBLIGHT_EFFECT_TWINKLE

View file

@ -1,145 +0,0 @@
/* Copyright 2021 Leon Anavi <leon@anavi.org>
*
* 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
#define _MAIN 0
#define _FN 1
/*
* This keymap contains the following shortcuts for Git. On the
* first row from left to right:
*
* git status
* git log
* git pull
* git push
*
* On the second row from left to right:
*
* git diff
* git add
* git commit
* FN key to switch to the 2nd layout and control lights
*
*/
enum custom_keycodes {
GITCOMMIT = SAFE_RANGE,
GITPUSH,
GITPULL,
GITSTATUS,
GITDIFF,
GITLOG,
GITADD
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case GITCOMMIT:
if (record->event.pressed) {
SEND_STRING("git commit -s\n");
}
break;
case GITPUSH:
if (record->event.pressed) {
SEND_STRING("git push\n");
}
break;
case GITPULL:
if (record->event.pressed) {
SEND_STRING("git pull\n");
}
break;
case GITSTATUS:
if (record->event.pressed) {
SEND_STRING("git status\n");
}
break;
case GITDIFF:
if (record->event.pressed) {
SEND_STRING("git diff ");
}
break;
case GITLOG:
if (record->event.pressed) {
SEND_STRING("git log\n");
}
break;
case GITADD:
if (record->event.pressed) {
SEND_STRING("git add ");
}
break;
}
return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_ortho_2x4(
GITSTATUS, GITLOG, GITPULL, GITPUSH,
GITDIFF, GITADD, GITCOMMIT, MO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, _______
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _MAIN:
oled_write_ln_P(PSTR("Git"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,118 +0,0 @@
/* Copyright 2020 Leon Anavi <leon@anavi.org>
*
* 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
#define _SCH 0
#define _PCB 1
#define _FN 2
#define KC_X0 LT(_FN, KC_ESC)
#ifdef RGBLIGHT_ENABLE
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
#endif
/*
* The keymap contains 2 layers for KiCad hotkeys and a 3rd layer
* for controlling the backlighting and the underlighting.
*
* - Layer for KiCad Schematic hotkeys:
* m - to move selected component
* r - to rotate selected component
* w - to wire components
* v - to edit component value
* F1 - zoom in
* F2 - zoom out
* F4 - zoom center
*
* - Layer for KiCad PCB layout hotkets:
* m - to move selected component
* r - to rotate selected component
* x - to route a new track
* v - to add a via
* F1 - zoom in
* F2 - zoom out
* F4 - zoom center
*
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_SCH] = LAYOUT_ortho_2x4(
KC_M, KC_R, KC_W, KC_V,
KC_F1, KC_F2, KC_F4, TO(_PCB)
),
[_PCB] = LAYOUT_ortho_2x4(
KC_M, KC_R, KC_X, KC_V,
KC_F1, KC_F2, KC_F4, TO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, TO(_SCH)
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _SCH:
oled_write_ln_P(PSTR("KiCad Schema"), false);
break;
case _PCB:
oled_write_ln_P(PSTR("KiCad PCB"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN "), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,81 +0,0 @@
#include QMK_KEYBOARD_H
#define _MAIN 0
#define _FN 1
#define KC_X0 LT(_FN, KC_ESC)
#ifdef RGBLIGHT_ENABLE
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
#endif
/**
* Kodi shortcuts:
*
* ESC - Previous menu OR Home screen
* Enter - Select
* X - Stop
* Arrows to move
*
* For details have a look at:
* https://kodi.wiki/view/Keyboard_controls
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_ortho_2x4(
KC_ESC, KC_UP, KC_ENTER, KC_X,
KC_LEFT, KC_DOWN, KC_RIGHT, MO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, _______
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _MAIN:
oled_write_ln_P(PSTR("Kodi"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,98 +0,0 @@
/* Copyright 2020 Leon Anavi <leon@anavi.org>
*
* 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
#define _MAIN 0
#define _FN 1
#define KC_X0 LT(_FN, KC_ESC)
#ifdef RGBLIGHT_ENABLE
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
#endif
/*
* This keymap contains the following shortcuts for OBS:
*
* - Shortcuts useful for switching scenes on the 1st row:
* Hold Left Control, Shift, Alt and GUI and press F9
* Hold Left Control, Shift, Alt and GUI and press F10
* Hold Left Control, Shift, Alt and GUI and press F11
* Hold Left Control, Shift, Alt and GUI and press F12
* - Center to screen: Ctrl+D
* - Fit to screen: Ctrl+F
* - Move source to top of sources list: Ctrl+Home
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_ortho_2x4(
HYPR(KC_F9), HYPR(KC_F10), HYPR(KC_F11), HYPR(KC_F12),
LCTL(KC_D), LCTL(KC_F), LCTL(KC_HOME), MO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, _______
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _MAIN:
oled_write_ln_P(PSTR("OBS"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,139 +0,0 @@
/* Copyright 2021 Marc Nause <marc.nause@gmx.de>
*
* 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
enum custom_layers {
_PLAY,
_FRAME,
_DVD,
_FN
};
#define KC_X0 LT(_FN, KC_ESC)
#ifdef RGBLIGHT_ENABLE
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
#endif
/*
* The keymap contains 3 layers for vlc hotkeys and a 4th layer
* for controlling the backlighting and the underlighting.
*
* See https://wiki.videolan.org/QtHotkeys/ for VLC hotkeys
*
* - Layer for VLC media play hotkeys:
* Space - Play/pause
* P - Previous track
* S - Stop
* N - Next track
* + - Slower
* - - Faster
* = - Normal rate
*
* - Layer for VLC frame control hotkeys:
* Shift + right arrow - Jump 5 seconds forward
* Alt + right arrow - Jump 10 seconds forward
* Control + right arrow - Jump 1 minute forward
* E - Next frame
* Shift + left arrow - Jump 5 seconds back
* Alt + left arrow - Jump 10 seconds back
* Control + left arrow - Jump 1 minute back
*
* - Layer for VLC DVD hotkeys:
* Shift + M - Disc menu
* Arrow up - Navigate menu (up)
* Enter - Select menu entry
* Shift + V - Toggle subtitles
* Arrow left - Navigate menu (left)
* Arrow down - Navigate menu (down)
* Arrow right - Navigate menu (right)
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_PLAY] = LAYOUT_ortho_2x4(
KC_SPC, KC_P, KC_S, KC_N,
KC_KP_PLUS, KC_KP_MINUS, KC_KP_EQUAL, TO(_FRAME)
),
[_FRAME] = LAYOUT_ortho_2x4(
LSFT(KC_RIGHT), LALT(KC_RIGHT), LCTL(KC_RIGHT), KC_E,
LSFT(KC_LEFT), LALT(KC_LEFT), LCTL(KC_LEFT), TO(_DVD)
),
[_DVD] = LAYOUT_ortho_2x4(
LSFT(KC_M), KC_UP, KC_ENTER, LSFT(KC_V),
KC_LEFT, KC_DOWN, KC_RIGHT, TO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, TO(_PLAY)
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _PLAY:
oled_write_ln_P(PSTR("VLC Play"), false);
break;
case _FRAME:
oled_write_ln_P(PSTR("VLC Frame"), false);
break;
case _DVD:
oled_write_ln_P(PSTR("VLC DVD"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN "), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,19 +0,0 @@
/* Copyright 2021 QMK
*
* 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/>.
*/
#pragma once
#define LAYER_STATE_8BIT

View file

@ -1,227 +0,0 @@
/* Copyright 2022 Efthimis Iosifidis <iosifidise@gmail.com>
*
* 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
enum layers {
_BASIC,
_BRACKETS,
_SELECTORS,
_FN,
};
#define KC_X0 LT(_FN, KC_ESC)
static char current_alpha_oled [12] = "None";
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BASIC Layer
* ,-------------------------------------.
* | Toggle | Toggle | | |
* | Block | Line | Undo | Search |
* | Comment | Comment | | |
* |---------+---------+--------+---------+
* | | | | TO |
* | Cut | Copy | Paste | _BASIC |
* | | | | |
* `-------------------------------------'
*/
[_BASIC] = LAYOUT_ortho_2x4(
RCS(KC_A), LCTL(KC_SLASH), LCTL(KC_Z), LCTL(KC_F),
LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), TO(_BRACKETS)
),
/* _BRACKETS Layer
* ,-----------------------------------------.
* | | | | |
* | ( | [ | { | Bksp |
* | | | | |
* |---------+---------+--------+------------+
* | | | | TO |
* | Del | Copy | Paste | _SELECTORS |
* | | | | |
* `----------------------------------------'
*/
[_BRACKETS] = LAYOUT_ortho_2x4(
S(KC_9), KC_LBRC, S(KC_LBRC), KC_BACKSPACE,
KC_DEL, C(KC_C), C(KC_V), TO(_SELECTORS)
),
/* _SELECTORS Layer
* ,-------------------------------------.
* | | | | |
* | Select | Save | Undo | Bksp |
* | All | | | |
* |---------+---------+--------+---------+
* | | | | TO |
* | Cut | Copy | Paste | _FN |
* | | | | |
* `-------------------------------------'
*/
[_SELECTORS] = LAYOUT_ortho_2x4(
C(KC_A), C(KC_S), C(KC_Z), KC_BACKSPACE,
C(KC_X), C(KC_C), C(KC_V), TO(_FN)
),
/* _FN Layer
* ,--------------------------------------------.
* | RGB | RGB | RGB | RGB |
* | Toggle | Mode | Mode | Snake |
* | | Forward | Reverse | Mode |
* |-----------+-----------+-----------+---------+
* | | Cycle | Toggle | TO |
* | BackLight | BackLight | BackLight | _BASIC |
* | Toggle | Levels | Breathing | |
* `--------------------------------------------'
*/
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, TO(_BASIC)
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
char string [33];
switch(keycode)
{
//First Layer with Basic Keys
case LCTL(KC_X):
strncpy(current_alpha_oled, "Cut", sizeof(current_alpha_oled));
break;
case LCTL(KC_F):
strncpy(current_alpha_oled, "Search", sizeof(current_alpha_oled));
break;
case LCTL(KC_Z):
strncpy(current_alpha_oled, "Undo", sizeof(current_alpha_oled));
break;
case LCTL(KC_C):
strncpy(current_alpha_oled, "Copy", sizeof(current_alpha_oled));
break;
case LCTL(KC_V):
strncpy(current_alpha_oled, "Paste", sizeof(current_alpha_oled));
break;
case RCS(KC_A):
strncpy(current_alpha_oled, "Block cmt.", sizeof(current_alpha_oled));
break;
case LCTL(KC_SLASH):
strncpy(current_alpha_oled, "Line cmt.", sizeof(current_alpha_oled));
break;
//Second Layer with Brackets
case S(KC_9):
strncpy(current_alpha_oled, "()", sizeof(current_alpha_oled));
break;
case KC_LBRC:
strncpy(current_alpha_oled, "[]", sizeof(current_alpha_oled));
break;
case S(KC_LBRC):
strncpy(current_alpha_oled, "{}", sizeof(current_alpha_oled));
break;
case KC_BACKSPACE:
strncpy(current_alpha_oled, "Backspace", sizeof(current_alpha_oled));
break;
case KC_DEL:
strncpy(current_alpha_oled, "Del", sizeof(current_alpha_oled));
break;
// Selector Layer keys
case C(KC_A):
strncpy(current_alpha_oled, "Select All", sizeof(current_alpha_oled));
break;
case C(KC_S):
strncpy(current_alpha_oled, "Save", sizeof(current_alpha_oled));
break;
// FN Layer keys
case RGB_TOG:
strncpy(current_alpha_oled, "RGB Toggle", sizeof(current_alpha_oled));
break;
case RGB_MOD:
strncpy(current_alpha_oled, "RGB Fwd", sizeof(current_alpha_oled));
break;
case RGB_M_R:
strncpy(current_alpha_oled, "RGB Rev", sizeof(current_alpha_oled));
break;
case RGB_MODE_SNAKE:
strncpy(current_alpha_oled, "RGB Snk", sizeof(current_alpha_oled));
break;
case BL_TOGG:
strncpy(current_alpha_oled, "BkLgt Tog", sizeof(current_alpha_oled));
break;
case BL_STEP:
strncpy(current_alpha_oled, "BkLgt Lvl", sizeof(current_alpha_oled));
break;
case BL_BRTG:
strncpy(current_alpha_oled, "BkLgt Brth", sizeof(current_alpha_oled));
break;
//FN Key keycodes
case TO(_BASIC) ... TO(_FN):
strncpy(current_alpha_oled, "Switcher", sizeof(current_alpha_oled));
break;
default:
strncpy(current_alpha_oled, itoa(keycode, string, 10), sizeof(current_alpha_oled));
break;
}
}
return true;
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _BASIC:
oled_write_ln_P(PSTR("Basic"), false);
break;
case _BRACKETS:
oled_write_ln_P(PSTR("Brkts"), false);
break;
case _SELECTORS:
oled_write_ln_P(PSTR("Selct"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Last Key: "), false);
oled_write_ln(current_alpha_oled, false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,97 +0,0 @@
/* Copyright 2020 Leon Anavi <leon@anavi.org>
*
* 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
#define _MAIN 0
#define _FN 1
#define KC_X0 LT(_FN, KC_ESC)
#ifdef RGBLIGHT_ENABLE
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
#endif
/*
* The keymap contains the following shortcuts for Zoom meeting:
*
* Alt+V: Start/stop video
* Alt+A: Mute/unmute my audio
* Alt+M: Mute/unmute audio for everyone except the host
* Alt+S: Start/stop screen sharing
* Alt+R: Start/stop local recording
* Alt+P: Pause/resume recording
* Alt+C: Start/stop cloud recording
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_ortho_2x4(
LALT(KC_V), LALT(KC_A), LALT(KC_M), LALT(KC_S),
LALT(KC_R), LALT(KC_P), LALT(KC_C), MO(_FN)
),
[_FN] = LAYOUT_ortho_2x4(
RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
BL_TOGG, BL_STEP, BL_BRTG, _______
)
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
bool oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
oled_write_P(PSTR("Active layer: "), false);
switch (get_highest_layer(layer_state)) {
case _MAIN:
oled_write_ln_P(PSTR("Zoom"), false);
break;
case _FN:
oled_write_ln_P(PSTR("FN"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("N/A"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Backlit: "), false);
oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View file

@ -1,38 +0,0 @@
/*
Copyright 2020 aholland909
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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_iso_wkl(
QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUSE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
LT(1,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_RGUI, TG(1), KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_tkl_iso_wkl(
QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, _______,
_______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
_______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
_______, _______, KC_MPLY, _______, _______, RGB_SAD, RGB_HUD, RGB_VAI),
};

View file

@ -1,67 +0,0 @@
/* Copyright 2019 Fate
*
* 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
enum arisu_layers {
_QWERTY,
_FN,
_ADJUST
};
// Tap Dance Declarations
enum {
TD_LALT_LGUI = 0,
TD_RALT_RGUI
};
#define FN MO(_FN)
#define ADJUST MO(_ADJUST)
#define LALT_LG TD(TD_LALT_LGUI)
#define RALT_RG TD(TD_RALT_RGUI)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, ADJUST,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, LALT_LG, KC_SPC, FN, KC_SPC, RALT_RG, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, KC_DEL, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_APP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
_______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, KC_VOLU,
_______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
)
};
// Tap Dance Definitions
tap_dance_action_t tap_dance_actions[] = {
// Tap once for L-Alt, twice for L-GUI
[TD_LALT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_LGUI),
// Tap once for R-Alt, twice for R-GUI
[TD_RALT_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_RGUI)
};

View file

@ -1 +0,0 @@
# The keymap of arisu's creator

View file

@ -1 +0,0 @@
TAP_DANCE_ENABLE = yes

View file

@ -1,39 +0,0 @@
/* Copyright 2019 Fate
*
* 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
#define FN MO(1)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, FN,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_HOME,
_______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, KC_END,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_BSLS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -1,33 +0,0 @@
/* Copyright 2022 Yiancar / Keyboard-Magpie
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUBS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
KC_LCAP, KC_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_LEFT, KC_RGHT, KC_DOWN, KC_UP
),
[1] = LAYOUT( /* Momentary Layer 1 */
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_TOG,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
),
};

View file

@ -1 +0,0 @@
# The IIc keymap for the ASK55

View file

@ -1,33 +0,0 @@
/* Copyright 2022 Yiancar / Keyboard-Magpie
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUBS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
KC_LCAP, KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_ENT, KC_LEFT, KC_RGHT, KC_DOWN, KC_UP
),
[1] = LAYOUT( /* Momentary Layer 1 */
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_TOG,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
),
};

View file

@ -1 +0,0 @@
# The Mac Portable keymap for the ASK55

View file

@ -1,33 +0,0 @@
/* Copyright 2022 Yiancar / Keyboard-Magpie
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUBS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
KC_LALT, KC_LGUI, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_RGUI, KC_RGUI, KC_RALT
),
[1] = LAYOUT( /* Momentary Layer 1 */
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_TOG,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
),
};

View file

@ -1 +0,0 @@
# The NeXT (both) keymaps for the ASK55

View file

@ -1,49 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer: numpad + volume control
[0] = LAYOUT(
KC_MUTE,
TO(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,
KC_KP_4, KC_KP_5, KC_KP_6,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,
KC_KP_0, KC_PDOT
),
[1] = LAYOUT(
KC_MUTE,
TO(2), XXXXXXX, XXXXXXX, KC_VOLD,
XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
KC_MRWD, KC_MPLY, KC_MFFD,
KC_MPRV, KC_MSTP, KC_MNXT, KC_MSEL,
XXXXXXX, XXXXXXX
),
[2] = LAYOUT(
RGB_MOD,
TO(3), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS,
TO(0), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[2] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
[3] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
};
#endif

View file

@ -1 +0,0 @@
ENCODER_MAP_ENABLE = yes

View file

@ -1,19 +0,0 @@
#include QMK_KEYBOARD_H
#include "keymap_colemak.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_5x15(/* Colemak */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, XXXXXXX,
KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, XXXXXXX, KC_PGUP,
KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, XXXXXXX, KC_LALT, MO(1), KC_SPC, XXXXXXX, KC_RALT, MO(1), KC_RGUI, XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ortho_5x15(/* function */
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, XXXXXXX,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_MPLY,
_______, _______, XXXXXXX, _______, MO(1), _______, XXXXXXX, _______, MO(1), _______, XXXXXXX, _______, KC_MPRV, KC_VOLD, KC_MNXT
),
};

View file

@ -1,25 +0,0 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_5x15( /* Dvorak */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, XXXXXXX,
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL,
KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, XXXXXXX, KC_PGUP,
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
KC_LCTL, MO(1), XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, MO(2), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_ortho_5x15( /* Qwerty + F keys */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, XXXXXXX,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_INS, KC_DEL,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
KC_LCTL, _______, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
),
[2] = LAYOUT_ortho_5x15( /* Numpad + qwerty shortcut keys */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, XXXXXXX,
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_P4, KC_P5, KC_P6, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL,
KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_P1, KC_P2, KC_P3, KC_S, KC_MINS, KC_ENT, XXXXXXX, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_X, KC_B, KC_P0, KC_P0, KC_PENT, KC_Z, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
KC_LCTL, _______, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
),
};

View file

@ -1,46 +0,0 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY - MIT ENHANCED / GRID COMPATIBLE
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
* | LCTRL1 | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 6.25u ---------+--------+--------+--------+--------+-----------------+--------+--------|
* | BRITE | LALT | FN | XXXXXX . SPACE | RCTRL | RALT | FN | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[0] = LAYOUT_ortho_5x15( /* QWERTY */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN,
BL_STEP, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
/* FUNCTION
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
* | GRV | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
* | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | NUM LK | | | | | | | | INSERT | END1 | HOME | XXXXXX . | MOUS U | WHEEL- |
* |--------+--------+--------+--------+--------+- 6.25 ------------+--------+--------+------+--------+-----------------+--------+--------|
* | | | FN | XXXXXX . MS BT1 | | | FN | MOUS L | MOUS D | MOUS R |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[1] = LAYOUT_ortho_5x15( /* FUNCTION LAYER*/
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
KC_SCRL, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR,
KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_WH_U,
KC_NUM, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_END, KC_HOME, _______, _______, KC_MS_U, KC_WH_D,
_______, _______, MO(1), _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, MO(1), KC_MS_L, KC_MS_D, KC_MS_R
),
};

View file

@ -1,41 +0,0 @@
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _RS 1
#define _LW 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = LAYOUT( /* Qwerty */
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT
),
/*
* ! @ up { } || pgup 7 8 9 *
* # left down right $ || pgdn 4 5 6 +
* [ ] ( ) & || ` 1 2 3 \
* lower insert super shift del ctrl || alt space fn . 0 =
*/
[_RS] = LAYOUT( /* [> RAISE <] */
KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_DEL, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
/*
* insert home mup end pgup || mouse1 F7 F8 F9 F10
* USB mlft mdwn mrght pgdn || mouse2 F4 F5 F6 F11
* Blue volup reset || mouse3 F1 F2 F3 F12
* auto voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
*/
[_LW] = LAYOUT( /* [> LOWER <] */
KC_INS, KC_HOME, KC_MS_U, KC_END, KC_PGUP, KC_BTN1, KC_F7, KC_F8, KC_F9, KC_F10 ,
OU_USB, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, KC_BTN2, KC_F4, KC_F5, KC_F6, KC_F11 ,
OU_BT, KC_VOLU, KC_NO, KC_NO, QK_BOOT, KC_BTN3, KC_F1, KC_F2, KC_F3, KC_F12 ,
OU_AUTO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SCRL, KC_PAUS )
};

View file

@ -1 +0,0 @@
BLUETOOTH_ENABLE=yes

View file

@ -1,32 +0,0 @@
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _RS 1
#define _LW 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = LAYOUT( /* Qwerty */
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT
),
[_RS] = LAYOUT( /* [> RAISE <] */
KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS ,
TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL
),
[_LW] = LAYOUT( /* [> LOWER <] */
KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12 ,
KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, QK_BOOT
),
};

View file

@ -1,6 +0,0 @@
#pragma once
// place overrides here
/* Make Overloaded Keys switch faster */
#define TAPPING_TERM 150

Some files were not shown because too many files have changed in this diff Show more