Offset and length for datablocks.

This commit is contained in:
Nick Brassel 2024-09-03 09:45:14 +10:00
parent f78412d841
commit 298f360eb1
No known key found for this signature in database
9 changed files with 70 additions and 65 deletions

View File

@ -32,7 +32,7 @@ void eeconfig_init_kb(void) {
} }
} }
// Write default value to EEPROM now // Write default value to EEPROM now
eeconfig_update_kb_datablock(&eeprom_ec_config); eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user(); eeconfig_init_user();
} }
@ -40,7 +40,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup // On Keyboard startup
void keyboard_post_init_kb(void) { void keyboard_post_init_kb(void) {
// Read custom menu variables from memory // Read custom menu variables from memory
eeconfig_read_kb_datablock(&eeprom_ec_config); eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values // Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode; ec_config.actuation_mode = eeprom_ec_config.actuation_mode;

View File

@ -262,7 +262,7 @@ void ec_save_threshold_data(uint8_t option) {
eeprom_ec_config.mode_1_release_offset = ec_config.mode_1_release_offset; eeprom_ec_config.mode_1_release_offset = ec_config.mode_1_release_offset;
ec_rescale_values(2); ec_rescale_values(2);
} }
eeconfig_update_kb_datablock(&eeprom_ec_config); eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
uprintf("####################################\n"); uprintf("####################################\n");
uprintf("# New thresholds applied and saved #\n"); uprintf("# New thresholds applied and saved #\n");
uprintf("####################################\n"); uprintf("####################################\n");
@ -287,7 +287,7 @@ void ec_save_bottoming_reading(void) {
ec_rescale_values(0); ec_rescale_values(0);
ec_rescale_values(1); ec_rescale_values(1);
ec_rescale_values(2); ec_rescale_values(2);
eeconfig_update_kb_datablock(&eeprom_ec_config); eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
} }
// Show the calibration data // Show the calibration data

View File

@ -44,7 +44,7 @@ void eeconfig_init_kb(void) {
} }
} }
// Write default value to EEPROM now // Write default value to EEPROM now
eeconfig_update_kb_datablock(&eeprom_ec_config); eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user(); eeconfig_init_user();
} }
@ -52,7 +52,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup // On Keyboard startup
void keyboard_post_init_kb(void) { void keyboard_post_init_kb(void) {
// Read custom menu variables from memory // Read custom menu variables from memory
eeconfig_read_kb_datablock(&eeprom_ec_config); eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values // Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode; ec_config.actuation_mode = eeprom_ec_config.actuation_mode;

View File

@ -44,7 +44,7 @@ void eeconfig_init_kb(void) {
} }
} }
// Write default value to EEPROM now // Write default value to EEPROM now
eeconfig_update_kb_datablock(&eeprom_ec_config); eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user(); eeconfig_init_user();
} }
@ -52,7 +52,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup // On Keyboard startup
void keyboard_post_init_kb(void) { void keyboard_post_init_kb(void) {
// Read custom menu variables from memory // Read custom menu variables from memory
eeconfig_read_kb_datablock(&eeprom_ec_config); eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values // Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode; ec_config.actuation_mode = eeprom_ec_config.actuation_mode;

View File

@ -245,11 +245,11 @@ void eeconfig_update_handedness(bool val) {
bool eeconfig_is_kb_datablock_valid(void) { bool eeconfig_is_kb_datablock_valid(void) {
return nvm_eeconfig_is_kb_datablock_valid(); return nvm_eeconfig_is_kb_datablock_valid();
} }
void eeconfig_read_kb_datablock(void *data) { uint32_t eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length) {
nvm_eeconfig_read_kb_datablock(data); return nvm_eeconfig_read_kb_datablock(data, offset, length);
} }
void eeconfig_update_kb_datablock(const void *data) { uint32_t eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length) {
nvm_eeconfig_update_kb_datablock(data); return nvm_eeconfig_update_kb_datablock(data, offset, length);
} }
__attribute__((weak)) void eeconfig_init_kb_datablock(void) { __attribute__((weak)) void eeconfig_init_kb_datablock(void) {
nvm_eeconfig_init_kb_datablock(); nvm_eeconfig_init_kb_datablock();
@ -260,11 +260,11 @@ __attribute__((weak)) void eeconfig_init_kb_datablock(void) {
bool eeconfig_is_user_datablock_valid(void) { bool eeconfig_is_user_datablock_valid(void) {
return nvm_eeconfig_is_user_datablock_valid(); return nvm_eeconfig_is_user_datablock_valid();
} }
void eeconfig_read_user_datablock(void *data) { uint32_t eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length) {
nvm_eeconfig_read_user_datablock(data); return nvm_eeconfig_read_user_datablock(data, offset, length);
} }
void eeconfig_update_user_datablock(const void *data) { uint32_t eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length) {
nvm_eeconfig_update_user_datablock(data); return nvm_eeconfig_update_user_datablock(data, offset, length);
} }
__attribute__((weak)) void eeconfig_init_user_datablock(void) { __attribute__((weak)) void eeconfig_init_user_datablock(void) {
nvm_eeconfig_init_user_datablock(); nvm_eeconfig_init_user_datablock();

View File

@ -138,15 +138,15 @@ void eeconfig_update_handedness(bool val);
#if (EECONFIG_KB_DATA_SIZE) > 0 #if (EECONFIG_KB_DATA_SIZE) > 0
bool eeconfig_is_kb_datablock_valid(void); bool eeconfig_is_kb_datablock_valid(void);
void eeconfig_read_kb_datablock(void *data); uint32_t eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length);
void eeconfig_update_kb_datablock(const void *data); uint32_t eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length);
void eeconfig_init_kb_datablock(void); void eeconfig_init_kb_datablock(void);
#endif // (EECONFIG_KB_DATA_SIZE) > 0 #endif // (EECONFIG_KB_DATA_SIZE) > 0
#if (EECONFIG_USER_DATA_SIZE) > 0 #if (EECONFIG_USER_DATA_SIZE) > 0
bool eeconfig_is_user_datablock_valid(void); bool eeconfig_is_user_datablock_valid(void);
void eeconfig_read_user_datablock(void *data); uint32_t eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length);
void eeconfig_update_user_datablock(const void *data); uint32_t eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length);
void eeconfig_init_user_datablock(void); void eeconfig_init_user_datablock(void);
#endif // (EECONFIG_USER_DATA_SIZE) > 0 #endif // (EECONFIG_USER_DATA_SIZE) > 0

View File

@ -3,8 +3,9 @@
#include <string.h> #include <string.h>
#include "nvm_eeconfig.h" #include "nvm_eeconfig.h"
#include "nvm_eeconfig_eeprom.h" #include "nvm_eeconfig_eeprom.h"
#include "eeprom.h" #include "util.h"
#include "eeconfig.h" #include "eeconfig.h"
#include "eeprom.h"
#if defined(EEPROM_DRIVER) #if defined(EEPROM_DRIVER)
# include "eeprom_driver.h" # include "eeprom_driver.h"
@ -176,22 +177,30 @@ bool nvm_eeconfig_is_kb_datablock_valid(void) {
return eeprom_read_dword(EECONFIG_KEYBOARD) == (EECONFIG_KB_DATA_VERSION); return eeprom_read_dword(EECONFIG_KEYBOARD) == (EECONFIG_KB_DATA_VERSION);
} }
void nvm_eeconfig_read_kb_datablock(void *data) { uint32_t nvm_eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length) {
if (eeconfig_is_kb_datablock_valid()) { if (eeconfig_is_kb_datablock_valid()) {
eeprom_read_block(data, EECONFIG_KB_DATABLOCK, (EECONFIG_KB_DATA_SIZE)); void *ee_start = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + offset);
void *ee_end = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + MIN(EECONFIG_KB_DATA_SIZE, offset + length));
eeprom_read_block(data, ee_start, ee_end - ee_start);
return ee_end - ee_start;
} else { } else {
memset(data, 0, (EECONFIG_KB_DATA_SIZE)); memset(data, 0, length);
return length;
} }
} }
void nvm_eeconfig_update_kb_datablock(const void *data) { uint32_t nvm_eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length) {
eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION)); eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION));
eeprom_update_block(data, EECONFIG_KB_DATABLOCK, (EECONFIG_KB_DATA_SIZE));
void *ee_start = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + offset);
void *ee_end = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + MIN(EECONFIG_KB_DATA_SIZE, offset + length));
eeprom_update_block(data, ee_start, ee_end - ee_start);
return ee_end - ee_start;
} }
void nvm_eeconfig_init_kb_datablock(void) { void nvm_eeconfig_init_kb_datablock(void) {
uint8_t dummy_kb[(EECONFIG_KB_DATA_SIZE)] = {0}; uint8_t dummy_kb[(EECONFIG_KB_DATA_SIZE)] = {0};
eeconfig_update_kb_datablock(dummy_kb); eeconfig_update_kb_datablock(dummy_kb, 0, (EECONFIG_KB_DATA_SIZE));
} }
#endif // (EECONFIG_KB_DATA_SIZE) > 0 #endif // (EECONFIG_KB_DATA_SIZE) > 0
@ -202,22 +211,30 @@ bool nvm_eeconfig_is_user_datablock_valid(void) {
return eeprom_read_dword(EECONFIG_USER) == (EECONFIG_USER_DATA_VERSION); return eeprom_read_dword(EECONFIG_USER) == (EECONFIG_USER_DATA_VERSION);
} }
void nvm_eeconfig_read_user_datablock(void *data) { uint32_t nvm_eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length) {
if (eeconfig_is_user_datablock_valid()) { if (eeconfig_is_user_datablock_valid()) {
eeprom_read_block(data, EECONFIG_USER_DATABLOCK, (EECONFIG_USER_DATA_SIZE)); void *ee_start = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + offset);
void *ee_end = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + MIN(EECONFIG_USER_DATA_SIZE, offset + length));
eeprom_read_block(data, ee_start, ee_end - ee_start);
return ee_end - ee_start;
} else { } else {
memset(data, 0, (EECONFIG_USER_DATA_SIZE)); memset(data, 0, length);
return length;
} }
} }
void nvm_eeconfig_update_user_datablock(const void *data) { uint32_t nvm_eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length) {
eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION)); eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
eeprom_update_block(data, EECONFIG_USER_DATABLOCK, (EECONFIG_USER_DATA_SIZE));
void *ee_start = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + offset);
void *ee_end = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + MIN(EECONFIG_USER_DATA_SIZE, offset + length));
eeprom_update_block(data, ee_start, ee_end - ee_start);
return ee_end - ee_start;
} }
void nvm_eeconfig_init_user_datablock(void) { void nvm_eeconfig_init_user_datablock(void) {
uint8_t dummy_user[(EECONFIG_USER_DATA_SIZE)] = {0}; uint8_t dummy_user[(EECONFIG_USER_DATA_SIZE)] = {0};
eeconfig_update_user_datablock(dummy_user); eeconfig_update_user_datablock(dummy_user, 0, (EECONFIG_USER_DATA_SIZE));
} }
#endif // (EECONFIG_USER_DATA_SIZE) > 0 #endif // (EECONFIG_USER_DATA_SIZE) > 0

View File

@ -74,14 +74,8 @@ uint32_t nvm_via_read_custom_config(void *buf, uint32_t offset, uint32_t length)
#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0 #if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset); void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset);
void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length)); void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length));
uint32_t counter = 0; eeprom_read_block(buf, ee_start, ee_end - ee_start);
uint8_t *source = (uint8_t *)ee_start; return ee_end - ee - start;
uint8_t *dest = (uint8_t *)buf;
while (source != ee_end) {
*dest++ = eeprom_read_byte(source++);
counter++;
}
return counter;
#else #else
return 0; return 0;
#endif #endif
@ -91,14 +85,8 @@ uint32_t nvm_via_update_custom_config(const void *buf, uint32_t offset, uint32_t
#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0 #if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset); void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset);
void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length)); void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length));
uint32_t counter = 0; eeprom_update_block(buf, ee_start, ee_end - ee_start);
uint8_t *dest = (uint8_t *)ee_start; return ee_end - ee_start;
uint8_t *source = (uint8_t *)buf;
while (dest != ee_end) {
eeprom_update_byte(dest++, *source++);
counter++;
}
return counter;
#else #else
return 0; return 0;
#endif #endif

View File

@ -87,14 +87,14 @@ void nvm_eeconfig_update_handedness(bool val);
#if (EECONFIG_KB_DATA_SIZE) > 0 #if (EECONFIG_KB_DATA_SIZE) > 0
bool nvm_eeconfig_is_kb_datablock_valid(void); bool nvm_eeconfig_is_kb_datablock_valid(void);
void nvm_eeconfig_read_kb_datablock(void *data); uint32_t nvm_eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length);
void nvm_eeconfig_update_kb_datablock(const void *data); uint32_t nvm_eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length);
void nvm_eeconfig_init_kb_datablock(void); void nvm_eeconfig_init_kb_datablock(void);
#endif // (EECONFIG_KB_DATA_SIZE) > 0 #endif // (EECONFIG_KB_DATA_SIZE) > 0
#if (EECONFIG_USER_DATA_SIZE) > 0 #if (EECONFIG_USER_DATA_SIZE) > 0
bool nvm_eeconfig_is_user_datablock_valid(void); bool nvm_eeconfig_is_user_datablock_valid(void);
void nvm_eeconfig_read_user_datablock(void *data); uint32_t nvm_eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length);
void nvm_eeconfig_update_user_datablock(const void *data); uint32_t nvm_eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length);
void nvm_eeconfig_init_user_datablock(void); void nvm_eeconfig_init_user_datablock(void);
#endif // (EECONFIG_USER_DATA_SIZE) > 0 #endif // (EECONFIG_USER_DATA_SIZE) > 0