From d1d499a29989efa7f3d7abcb9078efa2c94e3a91 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 7 Apr 2014 11:54:31 +0200 Subject: [PATCH] Conversions now run when restoring old Model backups --- radio/src/.gitignore | 1 + radio/src/eeprom_common.h | 1 + radio/src/eeprom_conversions.cpp | 28 +++++++++++++++++----------- radio/src/eeprom_raw.cpp | 11 ++++++++++- radio/src/eeprom_rlc.cpp | 13 +++++++++++-- radio/src/myeeprom.h | 13 ++++++++----- 6 files changed, 48 insertions(+), 19 deletions(-) diff --git a/radio/src/.gitignore b/radio/src/.gitignore index a641a2494..902bdbbac 100644 --- a/radio/src/.gitignore +++ b/radio/src/.gitignore @@ -18,3 +18,4 @@ /allsrc.cpp /BMP /traces +/MODELS diff --git a/radio/src/eeprom_common.h b/radio/src/eeprom_common.h index 8e9243f79..1997c930e 100644 --- a/radio/src/eeprom_common.h +++ b/radio/src/eeprom_common.h @@ -56,6 +56,7 @@ bool eeModelExists(uint8_t id); void eeLoadModelName(uint8_t id, char *name); void eeLoadModel(uint8_t id); bool eeConvert(); +void ConvertModel(int id, int version); #if defined(CPUARM) extern ModelHeader modelHeaders[MAX_MODELS]; diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index 2de271998..badaf7ac8 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -860,6 +860,22 @@ void ConvertModel_215_to_216(ModelData &model) memcpy(g_model.moduleData, oldModel.moduleData, sizeof(g_model.moduleData)); } +void ConvertModel(int id, int version) +{ + loadModel(id); + + if (version == 215) { + version = 216; + ConvertModel_215_to_216(g_model); + } + + uint8_t currModel = g_eeGeneral.currModel; + g_eeGeneral.currModel = id; + s_eeDirtyMsk = EE_MODEL; + eeCheck(true); + g_eeGeneral.currModel = currModel; +} + bool eeConvert() { const char *msg = NULL; @@ -900,7 +916,6 @@ bool eeConvert() #endif // Models conversion - uint8_t currModel = g_eeGeneral.currModel; for (uint8_t id=0; id= 212 lcd_hline(61, 6*FH+5, 10+id*2, FORCE); @@ -909,19 +924,10 @@ bool eeConvert() #endif lcdRefresh(); if (eeModelExists(id)) { - loadModel(id); - int version = conversionVersionStart; - if (version == 215) { - version = 216; - ConvertModel_215_to_216(g_model); - } - g_eeGeneral.currModel = id; - s_eeDirtyMsk = EE_MODEL; - eeCheck(true); + ConvertModel(id, conversionVersionStart); } } - g_eeGeneral.currModel = currModel; return true; } diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index a60ec8157..5578393fb 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -753,7 +753,8 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) return SDCARD_ERROR(result); } - if (*(uint32_t*)&buf[0] != O9X_FOURCC || (uint8_t)buf[4] != EEPROM_VER || buf[5] != 'M') { + uint8_t version = (uint8_t)buf[4]; + if (*(uint32_t*)&buf[0] != O9X_FOURCC || version < FIRST_CONV_EEPROM_VER || version > EEPROM_VER || buf[5] != 'M') { f_close(&restoreFile); return STR_INCOMPATIBLE; } @@ -784,6 +785,14 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) Eeprom32_process_state = E32_BLANKCHECK; eeWaitFinished(); +#if defined(CPUARM) + if (version < EEPROM_VER) { + eeCheck(true); + ConvertModel(i_fileDst, version); + loadModel(g_eeGeneral.currModel); + } +#endif + return NULL; } #endif diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index f29f4a16e..df445dcac 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -663,7 +663,8 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) return SDCARD_ERROR(result); } - if (*(uint32_t*)&buf[0] != O9X_FOURCC || (uint8_t)buf[4] != EEPROM_VER || buf[5] != 'M') { + uint8_t version = (uint8_t)buf[4]; + if (*(uint32_t*)&buf[0] != O9X_FOURCC || version < FIRST_CONV_EEPROM_VER || version > EEPROM_VER || buf[5] != 'M') { f_close(&g_oLogFile); return STR_INCOMPATIBLE; } @@ -702,6 +703,14 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) f_close(&g_oLogFile); +#if defined(CPUARM) + if (version < EEPROM_VER) { + eeCheck(true); + ConvertModel(i_fileDst, version); + loadModel(g_eeGeneral.currModel); + } +#endif + #if defined(CPUARM) eeLoadModelHeader(i_fileDst, &modelHeaders[i_fileDst]); #endif @@ -760,7 +769,7 @@ void RlcFile::nextRlcWriteStep() return; } } - else{ + else { m_rlc_buf+=cnt0; m_rlc_len-=cnt0+cnt; m_cur_rlc_len=cnt; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 67c68259f..4b538f22e 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -52,15 +52,18 @@ #define BEEP_VAL ( (g_eeGeneral.warnOpts & WARN_BVAL_BIT) >>3 ) #if defined(PCBTARANIS) - #define EEPROM_VER 216 + #define EEPROM_VER 216 + #define FIRST_CONV_EEPROM_VER 215 #elif defined(PCBSKY9X) - #define EEPROM_VER 216 + #define EEPROM_VER 216 + #define FIRST_CONV_EEPROM_VER 215 #elif defined(CPUM2560) || defined(CPUM2561) - #define EEPROM_VER 216 + #define EEPROM_VER 216 + #define FIRST_CONV_EEPROM_VER EEPROM_VER #elif defined(CPUM128) - #define EEPROM_VER 216 + #define EEPROM_VER 216 #else - #define EEPROM_VER 216 + #define EEPROM_VER 216 #endif #ifndef PACK