mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 17:55:19 +03:00
[Sky9x] EEPROM format change
Addresses remarks from Mike about new EEPROM format
This commit is contained in:
parent
5c25d10622
commit
2ed15a8388
2 changed files with 17 additions and 15 deletions
|
@ -58,6 +58,7 @@ PACK(struct EepromHeaderFile
|
||||||
PACK(struct EepromHeader
|
PACK(struct EepromHeader
|
||||||
{
|
{
|
||||||
uint32_t mark;
|
uint32_t mark;
|
||||||
|
uint32_t index;
|
||||||
EepromHeaderFile files[EEPROM_MAX_FILES];
|
EepromHeaderFile files[EEPROM_MAX_FILES];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -174,16 +175,24 @@ void eepromWrite(uint32_t address, uint8_t * buffer, uint32_t size, bool blockin
|
||||||
|
|
||||||
bool eepromOpen()
|
bool eepromOpen()
|
||||||
{
|
{
|
||||||
|
int32_t bestFatAddr = -1;
|
||||||
|
uint32_t bestFatIndex = 0;
|
||||||
eepromFatAddr = 0;
|
eepromFatAddr = 0;
|
||||||
while (eepromFatAddr < EEPROM_FILE_SIZE) {
|
while (eepromFatAddr < EEPROM_FILE_SIZE) {
|
||||||
eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader.mark));
|
eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader.mark) + sizeof(eepromHeader.index));
|
||||||
if (eepromHeader.mark == EEPROM_MARK) {
|
if (eepromHeader.mark == EEPROM_MARK && eepromHeader.index >= bestFatIndex) {
|
||||||
eepromRead(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader));
|
bestFatAddr = eepromFatAddr;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
eepromFatAddr += EEPROM_FAT_SIZE;
|
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()
|
bool eepromCheck()
|
||||||
|
@ -212,6 +221,7 @@ uint32_t readFile(int index, uint8_t * data, uint32_t size)
|
||||||
void eepromIncFatAddr()
|
void eepromIncFatAddr()
|
||||||
{
|
{
|
||||||
eepromPreviousFatAddr = eepromFatAddr;
|
eepromPreviousFatAddr = eepromFatAddr;
|
||||||
|
eepromHeader.index += 1;
|
||||||
eepromFatAddr += EEPROM_FAT_SIZE;
|
eepromFatAddr += EEPROM_FAT_SIZE;
|
||||||
if (eepromFatAddr >= EEPROM_FILE_SIZE) {
|
if (eepromFatAddr >= EEPROM_FILE_SIZE) {
|
||||||
eepromFatAddr = 0;
|
eepromFatAddr = 0;
|
||||||
|
@ -397,11 +407,13 @@ void eepromFormat()
|
||||||
{
|
{
|
||||||
eepromFatAddr = 0;
|
eepromFatAddr = 0;
|
||||||
eepromHeader.mark = EEPROM_MARK;
|
eepromHeader.mark = EEPROM_MARK;
|
||||||
|
eepromHeader.index = 0;
|
||||||
for (int i=0; i<EEPROM_MAX_FILES; i++) {
|
for (int i=0; i<EEPROM_MAX_FILES; i++) {
|
||||||
eepromHeader.files[i].exists = 0;
|
eepromHeader.files[i].exists = 0;
|
||||||
eepromHeader.files[i].index = i+1;
|
eepromHeader.files[i].index = i+1;
|
||||||
}
|
}
|
||||||
eepromEraseBlock(0);
|
eepromEraseBlock(0);
|
||||||
|
eepromEraseBlock(EEPROM_BLOCK_SIZE);
|
||||||
eepromWrite(0, (uint8_t *)&eepromHeader, sizeof(eepromHeader));
|
eepromWrite(0, (uint8_t *)&eepromHeader, sizeof(eepromHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,7 +482,6 @@ void eepromWriteProcess()
|
||||||
case EEPROM_WRITING_BUFFER_WAIT:
|
case EEPROM_WRITING_BUFFER_WAIT:
|
||||||
case EEPROM_ERASING_FAT_BLOCK_WAIT:
|
case EEPROM_ERASING_FAT_BLOCK_WAIT:
|
||||||
case EEPROM_WRITING_NEW_FAT_WAIT:
|
case EEPROM_WRITING_NEW_FAT_WAIT:
|
||||||
case EEPROM_OVERWRITING_OLD_FAT_WAIT:
|
|
||||||
if ((eepromReadStatus() & 1) == 0)
|
if ((eepromReadStatus() & 1) == 0)
|
||||||
eepromWriteState = EepromWriteState(eepromWriteState + 1);
|
eepromWriteState = EepromWriteState(eepromWriteState + 1);
|
||||||
break;
|
break;
|
||||||
|
@ -523,12 +534,6 @@ void eepromWriteProcess()
|
||||||
eepromWrite(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader), false);
|
eepromWrite(eepromFatAddr, (uint8_t *)&eepromHeader, sizeof(eepromHeader), false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EEPROM_OVERWRITE_OLD_FAT:
|
|
||||||
memset(eepromWriteBuffer, 0, EEPROM_FAT_SIZE);
|
|
||||||
eepromWriteState = EEPROM_OVERWRITING_OLD_FAT;
|
|
||||||
eepromWrite(eepromPreviousFatAddr, eepromWriteBuffer, EEPROM_FAT_SIZE, false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EEPROM_END_WRITE:
|
case EEPROM_END_WRITE:
|
||||||
eepromWriteState = EEPROM_IDLE;
|
eepromWriteState = EEPROM_IDLE;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -72,9 +72,6 @@ enum EepromWriteState {
|
||||||
EEPROM_WRITE_NEW_FAT,
|
EEPROM_WRITE_NEW_FAT,
|
||||||
EEPROM_WRITING_NEW_FAT,
|
EEPROM_WRITING_NEW_FAT,
|
||||||
EEPROM_WRITING_NEW_FAT_WAIT,
|
EEPROM_WRITING_NEW_FAT_WAIT,
|
||||||
EEPROM_OVERWRITE_OLD_FAT,
|
|
||||||
EEPROM_OVERWRITING_OLD_FAT,
|
|
||||||
EEPROM_OVERWRITING_OLD_FAT_WAIT,
|
|
||||||
EEPROM_END_WRITE
|
EEPROM_END_WRITE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue