Remove obvious user keymaps, keyboards/a*
edition. (#22692)
This commit is contained in:
parent
9539f135d8
commit
f25226453f
@ -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
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
@ -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;
|
||||
}
|
@ -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.
|
@ -1,5 +0,0 @@
|
||||
UNICODE_ENABLE = no
|
||||
UNICODEMAP_ENABLE = yes
|
||||
#CONSOLE_ENABLE = yes
|
||||
|
||||
SRC += flow.c
|
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
@ -1 +0,0 @@
|
||||
SRC += oneshot.c
|
@ -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;
|
||||
}
|
@ -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.
|
@ -1 +0,0 @@
|
||||
UNICODEMAP_ENABLE = yes
|
@ -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
|
@ -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;
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
# My keymap
|
||||
|
||||
This was used for testing lights but will become my personal keymap
|
@ -1 +0,0 @@
|
||||
BACKLIGHT_ENABLE = yes
|
@ -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
|
||||
),
|
||||
};
|
@ -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, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
@ -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();
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
VIA_ENABLE = yes
|
@ -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
|
||||
};
|
@ -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).
|
@ -1 +0,0 @@
|
||||
TAP_DANCE_ENABLE = yes
|
@ -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
|
@ -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;
|
||||
}
|
@ -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
|
@ -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
|
@ -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).*
|
@ -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
|
@ -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
|
@ -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;
|
||||
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
WPM_ENABLE = yes
|
||||
SPACE_CADET_ENABLE = no
|
||||
MAGIC_ENABLE = no
|
||||
ENCODER_MAP_ENABLE = yes
|
@ -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;
|
||||
}
|
@ -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).*
|
@ -1,6 +0,0 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
WPM_ENABLE = yes
|
||||
SPACE_CADET_ENABLE = no
|
||||
MAGIC_ENABLE = no
|
||||
ENCODER_MAP_ENABLE = yes
|
@ -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
|
@ -1,4 +0,0 @@
|
||||
VIA_ENABLE = yes
|
||||
HAPTIC_ENABLE = yes
|
||||
HAPTIC_DRIVER = solenoid
|
||||
ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
|
@ -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
|
||||
)
|
||||
|
||||
};
|
@ -1 +0,0 @@
|
||||
# Solenoid keymap for Shisaku
|
@ -1,4 +0,0 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
HAPTIC_ENABLE = yes
|
||||
HAPTIC_DRIVER = solenoid
|
@ -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)
|
||||
// └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
|
||||
)
|
||||
|
||||
};
|
@ -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;
|
||||
}
|
@ -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.
|
@ -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, _______
|
||||
)
|
||||
};
|
@ -1,3 +0,0 @@
|
||||
# crd's keymap for equinox
|
||||
|
||||
[KLE](http://www.keyboard-layout-editor.com/#/gists/0be9c4a916dba80ebb5533cd00c5304c)
|
@ -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
|
@ -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
|
||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||
),
|
||||
};
|
@ -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`
|
@ -1,2 +0,0 @@
|
||||
BACKLIGHT_ENABLE = no # Disable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Disable keyboard RGB underglow
|
@ -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
|
||||
)
|
||||
};
|
@ -1,3 +0,0 @@
|
||||
# The ai03 keymap for Quasar
|
||||
|
||||
Focuses functionality mainly into the 60% cluster.
|
@ -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),
|
||||
};
|
||||
|
@ -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&=&=&=)
|
@ -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, _______, _______
|
||||
)
|
||||
};
|
@ -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
|
@ -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
|
@ -1 +0,0 @@
|
||||
RGBLIGHT_ENABLE = yes
|
@ -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, _______
|
||||
)
|
||||
};
|
@ -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
|
@ -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) {
|
||||
}
|
@ -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, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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;
|
||||
}
|
@ -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.
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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|
|
||||
* ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
||||
* │Esc│Ctl│Alt│GUI│L_1│Spc│L_2|GUI│Alt│Ctl|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;
|
||||
}
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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),
|
||||
};
|
@ -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)
|
||||
};
|
@ -1 +0,0 @@
|
||||
# The keymap of arisu's creator
|
@ -1 +0,0 @@
|
||||
TAP_DANCE_ENABLE = yes
|
@ -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, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
@ -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
|
||||
),
|
||||
};
|
@ -1 +0,0 @@
|
||||
# The IIc keymap for the ASK55
|
@ -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
|
||||
),
|
||||
};
|
@ -1 +0,0 @@
|
||||
# The Mac Portable keymap for the ASK55
|
@ -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
|
||||
),
|
||||
};
|
@ -1 +0,0 @@
|
||||
# The NeXT (both) keymaps for the ASK55
|
@ -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
|
@ -1 +0,0 @@
|
||||
ENCODER_MAP_ENABLE = yes
|
@ -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
|
||||
),
|
||||
};
|
@ -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
|
||||
),
|
||||
};
|
@ -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
|
||||
),
|
||||
};
|
@ -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 )
|
||||
};
|
@ -1 +0,0 @@
|
||||
BLUETOOTH_ENABLE=yes
|
@ -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
|
||||
),
|
||||
};
|
@ -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
Loading…
Reference in New Issue
Block a user