diff options
| author | Wilba <Jason.S.Williams@gmail.com> | 2020-02-18 12:54:13 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-17 17:54:13 -0800 |
| commit | 79d5903b6c5fff57712f02bc6fee888fcde414ce (patch) | |
| tree | 0c3cb327532c480e11adef34d3f912315d0e35a8 /quantum/dynamic_keymap.c | |
| parent | a2081171de25099b0e6be6faa08954ceff2a953b (diff) | |
| download | qmk_firmware-79d5903b6c5fff57712f02bc6fee888fcde414ce.tar.gz qmk_firmware-79d5903b6c5fff57712f02bc6fee888fcde414ce.zip | |
dynamic keymap sanity check (#8181)
Diffstat (limited to 'quantum/dynamic_keymap.c')
| -rw-r--r-- | quantum/dynamic_keymap.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c index 0d8ea56b7..f4120b118 100644 --- a/quantum/dynamic_keymap.c +++ b/quantum/dynamic_keymap.c | |||
| @@ -30,6 +30,14 @@ | |||
| 30 | # define DYNAMIC_KEYMAP_MACRO_COUNT 16 | 30 | # define DYNAMIC_KEYMAP_MACRO_COUNT 16 |
| 31 | #endif | 31 | #endif |
| 32 | 32 | ||
| 33 | // This is the default EEPROM max address to use for dynamic keymaps. | ||
| 34 | // The default is the ATmega32u4 EEPROM max address. | ||
| 35 | // Explicitly override it if the keyboard uses a microcontroller with | ||
| 36 | // more EEPROM *and* it makes sense to increase it. | ||
| 37 | #ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR | ||
| 38 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023 | ||
| 39 | #endif | ||
| 40 | |||
| 33 | // If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h, | 41 | // If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h, |
| 34 | // default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE | 42 | // default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE |
| 35 | #ifndef DYNAMIC_KEYMAP_EEPROM_ADDR | 43 | #ifndef DYNAMIC_KEYMAP_EEPROM_ADDR |
| @@ -45,11 +53,19 @@ | |||
| 45 | # define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2)) | 53 | # define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2)) |
| 46 | #endif | 54 | #endif |
| 47 | 55 | ||
| 48 | // Dynamic macro uses up all remaining memory | 56 | // Sanity check that dynamic keymaps fit in available EEPROM |
| 49 | // Assumes 1K EEPROM on ATMega32U4 | 57 | // If there's not 100 bytes available for macros, then something is wrong. |
| 50 | // Override for anything different | 58 | // The keyboard should override DYNAMIC_KEYMAP_LAYER_COUNT to reduce it, |
| 59 | // or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has | ||
| 60 | // more than the default. | ||
| 61 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR < 100 | ||
| 62 | # error Dynamic keymaps are configured to use more EEPROM than is available. | ||
| 63 | #endif | ||
| 64 | |||
| 65 | // Dynamic macros are stored after the keymaps and use what is available | ||
| 66 | // up to and including DYNAMIC_KEYMAP_EEPROM_MAX_ADDR. | ||
| 51 | #ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE | 67 | #ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE |
| 52 | # define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (1024 - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR) | 68 | # define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1) |
| 53 | #endif | 69 | #endif |
| 54 | 70 | ||
| 55 | uint8_t dynamic_keymap_get_layer_count(void) { return DYNAMIC_KEYMAP_LAYER_COUNT; } | 71 | uint8_t dynamic_keymap_get_layer_count(void) { return DYNAMIC_KEYMAP_LAYER_COUNT; } |
