54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
|
// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
|
||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
|
||
|
#include "eeconfig_users.h"
|
||
|
#include "eeprom.h"
|
||
|
#include "eeconfig.h"
|
||
|
#include <string.h>
|
||
|
|
||
|
#if (TOTAL_EEPROM_BYTE_COUNT - 1) < EECONFIG_SIZE && !defined(KEYBOARD_input_club_ergodox_infinity)
|
||
|
# error "More eeprom configured than is available."
|
||
|
#endif
|
||
|
#if (EECONFIG_USER_DATA_SIZE) != 0 && (EECONFIG_USER_DATA_SIZE) < 4
|
||
|
# error "Not enough EEPROM configured for user config."
|
||
|
#endif
|
||
|
|
||
|
#if (EECONFIG_USER_DATA_SIZE) == 0
|
||
|
# define EECONFIG_USER_TEMP EECONFIG_USER
|
||
|
#else
|
||
|
# define EECONFIG_USER_TEMP (uint32_t *)(EECONFIG_USER_DATABLOCK)
|
||
|
#endif
|
||
|
|
||
|
void eeconfig_read_user_config(uint32_t *data) {
|
||
|
#if (EECONFIG_USER_DATA_SIZE) > 0
|
||
|
if (!eeconfig_is_user_datablock_valid()) {
|
||
|
memset(data, 0, 4);
|
||
|
} else
|
||
|
#endif
|
||
|
eeprom_read_block(data, EECONFIG_USER_TEMP, 4);
|
||
|
}
|
||
|
|
||
|
void eeconfig_update_user_config(const uint32_t *data) {
|
||
|
eeprom_update_block(data, EECONFIG_USER_TEMP, 4);
|
||
|
#if (EECONFIG_USER_DATA_SIZE) > 0
|
||
|
eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
void eeconfig_read_user_data(void *data) {
|
||
|
#if (EECONFIG_USER_DATA_SIZE) > 4
|
||
|
if (eeconfig_is_user_datablock_valid()) {
|
||
|
eeprom_read_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
|
||
|
} else {
|
||
|
memset(data, 0, (EECONFIG_USER_DATA_SIZE));
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
void eeconfig_update_user_data(const void *data) {
|
||
|
#if (EECONFIG_USER_DATA_SIZE) > 4
|
||
|
eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
|
||
|
eeprom_update_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
|
||
|
#endif
|
||
|
}
|