From 7cb4fe0944b839f28dfd96a88a772cd6a8b58019 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Thu, 2 Nov 2023 17:16:25 -0600 Subject: reorganized project files (part 1) (just moved files, didn't change the contents yet, and nothing will work without updating #includes and build scripts and stuff) --- fsm/eeprom.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 fsm/eeprom.c (limited to 'fsm/eeprom.c') diff --git a/fsm/eeprom.c b/fsm/eeprom.c new file mode 100644 index 0000000..66cdd78 --- /dev/null +++ b/fsm/eeprom.c @@ -0,0 +1,112 @@ +// 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() { + #if defined(LED_ENABLE_PIN) || defined(LED2_ENABLE_PIN) + 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