From 467a490a533b46df0981d7364c0ee1570cfd1cc4 Mon Sep 17 00:00:00 2001 From: mikeller Date: Thu, 31 May 2018 02:06:26 +1200 Subject: [PATCH] Ensured board info is preserved through invalid EEPROM version triggered reset. --- src/main/config/config_eeprom.c | 15 ++++++++++++--- src/main/config/config_eeprom.h | 1 + src/main/fc/fc_init.c | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/config/config_eeprom.c b/src/main/config/config_eeprom.c index bed889ed41..2b8c571737 100644 --- a/src/main/config/config_eeprom.c +++ b/src/main/config/config_eeprom.c @@ -94,8 +94,7 @@ void initEEPROM(void) BUILD_BUG_ON(sizeof(configRecord_t) != 6); } -// Scan the EEPROM config. Returns true if the config is valid. -bool isEEPROMStructureValid(void) +bool isEEPROMVersionValid(void) { const uint8_t *p = &__config_start; const configHeader_t *header = (const configHeader_t *)p; @@ -103,6 +102,16 @@ bool isEEPROMStructureValid(void) if (header->eepromConfigVersion != EEPROM_CONF_VERSION) { return false; } + + return true; +} + +// Scan the EEPROM config. Returns true if the config is valid. +bool isEEPROMStructureValid(void) +{ + const uint8_t *p = &__config_start; + const configHeader_t *header = (const configHeader_t *)p; + if (header->magic_be != 0xBE) { return false; } @@ -254,7 +263,7 @@ void writeConfigToEEPROM(void) } } - if (success && isEEPROMStructureValid()) { + if (success && isEEPROMVersionValid() && isEEPROMStructureValid()) { return; } diff --git a/src/main/config/config_eeprom.h b/src/main/config/config_eeprom.h index 3ff09e1398..35979b1b14 100644 --- a/src/main/config/config_eeprom.h +++ b/src/main/config/config_eeprom.h @@ -25,6 +25,7 @@ #define EEPROM_CONF_VERSION 169 +bool isEEPROMVersionValid(void); bool isEEPROMStructureValid(void); bool loadEEPROM(void); void writeConfigToEEPROM(void); diff --git a/src/main/fc/fc_init.c b/src/main/fc/fc_init.c index 2844959f79..79ba9dd7ad 100644 --- a/src/main/fc/fc_init.c +++ b/src/main/fc/fc_init.c @@ -240,13 +240,14 @@ void init(void) initEEPROM(); ensureEEPROMStructureIsValid(); + bool readSuccess = readEEPROM(); #if defined(USE_BOARD_INFO) initBoardInformation(); #endif - if (!readSuccess || strncasecmp(systemConfig()->boardIdentifier, TARGET_BOARD_IDENTIFIER, sizeof(TARGET_BOARD_IDENTIFIER))) { + if (!readSuccess || !isEEPROMVersionValid() || strncasecmp(systemConfig()->boardIdentifier, TARGET_BOARD_IDENTIFIER, sizeof(TARGET_BOARD_IDENTIFIER))) { resetEEPROM(); activateConfig();