From 2ed15a83883d26bbb6f9df64bd7ee45eb981285b Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 20 Apr 2015 18:08:04 +0200 Subject: [PATCH] [Sky9x] EEPROM format change Addresses remarks from Mike about new EEPROM format --- radio/src/eeprom_raw.cpp | 29 +++++++++++++++++------------ radio/src/eeprom_raw.h | 3 --- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index cc7fd3617..63d515101 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -58,6 +58,7 @@ PACK(struct EepromHeaderFile PACK(struct EepromHeader { uint32_t mark; + uint32_t index; EepromHeaderFile files[EEPROM_MAX_FILES]; }); @@ -174,16 +175,24 @@ void eepromWrite(uint32_t address, uint8_t * buffer, uint32_t size, bool blockin bool eepromOpen() { + int32_t bestFatAddr = -1; + uint32_t bestFatIndex = 0; eepromFatAddr = 0; while (eepromFatAddr < EEPROM_FILE_SIZE) { - eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader.mark)); - if (eepromHeader.mark == EEPROM_MARK) { - eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader)); - return true; + eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader.mark) + sizeof(eepromHeader.index)); + if (eepromHeader.mark == EEPROM_MARK && eepromHeader.index >= bestFatIndex) { + bestFatAddr = eepromFatAddr; } eepromFatAddr += EEPROM_FAT_SIZE; } - return false; + if (bestFatAddr >= 0) { + eepromFatAddr = bestFatAddr; + eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader)); + return true; + } + else { + return false; + } } bool eepromCheck() @@ -212,6 +221,7 @@ uint32_t readFile(int index, uint8_t * data, uint32_t size) void eepromIncFatAddr() { eepromPreviousFatAddr = eepromFatAddr; + eepromHeader.index += 1; eepromFatAddr += EEPROM_FAT_SIZE; if (eepromFatAddr >= EEPROM_FILE_SIZE) { eepromFatAddr = 0; @@ -397,11 +407,13 @@ void eepromFormat() { eepromFatAddr = 0; eepromHeader.mark = EEPROM_MARK; + eepromHeader.index = 0; for (int i=0; i