MAGIC functionality, AG swap in default layout
This commit is contained in:
parent
5f648b6c40
commit
ab19ebd08a
|
@ -1,34 +1,2 @@
|
||||||
# The Default Planck Layout
|
# The Default Planck Layout
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[_QW] = { /* Qwerty */
|
|
||||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
|
||||||
{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 },
|
|
||||||
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
|
||||||
},
|
|
||||||
[_CM] = { /* Colemak */
|
|
||||||
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
|
|
||||||
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
|
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
|
|
||||||
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
|
||||||
},
|
|
||||||
[_DV] = { /* Dvorak */
|
|
||||||
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
|
|
||||||
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
|
|
||||||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
|
|
||||||
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
|
||||||
},
|
|
||||||
[_RS] = { /* RAISE */
|
|
||||||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
|
|
||||||
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
|
||||||
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
|
|
||||||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
|
||||||
},
|
|
||||||
[_LW] = { /* LOWER */
|
|
||||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
|
|
||||||
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
|
||||||
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
|
|
||||||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -130,7 +130,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# change to "no" to disable the options, or define them in the makefile.mk in
|
# change to "no" to disable the options, or define them in the makefile.mk in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
|
|
@ -153,9 +153,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | | Reset| | | | | | | | | | Del |
|
* | | Reset| | | | | | | | | | Del |
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* | | | |Audoff|Aud on| | |Qwerty|Colemk|Dvorak| | |
|
* | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|
||||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
* | | | | | | | | | | | | |
|
* | | | |Musoff|Mus on| | | | | | | |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | | | | | | | | | | | |
|
* | | | | | | | | | | | |
|
||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
@ -163,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_ADJUST] = {
|
[_ADJUST] = {
|
||||||
{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
|
||||||
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
|
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
|
||||||
{_______, _______, _______, AUD_ON, AUD_OFF, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______},
|
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
|
||||||
{_______, _______, _______, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
|
{_______, _______, _______, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
},
|
},
|
||||||
|
@ -231,6 +231,10 @@ float tone_music[][2] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void persistant_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_write_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
|
@ -240,8 +244,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
play_notes(&tone_qwerty, 4, false);
|
play_notes(&tone_qwerty, 4, false);
|
||||||
#endif
|
#endif
|
||||||
eeconfig_write_default_layer(1UL<<_QWERTY);
|
persistant_default_layer_set(1UL<<_QWERTY);
|
||||||
default_layer_set(1UL<<_QWERTY);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _COLEMAK:
|
case _COLEMAK:
|
||||||
|
@ -249,8 +252,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
play_notes(&tone_colemak, 6, false);
|
play_notes(&tone_colemak, 6, false);
|
||||||
#endif
|
#endif
|
||||||
eeconfig_write_default_layer(1UL<<_COLEMAK);
|
persistant_default_layer_set(1UL<<_COLEMAK);
|
||||||
default_layer_set(1UL<<_COLEMAK);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _DVORAK:
|
case _DVORAK:
|
||||||
|
@ -258,8 +260,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
play_notes(&tone_dvorak, 8, false);
|
play_notes(&tone_dvorak, 8, false);
|
||||||
#endif
|
#endif
|
||||||
eeconfig_write_default_layer(1UL<<_DVORAK);
|
persistant_default_layer_set(1UL<<_DVORAK);
|
||||||
default_layer_set(1UL<<_DVORAK);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _LOWER:
|
case _LOWER:
|
||||||
|
|
|
@ -27,6 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "keymap_midi.h"
|
#include "keymap_midi.h"
|
||||||
#include "bootloader.h"
|
#include "bootloader.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
|
@ -47,120 +49,9 @@ action_t action_for_key(uint8_t layer, keypos_t key)
|
||||||
// 16bit keycodes - important
|
// 16bit keycodes - important
|
||||||
uint16_t keycode = keymap_key_to_keycode(layer, key);
|
uint16_t keycode = keymap_key_to_keycode(layer, key);
|
||||||
|
|
||||||
if (keycode >= 0x0100 && keycode < 0x2000) {
|
|
||||||
// Has a modifier
|
|
||||||
action_t action;
|
|
||||||
// Split it up
|
|
||||||
action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
|
|
||||||
return action;
|
|
||||||
} else if (keycode >= 0x2000 && keycode < 0x3000) {
|
|
||||||
// Is a shortcut for function layer, pull last 12bits
|
|
||||||
// This means we have 4,096 FN macros at our disposal
|
|
||||||
return keymap_func_to_action(keycode & 0xFFF);
|
|
||||||
} else if (keycode >= 0x3000 && keycode < 0x4000) {
|
|
||||||
// When the code starts with 3, it's an action macro.
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_MACRO(keycode & 0xFF);
|
|
||||||
return action;
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
} else if (keycode >= BL_0 && keycode <= BL_15) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
|
|
||||||
return action;
|
|
||||||
} else if (keycode == BL_DEC) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_BACKLIGHT_DECREASE();
|
|
||||||
return action;
|
|
||||||
} else if (keycode == BL_INC) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_BACKLIGHT_INCREASE();
|
|
||||||
return action;
|
|
||||||
} else if (keycode == BL_TOGG) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_BACKLIGHT_TOGGLE();
|
|
||||||
return action;
|
|
||||||
} else if (keycode == BL_STEP) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_BACKLIGHT_STEP();
|
|
||||||
return action;
|
|
||||||
#endif
|
|
||||||
} else if (keycode == RESET) { // RESET is 0x5000, which is why this is here
|
|
||||||
action_t action;
|
|
||||||
clear_keyboard();
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
play_notes(&goodbye, 3, false);
|
|
||||||
#endif
|
|
||||||
_delay_ms(250);
|
|
||||||
#ifdef ATREUS_ASTAR
|
|
||||||
*(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
|
|
||||||
#endif
|
|
||||||
bootloader_jump();
|
|
||||||
return action;
|
|
||||||
} else if (keycode == DEBUG) { // DEBUG is 0x5001
|
|
||||||
// TODO: Does this actually work?
|
|
||||||
action_t action;
|
|
||||||
print("\nDEBUG: enabled.\n");
|
|
||||||
debug_enable = true;
|
|
||||||
return action;
|
|
||||||
} else if (keycode >= 0x5000 && keycode < 0x6000) {
|
|
||||||
// Layer movement shortcuts
|
|
||||||
// See .h to see constraints/usage
|
|
||||||
int type = (keycode >> 0x8) & 0xF;
|
|
||||||
if (type == 0x1) {
|
|
||||||
// Layer set "GOTO"
|
|
||||||
int when = (keycode >> 0x4) & 0x3;
|
|
||||||
int layer = keycode & 0xF;
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_LAYER_SET(layer, when);
|
|
||||||
return action;
|
|
||||||
} else if (type == 0x2) {
|
|
||||||
// Momentary layer
|
|
||||||
int layer = keycode & 0xFF;
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_LAYER_MOMENTARY(layer);
|
|
||||||
return action;
|
|
||||||
} else if (type == 0x3) {
|
|
||||||
// Set default layer
|
|
||||||
int layer = keycode & 0xFF;
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_DEFAULT_LAYER_SET(layer);
|
|
||||||
return action;
|
|
||||||
} else if (type == 0x4) {
|
|
||||||
// Set default layer
|
|
||||||
int layer = keycode & 0xFF;
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_LAYER_TOGGLE(layer);
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
#ifdef MIDI_ENABLE
|
|
||||||
} else if (keycode >= 0x6000 && keycode < 0x7000) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8);
|
|
||||||
return action;
|
|
||||||
#endif
|
|
||||||
} else if (keycode >= 0x7000 && keycode < 0x8000) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
|
|
||||||
return action;
|
|
||||||
} else if (keycode >= 0x8000 && keycode < 0x9000) {
|
|
||||||
action_t action;
|
|
||||||
action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
|
|
||||||
return action;
|
|
||||||
#ifdef UNICODE_ENABLE
|
|
||||||
} else if (keycode >= 0x8000000) {
|
|
||||||
action_t action;
|
|
||||||
uint16_t unicode = keycode & ~(0x8000);
|
|
||||||
action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8);
|
|
||||||
return action;
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case KC_FN0 ... KC_FN31:
|
case KC_FN0 ... KC_FN31:
|
||||||
return keymap_fn_to_action(keycode);
|
return keymap_fn_to_action(keycode);
|
||||||
#ifdef BOOTMAGIC_ENABLE
|
|
||||||
case KC_CAPSLOCK:
|
case KC_CAPSLOCK:
|
||||||
case KC_LOCKING_CAPS:
|
case KC_LOCKING_CAPS:
|
||||||
if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
|
if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
|
||||||
|
@ -224,7 +115,6 @@ action_t action_for_key(uint8_t layer, keypos_t key)
|
||||||
return keycode_to_action(KC_BSLASH);
|
return keycode_to_action(KC_BSLASH);
|
||||||
}
|
}
|
||||||
return keycode_to_action(KC_BSPACE);
|
return keycode_to_action(KC_BSPACE);
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
return keycode_to_action(keycode);
|
return keycode_to_action(keycode);
|
||||||
}
|
}
|
||||||
|
@ -265,6 +155,142 @@ static action_t keycode_to_action(uint16_t keycode)
|
||||||
case KC_TRNS:
|
case KC_TRNS:
|
||||||
action.code = ACTION_TRANSPARENT;
|
action.code = ACTION_TRANSPARENT;
|
||||||
break;
|
break;
|
||||||
|
case 0x0100 ... 0x1FFF: ;
|
||||||
|
// Has a modifier
|
||||||
|
// Split it up
|
||||||
|
action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
|
||||||
|
break;
|
||||||
|
case 0x2000 ... 0x2FFF:
|
||||||
|
// Is a shortcut for function layer, pull last 12bits
|
||||||
|
// This means we have 4,096 FN macros at our disposal
|
||||||
|
return keymap_func_to_action(keycode & 0xFFF);
|
||||||
|
break;
|
||||||
|
case 0x3000 ... 0x3FFF: ;
|
||||||
|
// When the code starts with 3, it's an action macro.
|
||||||
|
action.code = ACTION_MACRO(keycode & 0xFF);
|
||||||
|
break;
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
case BL_0 ... BL_15:
|
||||||
|
action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
|
||||||
|
break;
|
||||||
|
case BL_DEC:
|
||||||
|
action.code = ACTION_BACKLIGHT_DECREASE();
|
||||||
|
break;
|
||||||
|
case BL_INC:
|
||||||
|
action.code = ACTION_BACKLIGHT_INCREASE();
|
||||||
|
break;
|
||||||
|
case BL_TOGG:
|
||||||
|
action.code = ACTION_BACKLIGHT_TOGGLE();
|
||||||
|
break;
|
||||||
|
case BL_STEP:
|
||||||
|
action.code = ACTION_BACKLIGHT_STEP();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case RESET: ; // RESET is 0x5000, which is why this is here
|
||||||
|
clear_keyboard();
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
play_notes(&goodbye, 3, false);
|
||||||
|
#endif
|
||||||
|
_delay_ms(250);
|
||||||
|
#ifdef ATREUS_ASTAR
|
||||||
|
*(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
|
||||||
|
#endif
|
||||||
|
bootloader_jump();
|
||||||
|
break;
|
||||||
|
case DEBUG: ; // DEBUG is 0x5001
|
||||||
|
print("\nDEBUG: enabled.\n");
|
||||||
|
debug_enable = true;
|
||||||
|
break;
|
||||||
|
case 0x5002 ... 0x50FF:
|
||||||
|
// MAGIC actions (BOOTMAGIC without the boot)
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
/* keymap config */
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) {
|
||||||
|
keymap_config.swap_control_capslock = 1;
|
||||||
|
} else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) {
|
||||||
|
keymap_config.capslock_to_control = 1;
|
||||||
|
} else if (keycode == MAGIC_SWAP_LALT_LGUI) {
|
||||||
|
keymap_config.swap_lalt_lgui = 1;
|
||||||
|
} else if (keycode == MAGIC_SWAP_RALT_RGUI) {
|
||||||
|
keymap_config.swap_ralt_rgui = 1;
|
||||||
|
} else if (keycode == MAGIC_NO_GUI) {
|
||||||
|
keymap_config.no_gui = 1;
|
||||||
|
} else if (keycode == MAGIC_SWAP_GRAVE_ESC) {
|
||||||
|
keymap_config.swap_grave_esc = 1;
|
||||||
|
} else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) {
|
||||||
|
keymap_config.swap_backslash_backspace = 1;
|
||||||
|
} else if (keycode == MAGIC_HOST_NKRO) {
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
} else if (keycode == MAGIC_SWAP_ALT_GUI) {
|
||||||
|
keymap_config.swap_lalt_lgui = 1;
|
||||||
|
keymap_config.swap_ralt_rgui = 1;
|
||||||
|
}
|
||||||
|
/* UNs */
|
||||||
|
else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) {
|
||||||
|
keymap_config.swap_control_capslock = 0;
|
||||||
|
} else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) {
|
||||||
|
keymap_config.capslock_to_control = 0;
|
||||||
|
} else if (keycode == MAGIC_UNSWAP_LALT_LGUI) {
|
||||||
|
keymap_config.swap_lalt_lgui = 0;
|
||||||
|
} else if (keycode == MAGIC_UNSWAP_RALT_RGUI) {
|
||||||
|
keymap_config.swap_ralt_rgui = 0;
|
||||||
|
} else if (keycode == MAGIC_UNNO_GUI) {
|
||||||
|
keymap_config.no_gui = 0;
|
||||||
|
} else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) {
|
||||||
|
keymap_config.swap_grave_esc = 0;
|
||||||
|
} else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) {
|
||||||
|
keymap_config.swap_backslash_backspace = 0;
|
||||||
|
} else if (keycode == MAGIC_UNHOST_NKRO) {
|
||||||
|
keymap_config.nkro = 0;
|
||||||
|
} else if (keycode == MAGIC_UNSWAP_ALT_GUI) {
|
||||||
|
keymap_config.swap_lalt_lgui = 0;
|
||||||
|
keymap_config.swap_ralt_rgui = 0;
|
||||||
|
}
|
||||||
|
eeconfig_write_keymap(keymap_config.raw);
|
||||||
|
break;
|
||||||
|
case 0x5100 ... 0x5FFF: ;
|
||||||
|
// Layer movement shortcuts
|
||||||
|
// See .h to see constraints/usage
|
||||||
|
int type = (keycode >> 0x8) & 0xF;
|
||||||
|
if (type == 0x1) {
|
||||||
|
// Layer set "GOTO"
|
||||||
|
int when = (keycode >> 0x4) & 0x3;
|
||||||
|
int layer = keycode & 0xF;
|
||||||
|
action.code = ACTION_LAYER_SET(layer, when);
|
||||||
|
} else if (type == 0x2) {
|
||||||
|
// Momentary layer
|
||||||
|
int layer = keycode & 0xFF;
|
||||||
|
action.code = ACTION_LAYER_MOMENTARY(layer);
|
||||||
|
} else if (type == 0x3) {
|
||||||
|
// Set default layer
|
||||||
|
int layer = keycode & 0xFF;
|
||||||
|
action.code = ACTION_DEFAULT_LAYER_SET(layer);
|
||||||
|
} else if (type == 0x4) {
|
||||||
|
// Set default layer
|
||||||
|
int layer = keycode & 0xFF;
|
||||||
|
action.code = ACTION_LAYER_TOGGLE(layer);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef MIDI_ENABLE
|
||||||
|
case 0x6000 ... 0x6FFF:
|
||||||
|
action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case 0x7000 ... 0x7FFF:
|
||||||
|
action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
|
||||||
|
break;
|
||||||
|
case 0x8000 ... 0x8FFF:
|
||||||
|
action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
|
||||||
|
break;
|
||||||
|
#ifdef UNICODE_ENABLE
|
||||||
|
case 0x8000000 ... 0x8FFFFFF:
|
||||||
|
uint16_t unicode = keycode & ~(0x8000);
|
||||||
|
action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
action.code = ACTION_NO;
|
action.code = ACTION_NO;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -30,7 +30,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
// #include "print.h"
|
// #include "print.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#ifdef BOOTMAGIC_ENABLE
|
|
||||||
/* NOTE: Not portable. Bit field order depends on implementation */
|
/* NOTE: Not portable. Bit field order depends on implementation */
|
||||||
typedef union {
|
typedef union {
|
||||||
uint16_t raw;
|
uint16_t raw;
|
||||||
|
@ -45,8 +44,6 @@ typedef union {
|
||||||
bool nkro:1;
|
bool nkro:1;
|
||||||
};
|
};
|
||||||
} keymap_config_t;
|
} keymap_config_t;
|
||||||
keymap_config_t keymap_config;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* translates key to keycode */
|
/* translates key to keycode */
|
||||||
|
@ -168,6 +165,30 @@ extern const uint16_t fn_actions[];
|
||||||
#define RESET 0x5000
|
#define RESET 0x5000
|
||||||
#define DEBUG 0x5001
|
#define DEBUG 0x5001
|
||||||
|
|
||||||
|
// MAGIC keycodes
|
||||||
|
#define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002
|
||||||
|
#define MAGIC_UNSWAP_CONTROL_CAPSLOCK 0x5003
|
||||||
|
#define MAGIC_CAPSLOCK_TO_CONTROL 0x5004
|
||||||
|
#define MAGIC_UNCAPSLOCK_TO_CONTROL 0x5005
|
||||||
|
#define MAGIC_SWAP_LALT_LGUI 0x5006
|
||||||
|
#define MAGIC_UNSWAP_LALT_LGUI 0x5007
|
||||||
|
#define MAGIC_SWAP_RALT_RGUI 0x5008
|
||||||
|
#define MAGIC_UNSWAP_RALT_RGUI 0x5009
|
||||||
|
#define MAGIC_NO_GUI 0x500a
|
||||||
|
#define MAGIC_UNNO_GUI 0x500b
|
||||||
|
#define MAGIC_SWAP_GRAVE_ESC 0x500c
|
||||||
|
#define MAGIC_UNSWAP_GRAVE_ESC 0x500d
|
||||||
|
#define MAGIC_SWAP_BACKSLASH_BACKSPACE 0x500e
|
||||||
|
#define MAGIC_UNSWAP_BACKSLASH_BACKSPACE 0x500f
|
||||||
|
#define MAGIC_HOST_NKRO 0x5010
|
||||||
|
#define MAGIC_UNHOST_NKRO 0x5011
|
||||||
|
#define MAGIC_SWAP_ALT_GUI 0x5012
|
||||||
|
#define MAGIC_UNSWAP_ALT_GUI 0x5013
|
||||||
|
|
||||||
|
#define AG_SWAP MAGIC_SWAP_ALT_GUI
|
||||||
|
#define AG_NORM MAGIC_UNSWAP_ALT_GUI
|
||||||
|
|
||||||
|
|
||||||
// GOTO layer - 16 layers max
|
// GOTO layer - 16 layers max
|
||||||
// when:
|
// when:
|
||||||
// ON_PRESS = 1
|
// ON_PRESS = 1
|
||||||
|
@ -213,4 +234,5 @@ void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
|
||||||
#define IS_LAYER_ON(layer) ((layer_state) & (1UL<<(layer)))
|
#define IS_LAYER_ON(layer) ((layer_state) & (1UL<<(layer)))
|
||||||
#define IS_LAYER_OFF(layer) ((!layer_state) & (1UL<<(layer)))
|
#define IS_LAYER_OFF(layer) ((!layer_state) & (1UL<<(layer)))
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -21,6 +21,9 @@ ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
|
||||||
SRC += $(COMMON_DIR)/bootmagic.c
|
SRC += $(COMMON_DIR)/bootmagic.c
|
||||||
SRC += $(COMMON_DIR)/avr/eeconfig.c
|
SRC += $(COMMON_DIR)/avr/eeconfig.c
|
||||||
OPT_DEFS += -DBOOTMAGIC_ENABLE
|
OPT_DEFS += -DBOOTMAGIC_ENABLE
|
||||||
|
else
|
||||||
|
SRC += $(COMMON_DIR)/magic.c
|
||||||
|
SRC += $(COMMON_DIR)/avr/eeconfig.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
|
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
|
||||||
|
|
|
@ -27,7 +27,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "sendchar.h"
|
#include "sendchar.h"
|
||||||
#include "bootmagic.h"
|
#ifdef BOOTMAGIC_ENABLE
|
||||||
|
#include "bootmagic.h"
|
||||||
|
#else
|
||||||
|
#include "magic.h"
|
||||||
|
#endif
|
||||||
#include "eeconfig.h"
|
#include "eeconfig.h"
|
||||||
#include "backlight.h"
|
#include "backlight.h"
|
||||||
#ifdef MOUSEKEY_ENABLE
|
#ifdef MOUSEKEY_ENABLE
|
||||||
|
@ -86,6 +90,8 @@ void keyboard_init(void)
|
||||||
|
|
||||||
#ifdef BOOTMAGIC_ENABLE
|
#ifdef BOOTMAGIC_ENABLE
|
||||||
bootmagic();
|
bootmagic();
|
||||||
|
#else
|
||||||
|
magic();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
|
|
@ -22,8 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef BOOTMAGIC_ENABLE
|
|
||||||
/* NOTE: Not portable. Bit field order depends on implementation */
|
/* NOTE: Not portable. Bit field order depends on implementation */
|
||||||
typedef union {
|
typedef union {
|
||||||
uint8_t raw;
|
uint8_t raw;
|
||||||
|
@ -39,7 +37,6 @@ typedef union {
|
||||||
};
|
};
|
||||||
} keymap_config_t;
|
} keymap_config_t;
|
||||||
keymap_config_t keymap_config;
|
keymap_config_t keymap_config;
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* translates key to keycode */
|
/* translates key to keycode */
|
||||||
|
|
36
tmk_core/common/magic.c
Normal file
36
tmk_core/common/magic.c
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "bootloader.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "keymap.h"
|
||||||
|
#include "host.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
#include "magic.h"
|
||||||
|
|
||||||
|
keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
void magic(void)
|
||||||
|
{
|
||||||
|
/* check signature */
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* debug enable */
|
||||||
|
debug_config.raw = eeconfig_read_debug();
|
||||||
|
|
||||||
|
/* keymap config */
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
keyboard_nkro = keymap_config.nkro;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t default_layer = 0;
|
||||||
|
default_layer = eeconfig_read_default_layer();
|
||||||
|
default_layer_set((uint32_t)default_layer);
|
||||||
|
|
||||||
|
}
|
6
tmk_core/common/magic.h
Normal file
6
tmk_core/common/magic.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef MAGIC_H
|
||||||
|
#define MAGIC_H
|
||||||
|
|
||||||
|
void magic(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue