Merge remote-tracking branch 'tmk/master'

This commit is contained in:
Mark Sikora 2023-12-04 14:09:41 -05:00
commit c544d100f5
17 changed files with 1489 additions and 1461 deletions

View file

@ -23,8 +23,8 @@ Use PD2(USART RXD) for 'Keyboard Data' pin and give power with VCC and GND. Othe
------------------------ ------------------------
PD2 Keyboard Data PD2 Keyboard Data
PD3 Keyboard Command PD3 Keyboard Command
PD4 Mouse Data PD0 Mouse Data
PD0 BZ PD1 BZ
Target microcontroller is Atmel ATMega32U2 by default but porting this project to other 8-bit AVR controllers would be easy. Target microcontroller is Atmel ATMega32U2 by default but porting this project to other 8-bit AVR controllers would be easy.

View file

@ -25,7 +25,7 @@
:10018000370A004C45443A20253032580A000A4CC0 :10018000370A004C45443A20253032580A000A4CC0
:100190006F6F702073746172742E0A000A55534297 :100190006F6F702073746172742E0A000A55534297
:1001A00020636F6E666967757265642E0A000A5473 :1001A00020636F6E666967757265642E0A000A5473
:1001B0004D4B3A3735666238622F4C5546413A64AA :1001B0004D4B3A6266383266312F4C5546413A64AF
:1001C00036613764660A0009025400030100A03258 :1001C00036613764660A0009025400030100A03258
:1001D00009040000010301010009211101000122AD :1001D00009040000010301010009211101000122AD
:1001E00040000705810308000A090401000103011A :1001E00040000705810308000A090401000103011A
@ -92,9 +92,9 @@
:1005B0005553454B45592045585452414B455920B8 :1005B0005553454B45592045585452414B455920B8
:1005C000434F4E534F4C4520434F4D4D414E4420D9 :1005C000434F4E534F4C4520434F4D4D414E4420D9
:1005D0004B45594D41505F53454354494F4E20348C :1005D0004B45594D41505F53454354494F4E20348C
:1005E0003039360A004255494C443A203735666264 :1005E0003039360A004255494C443A206266383266
:1005F0003862202832333A32393A3535204E6F7618 :1005F0006631202831313A35353A3435204E6F7620
:100600002020372032303233290A005649443A201C :100600002020392032303233290A005649443A201A
:1006100030784645454428544D4B29205049443AAA :1006100030784645454428544D4B29205049443AAA
:100620002030783530323128534F4E59204E4557BF :100620002030783530323128534F4E59204E4557BF
:1006300053206B6579626F61726420636F6E7665BB :1006300053206B6579626F61726420636F6E7665BB
@ -1008,7 +1008,7 @@
:103EF000FF91EF919F918F910F900FBE0F901F90A8 :103EF000FF91EF919F918F910F900FBE0F901F90A8
:103F000018951F920F920FB60F9211248F939F93C3 :103F000018951F920F920FB60F9211248F939F93C3
:103F1000AF93BF938091BD019091BE01A091BF016D :103F1000AF93BF938091BD019091BE01A091BF016D
:103F2000B091C001892B8A2B8B2B69F18BB191E069 :103F2000B091C001892B8A2B8B2B69F18BB192E068
:103F300089278BB98091BD019091BE01A091BF01ED :103F300089278BB98091BD019091BE01A091BF01ED
:103F4000B091C001181619061A061B069CF4809140 :103F4000B091C001181619061A061B069CF4809140
:103F5000BD019091BE01A091BF01B091C001019738 :103F5000BD019091BE01A091BF01B091C001019738
@ -1016,7 +1016,7 @@
:103F7000B093C001BF91AF919F918F910F900FBEF1 :103F7000B093C001BF91AF919F918F910F900FBEF1
:103F80000F901F90189580916F008D7F80936F0028 :103F80000F901F90189580916F008D7F80936F0028
:103F900010928000109281008FB7F89410928900DF :103F900010928000109281008FB7F89410928900DF
:103FA000109288008FBF5898E5CF0E94DC1F68945C :103FA000109288008FBF5998E5CF0E94DC1F68945B
:103FB000B1110C946B2008950E94502088F09F57F7 :103FB000B1110C946B2008950E94502088F09F57F7
:103FC00098F0B92F9927B751B0F0E1F0660F771F3D :103FC00098F0B92F9927B751B0F0E1F0660F771F3D
:103FD000881F991F1AF0BA95C9F714C0B13091F033 :103FD000881F991F1AF0BA95C9F714C0B13091F033

View file

@ -133,7 +133,7 @@ uint8_t matrix_scan(void)
// make code // make code
if (!matrix_is_on(ROW(code), COL(code))) { if (!matrix_is_on(ROW(code), COL(code))) {
matrix[ROW(code)] |= (1<<COL(code)); matrix[ROW(code)] |= (1<<COL(code));
//tone(80, 100); //tone(440, 100);
} }
} }
return code; return code;

View file

@ -25,7 +25,7 @@
// Pin for buzzer: PD0 // Pin for buzzer: PD0
#define BZ_PIN_PORT PORTD #define BZ_PIN_PORT PORTD
#define BZ_PIN_DDR DDRD #define BZ_PIN_DDR DDRD
#define BZ_PIN_MASK (1<<0) #define BZ_PIN_MASK (1<<1)
volatile long toggle_count; volatile long toggle_count;

View file

@ -73,7 +73,7 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= yes # Console for debug(+400) CONSOLE_ENABLE ?= yes # Console for debug(+400)
COMMAND_ENABLE ?= yes # Commands for debug and configuration COMMAND_ENABLE ?= yes # Commands for debug and configuration
#SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend #SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE ?= yes # USB Nkey Rollover NKRO_ENABLE ?= yes # USB Nkey Rollover
#ACTIONMAP_ENABLE ?= yes # Use 16bit action codes in keymap instead of 8bit keycodes #ACTIONMAP_ENABLE ?= yes # Use 16bit action codes in keymap instead of 8bit keycodes

File diff suppressed because it is too large Load diff

View file

@ -1,66 +0,0 @@
#include "keymap_common.h"
#ifdef KEYMAP_SECTION_ENABLE
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
#else
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
#endif
/* 0: qwerty
* ,-----------------------------------------------------------.
* |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| #|Bsp|
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
* |-----------------------------------------------------------|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter |
* |-----------------------------------------------------------|
* |Shft| \| Z| X| C| V| B| N| M| ,| .| /|Shift |Esc|
* |-----------------------------------------------------------'
* |Ctrl|Gui |Alt | Space |App |Alt |Gui |Ctrl |
* `-----------------------------------------------------------'
*/
KEYMAP( \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS, BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,ESC, \
LCTL,LGUI,LALT, SPC, APP, RALT,RGUI,RCTL),
};
#ifdef KEYMAP_SECTION_ENABLE
const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
#else
const action_t fn_actions[] PROGMEM = {
#endif
[0] = ACTION_LAYER_MOMENTARY(1),
[1] = ACTION_LAYER_MOMENTARY(2),
[2] = ACTION_LAYER_MOMENTARY(3),
[3] = ACTION_LAYER_MOMENTARY(4),
[4] = ACTION_LAYER_MOMENTARY(5),
[5] = ACTION_LAYER_MOMENTARY(6),
[6] = ACTION_LAYER_MOMENTARY(7),
[7] = ACTION_LAYER_TOGGLE(1),
[8] = ACTION_LAYER_TOGGLE(2),
[9] = ACTION_LAYER_TOGGLE(3),
[10] = ACTION_LAYER_TAP_TOGGLE(1),
[11] = ACTION_LAYER_TAP_TOGGLE(2),
[12] = ACTION_LAYER_TAP_TOGGLE(3),
[13] = ACTION_LAYER_TAP_KEY(1, KC_BSLASH),
[14] = ACTION_LAYER_TAP_KEY(2, KC_TAB),
[15] = ACTION_LAYER_TAP_KEY(3, KC_ENTER),
[16] = ACTION_LAYER_TAP_KEY(4, KC_SPACE),
[17] = ACTION_LAYER_TAP_KEY(5, KC_SCOLON),
[18] = ACTION_LAYER_TAP_KEY(6, KC_QUOTE),
[19] = ACTION_LAYER_TAP_KEY(7, KC_SLASH),
[20] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPACE),
[21] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_SPACE),
[22] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_QUOTE),
[23] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENTER),
[24] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC),
[25] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPACE),
[26] = ACTION_MODS_ONESHOT(MOD_LCTL),
[27] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),
[28] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPACE),
[29] = ACTION_MODS_ONESHOT(MOD_LSFT),
[30] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRAVE),
[31] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_BSLASH),
};

View file

@ -62,7 +62,7 @@ void matrix_init(void)
} }
//debug //debug
debug_matrix = true; debug_matrix = false;
LED_ON(); LED_ON();
_delay_ms(500); _delay_ms(500);
LED_OFF(); LED_OFF();

View file

@ -0,0 +1,82 @@
/*
Copyright 2023 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 "unimap_trans.h"
#define AC_L1 ACTION_LAYER_MOMENTARY(1)
#define AC_L2 ACTION_LAYER_MOMENTARY(2)
#define AC_SLS2 ACTION_LAYER_TAP_KEY(2, KC_SLSH)
#define AC_SCL3 ACTION_LAYER_TAP_KEY(3, KC_SCLN)
#define AC_SPC4 ACTION_LAYER_TAP_KEY(4, KC_SPC)
#define AC_BACK ACTION_MODS_KEY(MOD_LALT, KC_LEFT)
#define AC_FRWD ACTION_MODS_KEY(MOD_LALT, KC_RIGHT)
#define AC_ENT_ ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT)
#ifdef KEYMAP_SECTION_ENABLE
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
#else
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
#endif
/* 0:
* ,-----------------------------------------------------------.
* |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bspc|
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Enter |
* |-----------------------------------------------------------|
* |Shft| \| Z| X| C| V| B| N| M| ,| .| /|Shift |
* |-----------------------------------------------------------'
* |Ctrl|Gui |Alt | Space |Alt |App | L1 |
* `-----------------------------------------------------------'
*/
[0] = UNIMAP_ALPS64( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, BSLS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
LCTL,A, S, D, F, G, H, J, K, L, SCL3,QUOT, ENT_,
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLS2, RSFT,L1,
L2, LGUI,LALT, SPC4, APP, RALT,RGUI,L1),
[1] = UNIMAP_ALPS64( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,GRV,
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, INS, DEL,
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS, TRNS,TRNS,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
[2] = UNIMAP_ALPS64(
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
TRNS,HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, TRNS,
TRNS,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, TRNS,
TRNS,TRNS,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS, TRNS,TRNS,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
[3] = UNIMAP_ALPS64(
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
TAB, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BACK,FRWD, TRNS,
TRNS,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,TRNS,NO, TRNS,
TRNS,TRNS,NO, NO, NO, NO, BTN3,BTN2,BTN1,BACK,FRWD,NO, TRNS,TRNS,
TRNS,TRNS,TRNS, BTN1, TRNS,TRNS,TRNS,TRNS),
[4] = UNIMAP_ALPS64(
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
TAB, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5, TAB,
LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT,
LSFT,TRNS,NO, NO, NO, NO, BTN3,BTN2,BTN1,BACK,FRWD,NO, TRNS,TRNS,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
};

View file

@ -113,7 +113,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) #BOOTMAGIC_ENABLE = yes # 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)

View file

@ -48,8 +48,7 @@ TMK_DIR = ../../tmk_core
TARGET_DIR = . TARGET_DIR = .
# project specific files # project specific files
SRC = keymap_common.c \ SRC = matrix.c \
matrix.c \
led.c led.c
ifdef KEYMAP ifdef KEYMAP

View file

@ -142,6 +142,108 @@ static uint8_t current_layer_for_key(keypos_t key)
} }
#ifdef BOOTMAGIC_ENABLE
#include "keymap.h"
extern keymap_config_t keymap_config;
static uint8_t config_keymap(uint8_t keycode)
{
switch (keycode) {
case KC_CAPSLOCK:
case KC_LOCKING_CAPS:
if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
return KC_LCTL;
}
return keycode;
case KC_LCTL:
if (keymap_config.swap_control_capslock) {
return KC_CAPSLOCK;
}
return KC_LCTL;
case KC_LALT:
if (keymap_config.swap_lalt_lgui) {
if (keymap_config.no_gui) {
return KC_NO;
}
return KC_LGUI;
}
return KC_LALT;
case KC_LGUI:
if (keymap_config.swap_lalt_lgui) {
return KC_LALT;
}
if (keymap_config.no_gui) {
return KC_NO;
}
return KC_LGUI;
case KC_RALT:
if (keymap_config.swap_ralt_rgui) {
if (keymap_config.no_gui) {
return KC_NO;
}
return KC_RGUI;
}
return KC_RALT;
case KC_RGUI:
if (keymap_config.swap_ralt_rgui) {
return KC_RALT;
}
if (keymap_config.no_gui) {
return KC_NO;
}
return KC_RGUI;
case KC_GRAVE:
if (keymap_config.swap_grave_esc) {
return KC_ESC;
}
return KC_GRAVE;
case KC_ESC:
if (keymap_config.swap_grave_esc) {
return KC_GRAVE;
}
return KC_ESC;
case KC_BSLASH:
if (keymap_config.swap_backslash_backspace) {
return KC_BSPACE;
}
return KC_BSLASH;
case KC_BSPACE:
if (keymap_config.swap_backslash_backspace) {
return KC_BSLASH;
}
return KC_BSPACE;
default:
return keycode;
}
}
static action_t get_action(uint8_t layer, keypos_t key)
{
action_t act = action_for_key(layer, key);
switch (act.kind.id) {
case ACT_LMODS:
case ACT_RMODS:
case ACT_LMODS_TAP:
case ACT_RMODS_TAP:
act.key.code = config_keymap(act.key.code);
break;
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
act.layer_tap.code = config_keymap(act.layer_tap.code);
break;
default:
break;
}
return act;
}
#else
static action_t get_action(uint8_t layer, keypos_t key)
{
return action_for_key(layer, key);
}
#endif
#ifndef NO_TRACK_KEY_PRESS #ifndef NO_TRACK_KEY_PRESS
/* record layer on where key is pressed */ /* record layer on where key is pressed */
static uint8_t layer_pressed[MATRIX_ROWS][MATRIX_COLS] = {}; static uint8_t layer_pressed[MATRIX_ROWS][MATRIX_COLS] = {};
@ -161,5 +263,5 @@ action_t layer_switch_get_action(keyevent_t event)
#else #else
layer = current_layer_for_key(event.key); layer = current_layer_for_key(event.key);
#endif #endif
return action_for_key(layer, event.key); return get_action(layer, event.key);
} }

View file

@ -2,6 +2,8 @@
#include <stdbool.h> #include <stdbool.h>
#include <avr/eeprom.h> #include <avr/eeprom.h>
#include "eeconfig.h" #include "eeconfig.h"
#include "keymap.h"
#include "print.h"
void eeconfig_init(void) void eeconfig_init(void)
{ {
@ -22,7 +24,12 @@ void eeconfig_enable(void)
void eeconfig_disable(void) void eeconfig_disable(void)
{ {
eeprom_write_word(EECONFIG_MAGIC, 0xFFFF); eeprom_write_word(EECONFIG_MAGIC, 0xFFFF);
eeprom_write_byte(EECONFIG_DEBUG, 0xFF);
eeprom_write_byte(EECONFIG_DEFAULT_LAYER, 0xFF);
eeprom_write_byte(EECONFIG_KEYMAP, 0xFF);
eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0xFF);
eeprom_write_byte(EECONFIG_BACKLIGHT, 0xFF);
} }
bool eeconfig_is_enabled(void) bool eeconfig_is_enabled(void)
@ -43,3 +50,13 @@ void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val
uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); } uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); } void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }
#endif #endif
void eeconfig_debug(void)
{
xprintf("eeprom:");
for (int i = 0; i < 16 /* E2END + 1 */; i++) {
if ((i % 16) == 0) { xprintf("\n%04X: ", i); }
xprintf("%02X ", eeprom_read_byte((uint8_t *)i));
}
xprintf("\n");
}

View file

@ -34,7 +34,7 @@ void bootmagic(void)
/* eeconfig clear */ /* eeconfig clear */
if (bootmagic_scan_key(BOOTMAGIC_KEY_EEPROM_CLEAR)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_EEPROM_CLEAR)) {
eeconfig_init(); eeconfig_disable();
} }
/* bootloader */ /* bootloader */
@ -45,6 +45,10 @@ void bootmagic(void)
/* user-defined checks */ /* user-defined checks */
hook_bootmagic(); hook_bootmagic();
if (!eeconfig_is_enabled()) {
goto WAIT;
}
/* debug enable */ /* debug enable */
debug_config.raw = eeconfig_read_debug(); debug_config.raw = eeconfig_read_debug();
if (bootmagic_scan_key(BOOTMAGIC_KEY_DEBUG_ENABLE)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_DEBUG_ENABLE)) {
@ -61,35 +65,38 @@ void bootmagic(void)
eeconfig_write_debug(debug_config.raw); eeconfig_write_debug(debug_config.raw);
/* keymap config */ /* keymap config */
keymap_config.raw = eeconfig_read_keymap(); keymap_config_t kc;
kc.raw = eeconfig_read_keymap();
if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK)) {
keymap_config.swap_control_capslock = !keymap_config.swap_control_capslock; kc.swap_control_capslock = !kc.swap_control_capslock;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL)) {
keymap_config.capslock_to_control = !keymap_config.capslock_to_control; kc.capslock_to_control = !kc.capslock_to_control;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_LALT_LGUI)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_LALT_LGUI)) {
keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui; kc.swap_lalt_lgui = !kc.swap_lalt_lgui;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_RALT_RGUI)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_RALT_RGUI)) {
keymap_config.swap_ralt_rgui = !keymap_config.swap_ralt_rgui; kc.swap_ralt_rgui = !kc.swap_ralt_rgui;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_NO_GUI)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_NO_GUI)) {
keymap_config.no_gui = !keymap_config.no_gui; kc.no_gui = !kc.no_gui;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_GRAVE_ESC)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_GRAVE_ESC)) {
keymap_config.swap_grave_esc = !keymap_config.swap_grave_esc; kc.swap_grave_esc = !kc.swap_grave_esc;
} }
if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE)) { if (bootmagic_scan_key(BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE)) {
keymap_config.swap_backslash_backspace = !keymap_config.swap_backslash_backspace; kc.swap_backslash_backspace = !kc.swap_backslash_backspace;
} }
if (bootmagic_scan_key(BOOTMAGIC_HOST_NKRO)) { if (bootmagic_scan_key(BOOTMAGIC_HOST_NKRO)) {
keymap_config.nkro = !keymap_config.nkro; kc.nkro = !kc.nkro;
} }
eeconfig_write_keymap(keymap_config.raw); eeconfig_write_keymap(kc.raw);
#if defined(NKRO_ENABLE) || defined(NKRO_6KRO_ENABLE) #if defined(NKRO_ENABLE) || defined(NKRO_6KRO_ENABLE)
keyboard_nkro = keymap_config.nkro; if (kc.nkro) {
keyboard_nkro = !keyboard_nkro;
}
#endif #endif
/* default layer */ /* default layer */
@ -109,6 +116,18 @@ void bootmagic(void)
default_layer = eeconfig_read_default_layer(); default_layer = eeconfig_read_default_layer();
default_layer_set((uint32_t)default_layer); default_layer_set((uint32_t)default_layer);
} }
keymap_config = kc;
// wait until all key is released
WAIT:
matrix_scan();
for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
if (matrix_get_row(r)) {
goto WAIT;
wait_ms(10);
}
}
} }
static bool scan_key(uint16_t code) static bool scan_key(uint16_t code)

View file

@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "wait.h" #include "wait.h"
#include "keycode.h" #include "keycode.h"
#include "host.h" #include "host.h"
#include "keymap.h"
#include "print.h" #include "print.h"
#include "debug.h" #include "debug.h"
#include "util.h" #include "util.h"
@ -145,6 +144,9 @@ static void command_common_help(void)
} }
#ifdef BOOTMAGIC_ENABLE #ifdef BOOTMAGIC_ENABLE
#include "keymap.h"
__attribute__ ((weak)) void eeconfig_debug(void) {}
static void print_eeconfig(void) static void print_eeconfig(void)
{ {
print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n"); print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
@ -176,6 +178,8 @@ static void print_eeconfig(void)
print(".enable: "); print_dec(bc.enable); print("\n"); print(".enable: "); print_dec(bc.enable); print("\n");
print(".level: "); print_dec(bc.level); print("\n"); print(".level: "); print_dec(bc.level); print("\n");
#endif #endif
eeconfig_debug();
} }
#endif #endif

View file

@ -72,4 +72,6 @@ uint8_t eeconfig_read_backlight(void);
void eeconfig_write_backlight(uint8_t val); void eeconfig_write_backlight(uint8_t val);
#endif #endif
void eeconfig_debug(void);
#endif #endif

View file

@ -27,10 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#endif #endif
#ifdef BOOTMAGIC_ENABLE
extern keymap_config_t keymap_config;
#endif
static action_t keycode_to_action(uint8_t keycode); static action_t keycode_to_action(uint8_t keycode);
@ -42,71 +38,6 @@ action_t action_for_key(uint8_t layer, keypos_t key)
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_LOCKING_CAPS:
if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
return keycode_to_action(KC_LCTL);
}
return keycode_to_action(keycode);
case KC_LCTL:
if (keymap_config.swap_control_capslock) {
return keycode_to_action(KC_CAPSLOCK);
}
return keycode_to_action(KC_LCTL);
case KC_LALT:
if (keymap_config.swap_lalt_lgui) {
if (keymap_config.no_gui) {
return keycode_to_action(KC_NO);
}
return keycode_to_action(KC_LGUI);
}
return keycode_to_action(KC_LALT);
case KC_LGUI:
if (keymap_config.swap_lalt_lgui) {
return keycode_to_action(KC_LALT);
}
if (keymap_config.no_gui) {
return keycode_to_action(KC_NO);
}
return keycode_to_action(KC_LGUI);
case KC_RALT:
if (keymap_config.swap_ralt_rgui) {
if (keymap_config.no_gui) {
return keycode_to_action(KC_NO);
}
return keycode_to_action(KC_RGUI);
}
return keycode_to_action(KC_RALT);
case KC_RGUI:
if (keymap_config.swap_ralt_rgui) {
return keycode_to_action(KC_RALT);
}
if (keymap_config.no_gui) {
return keycode_to_action(KC_NO);
}
return keycode_to_action(KC_RGUI);
case KC_GRAVE:
if (keymap_config.swap_grave_esc) {
return keycode_to_action(KC_ESC);
}
return keycode_to_action(KC_GRAVE);
case KC_ESC:
if (keymap_config.swap_grave_esc) {
return keycode_to_action(KC_GRAVE);
}
return keycode_to_action(KC_ESC);
case KC_BSLASH:
if (keymap_config.swap_backslash_backspace) {
return keycode_to_action(KC_BSPACE);
}
return keycode_to_action(KC_BSLASH);
case KC_BSPACE:
if (keymap_config.swap_backslash_backspace) {
return keycode_to_action(KC_BSLASH);
}
return keycode_to_action(KC_BSPACE);
#endif
default: default:
return keycode_to_action(keycode); return keycode_to_action(keycode);
} }