summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/dynamic_keymap.c42
-rw-r--r--quantum/dynamic_keymap.h7
2 files changed, 17 insertions, 32 deletions
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 9f18612d56..2c989d6918 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -16,6 +16,8 @@
 
 #include "config.h"
 #include "keymap.h" // to get keymaps[][][]
+#include "tmk_core/common/eeprom.h"
+#include "progmem.h"// to read default from flash
 
 #include "dynamic_keymap.h"
 
@@ -29,8 +31,6 @@
 #error DYNAMIC_KEYMAP_LAYER_COUNT not defined
 #endif
 
-#define KC_EENULL 0xFFFF // TODO: move to enum quantum_keycodes
-
 void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column)
 {
 	// TODO: optimize this with some left shifts
@@ -55,16 +55,15 @@ void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint
 	eeprom_update_byte(address+1, (uint8_t)(keycode & 0xFF));
 }
 
-void dynamic_keymap_clear_all(void)
+void dynamic_keymap_reset(void)
 {
-	// Save "empty" keymaps.
-	for ( int layer = 0; layer < DYNAMIC_KEYMAP_LAYER_COUNT; layer++ )
-	{
-		for ( int row = 0; row < MATRIX_ROWS; row++ )
-		{
-			for ( int column = 0; column < MATRIX_COLS; column++ )
-			{
-				dynamic_keymap_set_keycode(layer, row, column, KC_EENULL);
+	// Reset the keymaps in EEPROM to what is in flash.
+	// All keyboards using dynamic keymaps should define a layout
+	// for the same number of layers as DYNAMIC_KEYMAP_LAYER_COUNT.
+	for ( int layer = 0; layer < DYNAMIC_KEYMAP_LAYER_COUNT; layer++ )	{
+		for ( int row = 0; row < MATRIX_ROWS; row++ ) {
+			for ( int column = 0; column < MATRIX_COLS; column++ )	{
+				dynamic_keymap_set_keycode(layer, row, column, pgm_read_word(&keymaps[layer][row][column]));
 			}
 		}
 	}
@@ -73,24 +72,13 @@ void dynamic_keymap_clear_all(void)
 // This overrides the one in quantum/keymap_common.c
 uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 {
-	// This used to test EEPROM for magic bytes, but it was redundant.
-	// Test for EEPROM usage change (fresh install, address change, etc.)
-	// externally and call dynamic_keymap_default_save()
 	if ( layer < DYNAMIC_KEYMAP_LAYER_COUNT &&
-		 key.row < MATRIX_ROWS && // possibly redundant
-		 key.col < MATRIX_COLS ) // possibly redundant
-	{
-		uint16_t keycode = dynamic_keymap_get_keycode(layer, key.row, key.col);
-
-		// If keycode is not "empty", return it, otherwise
-		// drop down to return the one in flash
-		if ( keycode != KC_EENULL)
-		{
-			return keycode;
-		}
+			key.row < MATRIX_ROWS &&
+			key.col < MATRIX_COLS ) {
+		return dynamic_keymap_get_keycode(layer, key.row, key.col);
+	} else {
+		return KC_NO;
 	}
-
-	return pgm_read_word(&keymaps[layer][key.row][key.col]);
 }
 
 #endif // DYNAMIC_KEYMAP_ENABLE
diff --git a/quantum/dynamic_keymap.h b/quantum/dynamic_keymap.h
index b0133aeb85..bd76adae20 100644
--- a/quantum/dynamic_keymap.h
+++ b/quantum/dynamic_keymap.h
@@ -13,9 +13,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-
-#ifndef DYNAMIC_KEYMAP_H
-#define DYNAMIC_KEYMAP_H
+#pragma once
 
 #include <stdint.h>
 #include <stdbool.h>
@@ -23,9 +21,8 @@
 void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column);
 uint16_t dynamic_keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t column);
 void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode);
-void dynamic_keymap_clear_all(void);
+void dynamic_keymap_reset(void);
 
 // This overrides the one in quantum/keymap_common.c
 // uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
 
-#endif //DYNAMIC_KEYMAP_H