From 7ccdd5a90db33fec2c0c8e48e463dfc1cfed5971 Mon Sep 17 00:00:00 2001 From: blckmn Date: Thu, 5 Jan 2017 21:50:43 +1100 Subject: [PATCH 1/2] Fix for flashing incorrect target, and wrong defaults persisting in flash. --- src/main/config/config_master.h | 1 + src/main/fc/config.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h index cbe9a26c05..c5416882ae 100644 --- a/src/main/config/config_master.h +++ b/src/main/config/config_master.h @@ -241,6 +241,7 @@ typedef struct master_s { uint32_t preferred_beeper_off_flags; char name[MAX_NAME_LENGTH + 1]; + char boardIdentifier[sizeof(TARGET_BOARD_IDENTIFIER)]; uint8_t magic_ef; // magic number, should be 0xEF uint8_t chk; // XOR checksum diff --git a/src/main/fc/config.c b/src/main/fc/config.c index d7984caf20..5a5fb99eac 100755 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -837,6 +837,9 @@ void createDefaultConfig(master_t *config) resetStatusLedConfig(&config->statusLedConfig); + /* merely to force a reset if the person inadvertently flashes the wrong target */ + strncpy(config->boardIdentifier, TARGET_BOARD_IDENTIFIER, MIN(sizeof(TARGET_BOARD_IDENTIFIER), sizeof(config->boardIdentifier))); + #if defined(TARGET_CONFIG) targetConfiguration(config); #endif From 10f7fe1a6832cb49e95a6224cde9ff60882989fd Mon Sep 17 00:00:00 2001 From: blckmn Date: Thu, 5 Jan 2017 22:15:18 +1100 Subject: [PATCH 2/2] Actual check for eeprom board identifier is correct --- src/main/config/config_eeprom.c | 3 +++ src/main/fc/config.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/config/config_eeprom.c b/src/main/config/config_eeprom.c index 18c25d68b2..acc0244e63 100644 --- a/src/main/config/config_eeprom.c +++ b/src/main/config/config_eeprom.c @@ -142,6 +142,9 @@ bool isEEPROMContentValid(void) if (temp->size != sizeof(master_t) || temp->magic_be != 0xBE || temp->magic_ef != 0xEF) return false; + if (strncasecmp(temp->boardIdentifier, TARGET_BOARD_IDENTIFIER, sizeof(TARGET_BOARD_IDENTIFIER))) + return false; + // verify integrity of temporary copy checksum = calculateChecksum((const uint8_t *) temp, sizeof(master_t)); if (checksum != 0) diff --git a/src/main/fc/config.c b/src/main/fc/config.c index 5a5fb99eac..c2f6c1c3a7 100755 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -838,7 +838,7 @@ void createDefaultConfig(master_t *config) resetStatusLedConfig(&config->statusLedConfig); /* merely to force a reset if the person inadvertently flashes the wrong target */ - strncpy(config->boardIdentifier, TARGET_BOARD_IDENTIFIER, MIN(sizeof(TARGET_BOARD_IDENTIFIER), sizeof(config->boardIdentifier))); + strncpy(config->boardIdentifier, TARGET_BOARD_IDENTIFIER, sizeof(TARGET_BOARD_IDENTIFIER)); #if defined(TARGET_CONFIG) targetConfiguration(config);