@@ -10,12 +10,12 @@ | |||
void bootmagic(void) | |||
{ | |||
if (!BOOTMAGIC_IS_ENABLED()) { return; } | |||
/* do scans in case of bounce */ | |||
uint8_t scan = 100; | |||
while (scan--) { matrix_scan(); _delay_ms(1); } | |||
if (!BOOTMAGIC_IS_ENABLE()) { return; } | |||
if (bootmagic_scan_keycode(BOOTMAGIC_BOOTLOADER_KEY)) { | |||
bootloader_jump(); | |||
} |
@@ -2,8 +2,8 @@ | |||
#define BOOTMAGIC_H | |||
#ifndef BOOTMAGIC_IS_ENABLE | |||
#define BOOTMAGIC_IS_ENABLE() true | |||
#ifndef BOOTMAGIC_IS_ENABLED | |||
#define BOOTMAGIC_IS_ENABLED() true | |||
#endif | |||
/* kick up bootloader */ |
@@ -13,9 +13,19 @@ void eeconfig_init(void) | |||
eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0); | |||
} | |||
bool eeconfig_initialized(void) | |||
void eeconfig_enable(void) | |||
{ | |||
return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); | |||
eeprom_write_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); | |||
} | |||
void eeconfig_disable(void) | |||
{ | |||
eeprom_write_word(EECONFIG_MAGIC, 0xFFFF); | |||
} | |||
bool eeconfig_is_enabled(void) | |||
{ | |||
return EECONFIG_IS_ENABLED() && (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); | |||
} | |||
uint8_t eeconfig_read_debug(void) { return eeprom_read_byte(EECONFIG_DEBUG); } |
@@ -20,6 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include <stdint.h> | |||
#ifndef EECONFIG_IS_ENABLED | |||
#define EECONFIG_IS_ENABLED() true | |||
#endif | |||
#define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED | |||
/* eeprom parameteter address */ | |||
@@ -61,10 +65,14 @@ typedef union { | |||
}; | |||
} keyconf; | |||
bool eeconfig_initialized(void); | |||
bool eeconfig_is_enabled(void); | |||
void eeconfig_init(void); | |||
void eeconfig_enable(void); | |||
void eeconfig_disable(void); | |||
uint8_t eeconfig_read_debug(void); | |||
void eeconfig_write_debug(uint8_t val); | |||
@@ -66,13 +66,14 @@ void keyboard_init(void) | |||
bootmagic(); | |||
if (eeconfig_initialized()) { | |||
if (eeconfig_is_enabled()) { | |||
uint8_t config; | |||
config = eeconfig_read_debug(); | |||
debug_enable = (config & EECONFIG_DEBUG_ENABLE); | |||
debug_matrix = (config & EECONFIG_DEBUG_MATRIX); | |||
debug_keyboard = (config & EECONFIG_DEBUG_KEYBOARD); | |||
debug_mouse = (config & EECONFIG_DEBUG_MOUSE); | |||
// ignored if debug is enabled by program before. | |||
if (!debug_enable) debug_enable = (config & EECONFIG_DEBUG_ENABLE); | |||
if (!debug_matrix) debug_matrix = (config & EECONFIG_DEBUG_MATRIX); | |||
if (!debug_keyboard) debug_keyboard = (config & EECONFIG_DEBUG_KEYBOARD); | |||
if (!debug_mouse) debug_mouse = (config & EECONFIG_DEBUG_MOUSE); | |||
} else { | |||
eeconfig_init(); | |||
} |