core: Fix bootmagic

- EEPROM_CLEAR wipes out eeprom with 0xFF now(avr)
- keymap config is not enabled during bootmagic
- wait until all key is released after bootmagic
- add eeconfig_debug() to command.c
This commit is contained in:
tmk 2023-11-26 22:10:34 +09:00
parent 66da6f4d64
commit 1cc716477b
4 changed files with 52 additions and 13 deletions

View file

@ -3,6 +3,7 @@
#include <avr/eeprom.h>
#include "eeconfig.h"
#include "keymap.h"
#include "print.h"
void eeconfig_init(void)
{
@ -27,7 +28,12 @@ void eeconfig_enable(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)
@ -48,3 +54,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); }
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }
#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 */
if (bootmagic_scan_key(BOOTMAGIC_KEY_EEPROM_CLEAR)) {
eeconfig_init();
eeconfig_disable();
}
/* bootloader */
@ -45,6 +45,10 @@ void bootmagic(void)
/* user-defined checks */
hook_bootmagic();
if (!eeconfig_is_enabled()) {
goto WAIT;
}
/* debug enable */
debug_config.raw = eeconfig_read_debug();
if (bootmagic_scan_key(BOOTMAGIC_KEY_DEBUG_ENABLE)) {
@ -61,35 +65,36 @@ void bootmagic(void)
eeconfig_write_debug(debug_config.raw);
/* 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)) {
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)) {
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)) {
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)) {
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)) {
keymap_config.no_gui = !keymap_config.no_gui;
kc.no_gui = !kc.no_gui;
}
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)) {
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)) {
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)
keyboard_nkro = keymap_config.nkro;
keyboard_nkro = kc.nkro;
#endif
/* default layer */
@ -109,6 +114,18 @@ void bootmagic(void)
default_layer = eeconfig_read_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)

View file

@ -145,6 +145,8 @@ static void command_common_help(void)
}
#ifdef BOOTMAGIC_ENABLE
__attribute__ ((weak)) void eeconfig_debug(void) {}
static void print_eeconfig(void)
{
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(".level: "); print_dec(bc.level); print("\n");
#endif
eeconfig_debug();
}
#endif

View file

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