]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Fix bootmagic and eeconfig for virtual DIP SW
authortmk <nobody@nowhere>
Sun, 7 Apr 2013 06:36:50 +0000 (15:36 +0900)
committertmk <nobody@nowhere>
Sun, 7 Apr 2013 06:36:50 +0000 (15:36 +0900)
12 files changed:
README.md
common.mk
common/bootmagic.c
common/bootmagic.h
common/command.c
common/debug.c [deleted file]
common/debug.h
common/eeconfig.c
common/eeconfig.h
common/keyboard.c
common/keymap.c
common/keymap.h

index 998d99a00d8a04a85631fde7c79d8e3188b7a111..eccb1bd77e39ed42b3c5f7a7d91db8316a39364d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -106,6 +106,8 @@ Following commands can be also executed with `Magic` + key. In console mode `Mag
     v:      print device version & info
     t:      print timer count
     s:      print status
     v:      print device version & info
     t:      print timer count
     s:      print status
+    e:     print eeprom config
+    n:     toggle NKRO
     0/F10:  switch to Layer0
     1/F1:   switch to Layer1
     2/F2:   switch to Layer2
     0/F10:  switch to Layer0
     1/F1:   switch to Layer1
     2/F2:   switch to Layer2
@@ -117,13 +119,24 @@ Following commands can be also executed with `Magic` + key. In console mode `Mag
 
 **TBD**
 
 
 **TBD**
 
-### Conguration with Boot Magic
+### Boot Magic Configuration - Virtual DIP Switch
 Boot Magic are executed during boot up time. Press Magic key below then pulgin keyboard cable.
 Boot Magic are executed during boot up time. Press Magic key below then pulgin keyboard cable.
-These settings are stored in EEPROM.
+Note that you must use keys of **Layer 0** as Magic keys. These settings are stored in EEPROM so that retain your configure over power cycles.
 
 
+#### EEPROM
+- Skip reading EEPROM(`ESC`)
 - Clear configuration stored in EEPROM(`Backspace`)
 - Clear configuration stored in EEPROM(`Backspace`)
+
+#### Bootloader
 - Kick up Bootloader(`B`)
 - Kick up Bootloader(`B`)
+
+#### Debug
 - Debug enable(`D`)
 - Debug enable(`D`)
+- Debug matrix enable(`D`+`X`)
+- Debug keyboard enable(`D`+`K`)
+- Debug mouse enable(`D`+`M`)
+
+#### Keymap
 - Swap Control and CapsLock(`Left Control`)
 - Change CapsLock to Control(`Casp Lock`)
 - Swap LeftAlt and Gui(`Left Alt`)
 - Swap Control and CapsLock(`Left Control`)
 - Change CapsLock to Control(`Casp Lock`)
 - Swap LeftAlt and Gui(`Left Alt`)
@@ -132,6 +145,12 @@ These settings are stored in EEPROM.
 - Swap Grave and Escape(`Grave`)
 - Swap BackSlash and BackSpace(`Back Slash`)
 
 - Swap Grave and Escape(`Grave`)
 - Swap BackSlash and BackSpace(`Back Slash`)
 
+#### Default Layer
+- Set Default Layer to 0(`0`)
+- Set Default Layer to 0(`1`)
+- Set Default Layer to 0(`2`)
+- Set Default Layer to 0(`3`)
+
 **TBD**
 
 
 **TBD**
 
 
index 6759e6ef939752ed868d2dd7fe4a4957b375e3ab..810f802c66d6ba56c56e13d1bb1e0980dc970f0f 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -9,7 +9,6 @@ SRC +=  $(COMMON_DIR)/host.c \
        $(COMMON_DIR)/keymap.c \
        $(COMMON_DIR)/timer.c \
        $(COMMON_DIR)/print.c \
        $(COMMON_DIR)/keymap.c \
        $(COMMON_DIR)/timer.c \
        $(COMMON_DIR)/print.c \
-       $(COMMON_DIR)/debug.c \
        $(COMMON_DIR)/bootloader.c \
        $(COMMON_DIR)/suspend.c \
        $(COMMON_DIR)/util.c
        $(COMMON_DIR)/bootloader.c \
        $(COMMON_DIR)/suspend.c \
        $(COMMON_DIR)/util.c
index 388099e2e63acf4d7c84d065514a5d0371134dfe..716f5d956b6b9b2563446fd83f10a8c8e9d98203 100644 (file)
@@ -2,53 +2,78 @@
 #include <stdbool.h>
 #include <util/delay.h>
 #include "matrix.h"
 #include <stdbool.h>
 #include <util/delay.h>
 #include "matrix.h"
+#include "bootloader.h"
+#include "debug.h"
 #include "keymap.h"
 #include "eeconfig.h"
 #include "keymap.h"
 #include "eeconfig.h"
-#include "bootloader.h"
 #include "bootmagic.h"
 
 
 void bootmagic(void)
 {
 #include "bootmagic.h"
 
 
 void bootmagic(void)
 {
-    if (!BOOTMAGIC_IS_ENABLED()) { return; }
+    /* check signature */
+    if (!eeconfig_is_enabled()) {
+        eeconfig_init();
+    }
 
     /* do scans in case of bounce */
     uint8_t scan = 100;
 
     /* do scans in case of bounce */
     uint8_t scan = 100;
-    while (scan--) { matrix_scan(); _delay_ms(1); }
+    while (scan--) { matrix_scan(); _delay_ms(10); }
 
 
-    if (bootmagic_scan_keycode(BOOTMAGIC_BOOTLOADER_KEY)) {
-        bootloader_jump();
+    /* bootmagic skip */
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SKIP)) {
+        return;
     }
 
     }
 
-    if (bootmagic_scan_keycode(BOOTMAGIC_DEBUG_ENABLE_KEY)) {
-        eeconfig_write_debug(eeconfig_read_debug() ^ EECONFIG_DEBUG_ENABLE);
+    /* eeconfig clear */
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_EEPROM_CLEAR)) {
+        eeconfig_init();
     }
 
     }
 
-    if (bootmagic_scan_keycode(BOOTMAGIC_EEPROM_CLEAR_KEY)) {
-        eeconfig_init();
+    /* bootloader */
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_BOOTLOADER)) {
+        bootloader_jump();
+    }
+
+    /* debug enable */
+    debug_config.raw = eeconfig_read_debug();
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEBUG_ENABLE)) {
+        if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEBUG_MATRIX)) {
+            debug_config.matrix = !debug_config.matrix;
+        } else if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEBUG_KEYBOARD)) {
+            debug_config.keyboard = !debug_config.keyboard;
+        } else if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEBUG_MOUSE)) {
+            debug_config.mouse = !debug_config.mouse;
+        } else {
+            debug_config.enable = !debug_config.enable;
+        }
     }
     }
+    eeconfig_write_debug(debug_config.raw);
 
 
-    if (bootmagic_scan_keycode(BOOTMAGIC_SWAP_CONTROL_CPASLOCK)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_SWAP_CONTROL_CAPSLOCK);
+    /* keymap config */
+    keymap_config.raw = eeconfig_read_keymap();
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SWAP_CONTROL_CPASLOCK)) {
+        keymap_config.swap_control_capslock = !keymap_config.swap_control_capslock;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_CAPSLOCK_TO_CONTROL)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_CAPSLOCK_TO_CONTROL);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL)) {
+        keymap_config.capslock_to_control = !keymap_config.capslock_to_control;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_SWAP_LALT_LGUI)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_SWAP_LALT_LGUI);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SWAP_LALT_LGUI)) {
+        keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_SWAP_RALT_RGUI)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_SWAP_RALT_RGUI);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SWAP_RALT_RGUI)) {
+        keymap_config.swap_ralt_rgui = !keymap_config.swap_ralt_rgui;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_NO_GUI)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_NO_GUI);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_NO_GUI)) {
+        keymap_config.no_gui = !keymap_config.no_gui;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_SWAP_GRAVE_ESC)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_SWAP_GRAVE_ESC);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SWAP_GRAVE_ESC)) {
+        keymap_config.swap_grave_esc = !keymap_config.swap_grave_esc;
     }
     }
-    if (bootmagic_scan_keycode(BOOTMAGIC_SWAP_BACKSLASH_BACKSPACE)) {
-        eeconfig_write_keyconf(eeconfig_read_keyconf() ^ EECONFIG_KEYCONF_SWAP_BACKSLASH_BACKSPACE);
+    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE)) {
+        keymap_config.swap_backslash_backspace = !keymap_config.swap_backslash_backspace;
     }
     }
+    eeconfig_write_keymap(keymap_config.raw);
 }
 
 bool bootmagic_scan_keycode(uint8_t keycode)
 }
 
 bool bootmagic_scan_keycode(uint8_t keycode)
index 5791b221f41c265213240e17a207134bbe5b9537..2e7496ebc5a7eae774d59cd4f8471411dbe381de 100644 (file)
@@ -2,71 +2,45 @@
 #define BOOTMAGIC_H
 
 
 #define BOOTMAGIC_H
 
 
-#ifndef BOOTMAGIC_IS_ENABLED
-#define BOOTMAGIC_IS_ENABLED()          true
+#ifndef BOOTMAGIC_KEY_SKIP
+#define BOOTMAGIC_KEY_SKIP              KC_ESC
+#endif
+
+/* eeprom clear */
+#ifndef BOOTMAGIC_KEY_EEPROM_CLEAR
+#define BOOTMAGIC_KEY_EEPROM_CLEAR      KC_BSPACE
 #endif
 
 /* kick up bootloader */
 #endif
 
 /* kick up bootloader */
-#ifndef BOOTMAGIC_BOOTLOADER_KEY
-#define BOOTMAGIC_BOOTLOADER_KEY        KC_B
+#ifndef BOOTMAGIC_KEY_BOOTLOADER
+#define BOOTMAGIC_KEY_BOOTLOADER        KC_B
 #endif
 #endif
+
 /* debug enable */
 /* debug enable */
-#ifndef BOOTMAGIC_DEBUG_ENABLE_KEY
-#define BOOTMAGIC_DEBUG_ENABLE_KEY      KC_D
-#endif
-/* eeprom clear */
-#ifndef BOOTMAGIC_EEPROM_CLEAR_KEY
-#define BOOTMAGIC_EEPROM_CLEAR_KEY      KC_BSPACE
-#endif
+#define BOOTMAGIC_KEY_DEBUG_ENABLE      KC_D
+#define BOOTMAGIC_KEY_DEBUG_MATRIX      KC_X
+#define BOOTMAGIC_KEY_DEBUG_KEYBOARD    KC_K
+#define BOOTMAGIC_KEY_DEBUG_MOUSE       KC_M
 
 /*
 
 /*
- * key configure
+ * keymap config
  */
  */
-/* swap control and capslock */
-#ifndef BOOTMAGIC_SWAP_CONTROL_CPASLOCK
-#define BOOTMAGIC_SWAP_CONTROL_CPASLOCK     KC_LCTRL
-#endif
-/* capslock to control */
-#ifndef BOOTMAGIC_CAPSLOCK_TO_CONTROL
-#define BOOTMAGIC_CAPSLOCK_TO_CONTROL       KC_CAPSLOCK
-#endif
-/* swap alt and gui */
-#ifndef BOOTMAGIC_SWAP_LALT_LGUI
-#define BOOTMAGIC_SWAP_LALT_LGUI            KC_LALT
-#endif
-/* swap alt and gui */
-#ifndef BOOTMAGIC_SWAP_RALT_RGUI
-#define BOOTMAGIC_SWAP_RALT_RGUI            KC_RALT
-#endif
-/* no gui */
-#ifndef BOOTMAGIC_NO_GUI
-#define BOOTMAGIC_NO_GUI                    KC_LGUI
-#endif
-/* swap esc and grave */
-#ifndef BOOTMAGIC_SWAP_GRAVE_ESC
-#define BOOTMAGIC_SWAP_GRAVE_ESC            KC_GRAVE
-#endif
-/* swap backslash and backspace */
-#ifndef BOOTMAGIC_SWAP_BACKSLASH_BACKSPACE
-#define BOOTMAGIC_SWAP_BACKSLASH_BACKSPACE  KC_BSLASH
-#endif
+#define BOOTMAGIC_KEY_SWAP_CONTROL_CPASLOCK     KC_LCTRL
+#define BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL       KC_CAPSLOCK
+#define BOOTMAGIC_KEY_SWAP_LALT_LGUI            KC_LALT
+#define BOOTMAGIC_KEY_SWAP_RALT_RGUI            KC_RALT
+#define BOOTMAGIC_KEY_NO_GUI                    KC_LGUI
+#define BOOTMAGIC_KEY_SWAP_GRAVE_ESC            KC_GRAVE
+#define BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE  KC_BSLASH
 
 
 /*
  * change default layer
  */
 
 
 /*
  * change default layer
  */
-#ifndef BOOTMAGIC_DEFAULT_LAYER_0_KEY
-#define BOOTMAGIC_DEFAULT_LAYER_0_KEY   KC_0
-#endif
-#ifndef BOOTMAGIC_DEFAULT_LAYER_1_KEY
-#define BOOTMAGIC_DEFAULT_LAYER_1_KEY   KC_1
-#endif
-#ifndef BOOTMAGIC_DEFAULT_LAYER_2_KEY
-#define BOOTMAGIC_DEFAULT_LAYER_2_KEY   KC_2
-#endif
-#ifndef BOOTMAGIC_DEFAULT_LAYER_3_KEY
-#define BOOTMAGIC_DEFAULT_LAYER_3_KEY   KC_3
-#endif
+#define BOOTMAGIC_KEY_DEFAULT_LAYER_0   KC_0
+#define BOOTMAGIC_KEY_DEFAULT_LAYER_1   KC_1
+#define BOOTMAGIC_KEY_DEFAULT_LAYER_2   KC_2
+#define BOOTMAGIC_KEY_DEFAULT_LAYER_3   KC_3
 
 
 void bootmagic(void);
 
 
 void bootmagic(void);
index 3a1fcb186e1b82c8ac9e6881c8406722f2ec29fa..216ad06128821074f0cdc2858abaf1b82c284da0 100644 (file)
@@ -110,7 +110,7 @@ static void command_common_help(void)
     print("v:  print device version & info\n");
     print("t:  print timer count\n");
     print("s:  print status\n");
     print("v:  print device version & info\n");
     print("t:  print timer count\n");
     print("s:  print status\n");
-    print("e:  print eeprom boot config\n");
+    print("e:  print eeprom config\n");
 #ifdef NKRO_ENABLE
     print("n:  toggle NKRO\n");
 #endif
 #ifdef NKRO_ENABLE
     print("n:  toggle NKRO\n");
 #endif
@@ -125,28 +125,28 @@ static void command_common_help(void)
 }
 
 #ifdef BOOTMAGIC_ENABLE
 }
 
 #ifdef BOOTMAGIC_ENABLE
-static void print_eeprom_config(void)
+static void print_eeconfig(void)
 {
 {
-    uint8_t eebyte;
-    
-    eebyte = eeconfig_read_debug();
-    print("debug: "); print_hex8(eebyte); print("\n");
-
-    eebyte = eeconfig_read_defalt_layer();
-    print("defalt_layer: "); print_hex8(eebyte); print("\n");
-
-    eebyte = eeconfig_read_keyconf();
-    print("keyconf: "); print_hex8(eebyte); print("\n");
-
-    keyconf kc;
-    kc = (keyconf){ .raw = eebyte };
-    print("keyconf.swap_control_capslock: "); print_hex8(kc.swap_control_capslock); print("\n");
-    print("keyconf.capslock_to_control: "); print_hex8(kc.capslock_to_control); print("\n");
-    print("keyconf.swap_lalt_lgui: "); print_hex8(kc.swap_lalt_lgui); print("\n");
-    print("keyconf.swap_ralt_rgui: "); print_hex8(kc.swap_ralt_rgui); print("\n");
-    print("keyconf.no_gui: "); print_hex8(kc.no_gui); print("\n");
-    print("keyconf.swap_grave_esc: "); print_hex8(kc.swap_grave_esc); print("\n");
-    print("keyconf.swap_backslash_backspace: "); print_hex8(kc.swap_backslash_backspace); print("\n");
+    print("default_layer: "); print_dec(eeconfig_read_defalt_layer()); print("\n");
+
+    debug_config_t dc;
+    dc.raw = eeconfig_read_debug();
+    print("debug_config.raw: "); print_hex8(dc.raw); print("\n");
+    print(".enable: "); print_dec(dc.enable); print("\n");
+    print(".matrix: "); print_dec(dc.matrix); print("\n");
+    print(".keyboard: "); print_dec(dc.keyboard); print("\n");
+    print(".mouse: "); print_dec(dc.mouse); print("\n");
+
+    keymap_config_t kc;
+    kc.raw = eeconfig_read_keymap();
+    print("keymap_config.raw: "); print_hex8(kc.raw); print("\n");
+    print(".swap_control_capslock: "); print_dec(kc.swap_control_capslock); print("\n");
+    print(".capslock_to_control: "); print_dec(kc.capslock_to_control); print("\n");
+    print(".swap_lalt_lgui: "); print_dec(kc.swap_lalt_lgui); print("\n");
+    print(".swap_ralt_rgui: "); print_dec(kc.swap_ralt_rgui); print("\n");
+    print(".no_gui: "); print_dec(kc.no_gui); print("\n");
+    print(".swap_grave_esc: "); print_dec(kc.swap_grave_esc); print("\n");
+    print(".swap_backslash_backspace: "); print_dec(kc.swap_backslash_backspace); print("\n");
 }
 #endif
 
 }
 #endif
 
@@ -162,8 +162,8 @@ static bool command_common(uint8_t code)
             break;
 #ifdef BOOTMAGIC_ENABLE
         case KC_E:
             break;
 #ifdef BOOTMAGIC_ENABLE
         case KC_E:
-            print("eeprom config\n");
-            print_eeprom_config();
+            print("eeconfig:\n");
+            print_eeconfig();
             break;
 #endif
         case KC_CAPSLOCK:
             break;
 #endif
         case KC_CAPSLOCK:
diff --git a/common/debug.c b/common/debug.c
deleted file mode 100644 (file)
index e406d39..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdbool.h>
-#include "debug.h"
-
-
-bool debug_enable = false;
-bool debug_matrix = false;
-bool debug_keyboard = false;
-bool debug_mouse = false;
index e16ea14af4053786b23cbbb0b5f7042f0bdf4eeb..cac682703deccc75d23fe5d74e3ab490e3645e82 100644 (file)
@@ -79,10 +79,26 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 extern "C" {
 #endif
 
 extern "C" {
 #endif
 
-extern bool debug_enable;
-extern bool debug_matrix;
-extern bool debug_keyboard;
-extern bool debug_mouse;
+
+/* NOTE: Not portable. Bit field order depends on implementation */
+typedef union {
+    uint8_t raw;
+    struct {
+        bool enable:1;
+        bool matrix:1;
+        bool keyboard:1;
+        bool mouse:1;
+        uint8_t reserved:4;
+    };
+} debug_config_t;
+debug_config_t debug_config;
+
+/* for backward compatibility */
+#define debug_enable    (debug_config.enable)
+#define debug_matrix    (debug_config.matrix)
+#define debug_keyboard  (debug_config.keyboard)
+#define debug_mouse     (debug_config.mouse)
+
 
 #ifdef __cplusplus
 }
 
 #ifdef __cplusplus
 }
index cea3810ee30046eae643bbe234bbe45a5905751d..0481d4b9c3231c98b9396143f47b3a47c02d25bc 100644 (file)
@@ -3,13 +3,12 @@
 #include <avr/eeprom.h>
 #include "eeconfig.h"
 
 #include <avr/eeprom.h>
 #include "eeconfig.h"
 
-
 void eeconfig_init(void)
 {
     eeprom_write_word(EECONFIG_MAGIC,          EECONFIG_MAGIC_NUMBER);
     eeprom_write_byte(EECONFIG_DEBUG,          0);
     eeprom_write_byte(EECONFIG_DEFAULT_LAYER,  0);
 void eeconfig_init(void)
 {
     eeprom_write_word(EECONFIG_MAGIC,          EECONFIG_MAGIC_NUMBER);
     eeprom_write_byte(EECONFIG_DEBUG,          0);
     eeprom_write_byte(EECONFIG_DEFAULT_LAYER,  0);
-    eeprom_write_byte(EECONFIG_KEYCONF,        0);
+    eeprom_write_byte(EECONFIG_KEYMAP,         0);
     eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
 }
 
     eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
 }
 
@@ -25,7 +24,7 @@ void eeconfig_disable(void)
 
 bool eeconfig_is_enabled(void)
 {
 
 bool eeconfig_is_enabled(void)
 {
-    return EECONFIG_IS_ENABLED() && (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER);
+    return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER);
 }
 
 uint8_t eeconfig_read_debug(void)      { return eeprom_read_byte(EECONFIG_DEBUG); }
 }
 
 uint8_t eeconfig_read_debug(void)      { return eeprom_read_byte(EECONFIG_DEBUG); }
@@ -34,5 +33,5 @@ void eeconfig_write_debug(uint8_t val) { eeprom_write_byte(EECONFIG_DEBUG, val);
 uint8_t eeconfig_read_defalt_layer(void)      { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); }
 void eeconfig_write_defalt_layer(uint8_t val) { eeprom_write_byte(EECONFIG_DEFAULT_LAYER, val); }
 
 uint8_t eeconfig_read_defalt_layer(void)      { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); }
 void eeconfig_write_defalt_layer(uint8_t val) { eeprom_write_byte(EECONFIG_DEFAULT_LAYER, val); }
 
-uint8_t eeconfig_read_keyconf(void)      { return eeprom_read_byte(EECONFIG_KEYCONF); }
-void eeconfig_write_keyconf(uint8_t val) { eeprom_write_byte(EECONFIG_KEYCONF, val); }
+uint8_t eeconfig_read_keymap(void)      { return eeprom_read_byte(EECONFIG_KEYMAP); }
+void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val); }
index 3e195478b5a232818b6be8b3339fb95cdaea883c..526cee78364b7b60e702b9229d094ef897a10426 100644 (file)
@@ -20,50 +20,32 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 
 
 #include <stdint.h>
 
-#ifndef EECONFIG_IS_ENABLED
-#define EECONFIG_IS_ENABLED()       true
-#endif
 
 
-#define EECONFIG_MAGIC_NUMBER                   (uint16_t)0xFEED
+#define EECONFIG_MAGIC_NUMBER                       (uint16_t)0xFEED
 
 /* eeprom parameteter address */
 
 /* eeprom parameteter address */
-#define EECONFIG_MAGIC                          (uint16_t *)0
-#define EECONFIG_DEBUG                          (uint8_t *)2
-#define EECONFIG_DEFAULT_LAYER                  (uint8_t *)3
-#define EECONFIG_KEYCONF                        (uint8_t *)4
-#define EECONFIG_MOUSEKEY_ACCEL                 (uint8_t *)5
+#define EECONFIG_MAGIC                              (uint16_t *)0
+#define EECONFIG_DEBUG                              (uint8_t *)2
+#define EECONFIG_DEFAULT_LAYER                      (uint8_t *)3
+#define EECONFIG_KEYMAP                             (uint8_t *)4
+#define EECONFIG_MOUSEKEY_ACCEL                     (uint8_t *)5
 
 
 /* debug bit */
 
 
 /* debug bit */
-#define EECONFIG_DEBUG_ENABLE                   (1<<0)
-#define EECONFIG_DEBUG_MATRIX                   (1<<1)
-#define EECONFIG_DEBUG_KEYBOARD                 (1<<2)
-#define EECONFIG_DEBUG_MOUSE                    (1<<3)
+#define EECONFIG_DEBUG_ENABLE                       (1<<0)
+#define EECONFIG_DEBUG_MATRIX                       (1<<1)
+#define EECONFIG_DEBUG_KEYBOARD                     (1<<2)
+#define EECONFIG_DEBUG_MOUSE                        (1<<3)
 
 /* keyconf bit */
 
 /* keyconf bit */
-#define EECONFIG_KEYCONF_SWAP_CONTROL_CAPSLOCK     (1<<0)
-#define EECONFIG_KEYCONF_CAPSLOCK_TO_CONTROL       (1<<1)
-#define EECONFIG_KEYCONF_SWAP_LALT_LGUI            (1<<2)
-#define EECONFIG_KEYCONF_SWAP_RALT_RGUI            (1<<3)
-#define EECONFIG_KEYCONF_NO_GUI                    (1<<4)
-#define EECONFIG_KEYCONF_SWAP_GRAVE_ESC            (1<<5)
-#define EECONFIG_KEYCONF_SWAP_BACKSLASH_BACKSPACE  (1<<6)
-
-
-/* XXX: Not portable. Bit field order depends on implementation */
-typedef union {
-    uint8_t raw;
-    struct {
-        bool swap_control_capslock:1;
-        bool capslock_to_control:1;
-        bool swap_lalt_lgui:1;
-        bool swap_ralt_rgui:1;
-        bool no_gui:1;
-        bool swap_grave_esc:1;
-        bool swap_backslash_backspace:1;
-        bool reserved:1;
-    };
-} keyconf;
+#define EECONFIG_KEYMAP_SWAP_CONTROL_CAPSLOCK       (1<<0)
+#define EECONFIG_KEYMAP_CAPSLOCK_TO_CONTROL         (1<<1)
+#define EECONFIG_KEYMAP_SWAP_LALT_LGUI              (1<<2)
+#define EECONFIG_KEYMAP_SWAP_RALT_RGUI              (1<<3)
+#define EECONFIG_KEYMAP_NO_GUI                      (1<<4)
+#define EECONFIG_KEYMAP_SWAP_GRAVE_ESC              (1<<5)
+#define EECONFIG_KEYMAP_SWAP_BACKSLASH_BACKSPACE    (1<<6)
+
 
 bool eeconfig_is_enabled(void);
 
 
 bool eeconfig_is_enabled(void);
 
@@ -79,7 +61,7 @@ void eeconfig_write_debug(uint8_t val);
 uint8_t eeconfig_read_defalt_layer(void);
 void eeconfig_write_defalt_layer(uint8_t val);
 
 uint8_t eeconfig_read_defalt_layer(void);
 void eeconfig_write_defalt_layer(uint8_t val);
 
-uint8_t eeconfig_read_keyconf(void);
-void eeconfig_write_keyconf(uint8_t val);
+uint8_t eeconfig_read_keymap(void);
+void eeconfig_write_keymap(uint8_t val);
 
 #endif
 
 #endif
index cb0dc06e60903285ebe976eac0e8e3d1706fd53d..6bc6fae6e25f55bf5e2b2bedb9b2c079b3a9f132 100644 (file)
@@ -64,18 +64,6 @@ void keyboard_init(void)
 
 #ifdef BOOTMAGIC_ENABLE
     bootmagic();
 
 #ifdef BOOTMAGIC_ENABLE
     bootmagic();
-
-    if (eeconfig_is_enabled()) {
-        uint8_t config;
-        config = eeconfig_read_debug();
-        // 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();
-    }
 #endif
 }
 
 #endif
 }
 
index 572d922c6293084595d9421484eccd3519d22cec..8e2b8607c8339d78e8a3c37af580bcc710197b16 100644 (file)
@@ -34,6 +34,70 @@ action_t action_for_key(uint8_t layer, key_t key)
     switch (keycode) {
         case KC_FN0 ... KC_FN31:
             return keymap_fn_to_action(keycode);
     switch (keycode) {
         case KC_FN0 ... KC_FN31:
             return keymap_fn_to_action(keycode);
+#ifdef BOOTMAGIC_ENABLE
+        case KC_CAPSLOCK:
+            if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
+                return keycode_to_action(KC_LCTL);
+            }
+            return keycode_to_action(KC_CAPS);
+        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(ACTION_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(ACTION_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(ACTION_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(ACTION_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:
             return keycode_to_action(keycode);
     }
         default:
             return keycode_to_action(keycode);
     }
index 7efd91f704ab7fcd0f80080857337553998097d1..bf32acedad7fd08e05894f22e4607816277534cc 100644 (file)
@@ -23,6 +23,25 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action.h"
 
 
 #include "action.h"
 
 
+#ifdef BOOTMAGIC_ENABLE
+/* NOTE: Not portable. Bit field order depends on implementation */
+typedef union {
+    uint8_t raw;
+    struct {
+        bool swap_control_capslock:1;
+        bool capslock_to_control:1;
+        bool swap_lalt_lgui:1;
+        bool swap_ralt_rgui:1;
+        bool no_gui:1;
+        bool swap_grave_esc:1;
+        bool swap_backslash_backspace:1;
+        bool reserved:1;
+    };
+} keymap_config_t;
+keymap_config_t keymap_config;
+#endif
+
+
 /* translates key to keycode */
 uint8_t keymap_key_to_keycode(uint8_t layer, key_t key);
 
 /* translates key to keycode */
 uint8_t keymap_key_to_keycode(uint8_t layer, key_t key);