53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			53 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
 | |
| }
 | 
