mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-17 05:02:07 +00:00
more keyboard whack-a-mole
This commit is contained in:
parent
a368efc4d7
commit
263b514ab4
@ -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
|
||||
|
@ -14,6 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "keycode_lookup.h"
|
||||
#include "quantum_keycodes.h"
|
||||
#include "keymap_us.h"
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user