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

30 lines
624 B
C
Executable File

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