avr-fw-modules/core/src/eeprom_load.c

41 lines
804 B
C
Executable File

#include <hwo/eeprom.h>
#include <avr/eeprom.h>
#include <sys/errno.h>
extern struct avr_eeprom_desc __ee_desc;
MUTEX eepromMutex;
uint16_t eeprom_load(uint8_t bank,avrEEPROM *data)
{
MUTEXED( &eepromMutex );
avrChksum chk,eechk;
if (bank < __ee_desc.num_banks)
{
eeprom_read_block(data, (void*)(0x20 * bank), 32);
eeprom_read_block(&eechk, (void*)(__ee_desc.base_chksums + (bank<<1)), 0x02);
chksum(&chk,data,32);
if (chk.combined == eechk.combined)
return ESUCCESS;
bank += __ee_desc.num_banks;
eeprom_read_block(data, (void*)(0x20 * bank), 32);
eeprom_read_block(&eechk, (void*)(__ee_desc.base_chksums + (bank<<1)), 0x02);
chksum(&chk,data,32);
if (chk.combined == eechk.combined){
return ESUCCESS;
} else {
return -ECRC;
};
};
return -ENOFILE;
};