aboutsummaryrefslogtreecommitdiff
path: root/quantum/bootmagic/bootmagic.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/bootmagic/bootmagic.c')
-rw-r--r--quantum/bootmagic/bootmagic.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/quantum/bootmagic/bootmagic.c b/quantum/bootmagic/bootmagic.c
index efce6bfd12..419ec5229e 100644
--- a/quantum/bootmagic/bootmagic.c
+++ b/quantum/bootmagic/bootmagic.c
@@ -20,44 +20,54 @@
#include "eeconfig.h"
#include "bootloader.h"
+#ifndef BOOTMAGIC_DEBOUNCE
+# if defined(DEBOUNCE) && DEBOUNCE > 0
+# define BOOTMAGIC_DEBOUNCE (DEBOUNCE * 2)
+# else
+# define BOOTMAGIC_DEBOUNCE 30
+# endif
+#endif
+
/** \brief Reset eeprom
*
* ...just incase someone wants to only change the eeprom behaviour
*/
-__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) {
+__attribute__((weak)) void bootmagic_reset_eeprom(void) {
eeconfig_disable();
}
-/** \brief The lite version of TMK's bootmagic based on Wilba.
- *
- * 100% less potential for accidentally making the keyboard do stupid things.
+/** \brief Decide reboot based on current matrix state
*/
-__attribute__((weak)) void bootmagic_lite(void) {
- // We need multiple scans because debouncing can't be turned off.
- matrix_scan();
-#if defined(DEBOUNCE) && DEBOUNCE > 0
- wait_ms(DEBOUNCE * 2);
-#else
- wait_ms(30);
-#endif
- matrix_scan();
-
+__attribute__((weak)) bool bootmagic_should_reset(void) {
// If the configured key (commonly Esc) is held down on power up,
// reset the EEPROM valid state and jump to bootloader.
// This isn't very generalized, but we need something that doesn't
// rely on user's keymaps in firmware or EEPROM.
- uint8_t row = BOOTMAGIC_LITE_ROW;
- uint8_t col = BOOTMAGIC_LITE_COLUMN;
+ uint8_t row = BOOTMAGIC_ROW;
+ uint8_t col = BOOTMAGIC_COLUMN;
-#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT)
+#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_ROW_RIGHT) && defined(BOOTMAGIC_COLUMN_RIGHT)
if (!is_keyboard_left()) {
- row = BOOTMAGIC_LITE_ROW_RIGHT;
- col = BOOTMAGIC_LITE_COLUMN_RIGHT;
+ row = BOOTMAGIC_ROW_RIGHT;
+ col = BOOTMAGIC_COLUMN_RIGHT;
}
#endif
- if (matrix_get_row(row) & (1 << col)) {
- bootmagic_lite_reset_eeprom();
+ return matrix_get_row(row) & (1 << col);
+}
+
+/** \brief The abridged version of TMK's bootmagic based on Wilba.
+ *
+ * 100% less potential for accidentally making the keyboard do stupid things.
+ */
+__attribute__((weak)) void bootmagic_scan(void) {
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(BOOTMAGIC_DEBOUNCE);
+ matrix_scan();
+
+ if (bootmagic_should_reset()) {
+ bootmagic_reset_eeprom();
// Jump to bootloader.
bootloader_jump();
@@ -65,5 +75,5 @@ __attribute__((weak)) void bootmagic_lite(void) {
}
void bootmagic(void) {
- bootmagic_lite();
+ bootmagic_scan();
}