diff --git a/EAT.cpp b/EAT.cpp new file mode 100644 index 0000000..10bc49e --- /dev/null +++ b/EAT.cpp @@ -0,0 +1,142 @@ +#include +#include "Kernel.h" +#include "EAT.h" +#include "EEPROM.h" + +#define VERSION 1 +#define MAX_ENTRIES 16 +#define EEPROM_SIZE 4096 + +byte version = 0; +byte options = 0; +byte modules[MAX_ENTRIES]; +byte lengths[MAX_ENTRIES]; + +int EAT_get_offset(byte module); + +void EAT_load() +{ + EEPROM.begin(EEPROM_SIZE); + version = EEPROM.read(0); + options = EEPROM.read(1); + + if (version != VERSION) + { + char msg[255]; + sprintf(msg, "Unsupported version (%d) -- please reinitialize EEPROM.", version); + Kernel_panic(msg); + //Kernel_panic("Unsupported EAT version -- please reinitialize EEPROM."); + } + + for (int i=0; i EAT_get_length(module) - 1) + { + Kernel_panic("Attempt to write outside EAT module bounds"); + } + offset += module_offset; + EEPROM.write(offset, value); + EEPROM.commit(); +} + +byte EAT_read(byte module, byte offset) +{ + int module_offset = EAT_get_offset(module); + if (offset == -1) + { + Kernel_panic("Attempt to write to uninitialized EAT module"); + } + if (offset > EAT_get_length(module) - 1) + { + Kernel_panic("Attempt to write outside EAT module bounds"); + } + offset += module_offset; + return EEPROM.read(offset + ); +} diff --git a/EAT.h b/EAT.h new file mode 100644 index 0000000..1cbc391 --- /dev/null +++ b/EAT.h @@ -0,0 +1,8 @@ +void EAT_load(); +void EAT_commit(); +void EAT_initialize(); + +int EAT_get_length(byte module); +bool EAT_allocate(byte module, byte length); +void EAT_write(byte module, byte offset, byte value); +byte EAT_read(byte module, byte offset);