From 263b514ab49a93d236a7272d34d342944b241530 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Tue, 3 Sep 2024 13:37:26 +1000 Subject: [PATCH] more keyboard whack-a-mole --- builddefs/common_features.mk | 9 ++++++--- keyboards/rocketboard_16/keycode_lookup.c | 1 + keyboards/system76/launch_1/launch_1.c | 23 ++++++++++++++++++----- keyboards/xelus/la_plus/rgb_matrix_kb.inc | 2 +- quantum/nvm/eeprom/nvm_dynamic_keymap.c | 21 +++++++++++---------- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 60ff9b0120f..33bb4d3ac60 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -629,9 +629,7 @@ ifeq ($(strip $(VIA_ENABLE)), yes) TRI_LAYER_ENABLE := yes QUANTUM_SRC += \ - nvm_via.c \ - nvm_dynamic_keymap.c - # TODO: move `nvm_dynamic_keymap.c` to be guarded by `DYNAMIC_KEYMAP_ENABLE = yes` + nvm_via.c endif VALID_CUSTOM_MATRIX_TYPES:= yes lite no @@ -986,3 +984,8 @@ ifeq ($(strip $(UART_DRIVER_REQUIRED)), yes) QUANTUM_LIB_SRC += uart.c endif endif + +DYNAMIC_KEYMAP_ENABLE ?= no +ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes) + QUANTUM_LIB_SRC += nvm_dynamic_keymap.c +endif diff --git a/keyboards/rocketboard_16/keycode_lookup.c b/keyboards/rocketboard_16/keycode_lookup.c index 41fd5c8537d..a29808d04d0 100644 --- a/keyboards/rocketboard_16/keycode_lookup.c +++ b/keyboards/rocketboard_16/keycode_lookup.c @@ -14,6 +14,7 @@ * along with this program. If not, see . */ +#include #include "keycode_lookup.h" #include "quantum_keycodes.h" #include "keymap_us.h" diff --git a/keyboards/system76/launch_1/launch_1.c b/keyboards/system76/launch_1/launch_1.c index dbe697c19db..43312c554ae 100644 --- a/keyboards/system76/launch_1/launch_1.c +++ b/keyboards/system76/launch_1/launch_1.c @@ -73,17 +73,30 @@ led_config_t g_led_config = { { } }; #endif // RGB_MATRIX_ENABLE -bool eeprom_is_valid(void) { +typedef union launch_1_eeprom_t { + struct { + uint16_t magic; + uint8_t version; + }; + uint32_t raw; +} launch_1_eeprom_t; + +bool eeprom_is_valid(void) { + launch_1_eeprom_t eeprom; + eeprom.raw = eeconfig_read_kb(); return ( - eeprom_read_word(((void *)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC && - eeprom_read_byte(((void *)EEPROM_VERSION_ADDR)) == EEPROM_VERSION + eeprom.magic == EEPROM_MAGIC && + eeprom.version == EEPROM_VERSION ); } // clang-format on void eeprom_set_valid(bool valid) { - eeprom_update_word(((void *)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF); - eeprom_update_byte(((void *)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF); + launch_1_eeprom_t eeprom = { + .magic = valid ? EEPROM_MAGIC : 0xFFFF, + .version = valid ? EEPROM_VERSION : 0xFF, + }; + eeconfig_update_kb(eeprom.raw); } void bootmagic_lite_reset_eeprom(void) { diff --git a/keyboards/xelus/la_plus/rgb_matrix_kb.inc b/keyboards/xelus/la_plus/rgb_matrix_kb.inc index aee484cdb83..036bc5e7f58 100644 --- a/keyboards/xelus/la_plus/rgb_matrix_kb.inc +++ b/keyboards/xelus/la_plus/rgb_matrix_kb.inc @@ -31,7 +31,7 @@ static void startup_animation_setleds(effect_params_t* params, bool dots) { } else if (num == 0 || num == 1 || num == 2) { return; } else if (num >= 22) { - eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config)); + eeconfig_read_rgb_matrix(&rgb_matrix_config); rgb_matrix_mode_noeeprom(rgb_matrix_config.mode); return; } diff --git a/quantum/nvm/eeprom/nvm_dynamic_keymap.c b/quantum/nvm/eeprom/nvm_dynamic_keymap.c index 9388a9223be..fc6fd871d5b 100644 --- a/quantum/nvm/eeprom/nvm_dynamic_keymap.c +++ b/quantum/nvm/eeprom/nvm_dynamic_keymap.c @@ -1,6 +1,7 @@ // Copyright 2024 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later +#include "keycodes.h" #include "eeprom.h" #include "dynamic_keymap.h" #include "nvm_dynamic_keymap.h" @@ -115,10 +116,10 @@ void nvm_dynamic_keymap_update_encoder(uint8_t layer, uint8_t encoder_id, bool c #endif // ENCODER_MAP_ENABLE void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) { - uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2; - void * source = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset); + uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2; + void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset); uint8_t *target = data; - for (uint16_t i = 0; i < size; i++) { + for (uint32_t i = 0; i < size; i++) { if (offset + i < dynamic_keymap_eeprom_size) { *target = eeprom_read_byte(source); } else { @@ -130,10 +131,10 @@ void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *dat } void nvm_dynamic_keymap_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) { - uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2; - void * target = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset); + uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2; + void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset); uint8_t *source = data; - for (uint16_t i = 0; i < size; i++) { + for (uint32_t i = 0; i < size; i++) { if (offset + i < dynamic_keymap_eeprom_size) { eeprom_update_byte(target, *source); } @@ -147,7 +148,7 @@ uint32_t nvm_dynamic_keymap_macro_size(void) { } void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) { - void * source = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset); + void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset); uint8_t *target = data; for (uint16_t i = 0; i < size; i++) { if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) { @@ -161,7 +162,7 @@ void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_ } void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) { - void * target = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset); + void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset); uint8_t *source = data; for (uint16_t i = 0; i < size; i++) { if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) { @@ -173,8 +174,8 @@ void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint } void nvm_dynamic_keymap_macro_reset(void) { - void *p = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR); - void *end = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE); + void *p = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR); + void *end = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE); while (p != end) { eeprom_update_byte(p, 0); ++p;