// fsm-eeprom.c: EEPROM API for SpaghettiMonster. // Copyright (C) 2017-2023 Selene ToyKeeper // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "fsm/eeprom.h" #ifdef USE_EEPROM #ifdef EEPROM_OVERRIDE uint8_t *eeprom; #else uint8_t eeprom[EEPROM_BYTES]; #endif uint8_t load_eeprom() { #ifdef USE_EEP_DELAY delay_4ms(2); // wait for power to stabilize #endif cli(); // check if eeprom has been initialized; abort if it hasn't uint8_t marker = eeprom_read_byte((uint8_t *)EEP_START); if (marker != EEP_MARKER) { sei(); return 0; } // load the actual data for(uint8_t i=0; i (uint8_t *)(EEP_WL_SIZE-EEPROM_WL_BYTES-1)) offset = 0; eep_wl_prev_offset = offset; // marker byte // FIXME: write the marker last, to signal completed transaction eeprom_update_byte(offset, EEP_MARKER); offset ++; // user data for(uint8_t i=0; i