diff options
author | Drashna Jael're <drashna@live.com> | 2022-11-08 17:14:27 -0800 |
---|---|---|
committer | Drashna Jael're <drashna@live.com> | 2022-11-08 17:14:27 -0800 |
commit | 64f04b30c2f48fc0e7c49ca043443f03dc56df94 (patch) | |
tree | e0f374d3b92bacefd22c31e7bda8ee1c6fcb37de /quantum/dynamic_keymap.c | |
parent | d9f575fa86ca10b990958d4e677c6a0a387dc7c3 (diff) | |
parent | 96c48a5f4aa461ed31fd4ee61151ac206e16fb5f (diff) |
Merge tag '0.18.16' into firmware22
Diffstat (limited to 'quantum/dynamic_keymap.c')
-rw-r--r-- | quantum/dynamic_keymap.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c index 9570882771..6a33d14374 100644 --- a/quantum/dynamic_keymap.c +++ b/quantum/dynamic_keymap.c @@ -21,6 +21,13 @@ #include "eeconfig.h" #include "dynamic_keymap.h" +#ifdef VIA_ENABLE +# include "via.h" // for VIA_EEPROM_CONFIG_END +# define DYNAMIC_KEYMAP_EEPROM_START (VIA_EEPROM_CONFIG_END) +#else +# define DYNAMIC_KEYMAP_EEPROM_START (EECONFIG_SIZE) +#endif + #ifdef ENCODER_ENABLE # include "encoder.h" #else @@ -55,17 +62,8 @@ #endif // If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h, -// default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE #ifndef DYNAMIC_KEYMAP_EEPROM_ADDR -# ifdef VIA_ENABLE -# ifdef VIA_EEPROM_CUSTOM_CONFIG_ADDR -# define DYNAMIC_KEYMAP_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR + VIA_EEPROM_CUSTOM_CONFIG_SIZE) -# else -# error DYNAMIC_KEYMAP_EEPROM_ADDR not defined -# endif -# else -# define DYNAMIC_KEYMAP_EEPROM_ADDR EECONFIG_SIZE -# endif +# define DYNAMIC_KEYMAP_EEPROM_ADDR DYNAMIC_KEYMAP_EEPROM_START #endif // Dynamic encoders starts after dynamic keymaps @@ -97,6 +95,10 @@ _Static_assert((DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) - (DYNAMIC_KEYMAP_MACRO_EEPROM_A # define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1) #endif +#ifndef DYNAMIC_KEYMAP_MACRO_DELAY +# define DYNAMIC_KEYMAP_MACRO_DELAY TAP_CODE_DELAY +#endif + uint8_t dynamic_keymap_get_layer_count(void) { return DYNAMIC_KEYMAP_LAYER_COUNT; } @@ -148,18 +150,25 @@ void dynamic_keymap_set_encoder(uint8_t layer, uint8_t encoder_id, bool clockwis void dynamic_keymap_reset(void) { // 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])); + if (layer < keymap_layer_count()) { + dynamic_keymap_set_keycode(layer, row, column, pgm_read_word(&keymaps[layer][row][column])); + } else { + dynamic_keymap_set_keycode(layer, row, column, KC_TRANSPARENT); + } } } #ifdef ENCODER_MAP_ENABLE for (int encoder = 0; encoder < NUM_ENCODERS; encoder++) { - dynamic_keymap_set_encoder(layer, encoder, true, pgm_read_word(&encoder_map[layer][encoder][0])); - dynamic_keymap_set_encoder(layer, encoder, false, pgm_read_word(&encoder_map[layer][encoder][1])); + if (layer < encodermap_layer_count()) { + dynamic_keymap_set_encoder(layer, encoder, true, pgm_read_word(&encoder_map[layer][encoder][0])); + dynamic_keymap_set_encoder(layer, encoder, false, pgm_read_word(&encoder_map[layer][encoder][1])); + } else { + dynamic_keymap_set_encoder(layer, encoder, true, KC_TRANSPARENT); + dynamic_keymap_set_encoder(layer, encoder, false, KC_TRANSPARENT); + } } #endif // ENCODER_MAP_ENABLE } @@ -304,6 +313,6 @@ void dynamic_keymap_macro_send(uint8_t id) { break; } } - send_string(data); + send_string_with_delay(data, DYNAMIC_KEYMAP_MACRO_DELAY); } } |