#include #include #include 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; };