From 5e0d0131b490c7ed18e5c16039b717ba34439319 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 29 Aug 2021 09:01:23 +0200 Subject: [PATCH] Added EEPROM conversions to YAML --- radio/src/CMakeLists.txt | 8 ++- radio/src/gui/128x64/model_select_sd.cpp | 5 +- radio/src/opentx.cpp | 4 +- radio/src/simu.cpp | 2 +- radio/src/storage/conversions/conversions.cpp | 53 ++++++++++++++++--- radio/src/storage/eeprom_rlc.cpp | 13 ++++- radio/src/storage/eeprom_rlc.h | 6 +++ radio/src/storage/modelslist.cpp | 4 +- radio/src/storage/modelslist.h | 2 +- radio/src/storage/sdcard_common.h | 9 ++-- radio/src/storage/sdcard_yaml.cpp | 17 +++++- radio/src/targets/taranis/CMakeLists.txt | 3 +- radio/src/translations.cpp | 4 +- 13 files changed, 105 insertions(+), 25 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 328cdd152..00810590b 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -160,9 +160,15 @@ if(${STORAGE} STREQUAL SDCARD) set(SRC ${SRC} storage/sdcard_raw.cpp) add_definitions(-DSDCARD_RAW) elseif(${STORAGE_FORMAT} STREQUAL YAML) - set(SRC ${SRC} storage/sdcard_yaml.cpp storage/sdcard_raw.cpp) + set(SRC ${SRC} storage/sdcard_yaml.cpp) add_definitions(-DSDCARD_YAML) include(storage/yaml/CMakeLists.txt) + if (${STORAGE_CONVERT} STREQUAL EEPROM_RLC) + set(SRC ${SRC} storage/eeprom_rlc.cpp) + add_definitions(-DEEPROM_RLC) + else() + set(SRC ${SRC} storage/sdcard_raw.cpp) + endif() endif() elseif(${STORAGE} STREQUAL EEPROM) set(SRC ${SRC} storage/eeprom_common.cpp) diff --git a/radio/src/gui/128x64/model_select_sd.cpp b/radio/src/gui/128x64/model_select_sd.cpp index 4961220be..3659509b9 100644 --- a/radio/src/gui/128x64/model_select_sd.cpp +++ b/radio/src/gui/128x64/model_select_sd.cpp @@ -55,8 +55,9 @@ bool eeModelExists(uint8_t id) { int index = 0; - for (ModelsCategory::iterator it = modelSelect.currentCategory->begin(); it != modelSelect.currentCategory->end(); ++it, ++index) { - if (id == index){ + for (ModelsCategory::iterator it = modelSelect.currentCategory->begin(); + it != modelSelect.currentCategory->end(); ++it, ++index) { + if (id == index) { return true; } } diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index dd48f424a..5e6c2c64b 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -702,7 +702,7 @@ static void checkFailsafe() #if defined(GUI) void checkAll() { -#if defined(EEPROM_RLC) +#if defined(EEPROM_RLC) && !defined(SDCARD_RAW) && !defined(SDCARD_YAML) checkLowEEPROM(); #endif @@ -753,7 +753,7 @@ void checkAll() #endif // GUI -#if defined(EEPROM_RLC) +#if defined(EEPROM_RLC) && !defined(SDCARD_RAW) && !defined(SDCARD_YAML) void checkLowEEPROM() { if (g_eeGeneral.disableMemoryWarning) return; diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 0ccf895ae..95dcb95a2 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -630,7 +630,7 @@ int main(int argc, char ** argv) simuInit(); -#if defined(EEPROM) +#if defined(EEPROM) || defined(EEPROM_RLC) startEepromThread(argc >= 2 ? argv[1] : "eeprom.bin"); #endif startAudioThread(); diff --git a/radio/src/storage/conversions/conversions.cpp b/radio/src/storage/conversions/conversions.cpp index f3b0ce343..2888f6ba2 100644 --- a/radio/src/storage/conversions/conversions.cpp +++ b/radio/src/storage/conversions/conversions.cpp @@ -27,7 +27,9 @@ #include "storage/sdcard_common.h" #include "storage/sdcard_raw.h" #include "storage/sdcard_yaml.h" +#endif +#if !defined(EEPROM_RLC) static void drawProgressScreen(const char* filename, int progress, int total) { #if defined(COLORLCD) @@ -158,15 +160,36 @@ void convertModelData(int version) #endif } -#if defined(EEPROM) +#if defined(EEPROM) || defined(EEPROM_RLC) +#include "storage/eeprom_common.h" + void eeConvertModel(int id, int version) { eeLoadModelData(id); convertModelData(version); uint8_t currModel = g_eeGeneral.currModel; g_eeGeneral.currModel = id; + +#if !defined(EEPROM) + char filename[LEN_MODEL_FILENAME+1]; + memset(filename, 0, sizeof(filename)); + char* s = strAppend(filename, MODEL_FILENAME_PREFIX); + s = strAppendUnsigned(s, id + 1, 2); + s = strAppend(s, MODEL_FILENAME_SUFFIX); + memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename)); + + if (!modelslist.getCurrentCategory()) { + ModelsCategory* cat = modelslist.createCategory("Models", false); + modelslist.setCurrentCategory(cat); + } + ModelCell* model = modelslist.addModel(modelslist.getCurrentCategory(), + filename, false); + model->setModelName(g_model.header.name); +#endif + storageDirty(EE_MODEL); storageCheck(true); + g_eeGeneral.currModel = currModel; } @@ -178,6 +201,9 @@ bool eeConvert() case 219: msg = "EEprom Data v219"; break; + case 220: + msg = "EEprom Data v220"; + break; default: return false; } @@ -203,12 +229,15 @@ bool eeConvert() convertRadioData_219_to_220(g_eeGeneral); } #endif - + g_eeGeneral.version = EEPROM_VER; storageDirty(EE_GENERAL); storageCheck(true); -#if defined(COLORLCD) -#elif LCD_W >= 212 +#if !defined(EEPROM) + modelslist.clear(); +#endif + +#if LCD_W >= 212 lcdDrawRect(60, 6*FH+4, 132, 3); #else lcdDrawRect(10, 6*FH+4, 102, 3); @@ -216,18 +245,30 @@ bool eeConvert() // Models conversion for (uint8_t id=0; id= 212 +#if LCD_W >= 212 lcdDrawSolidHorizontalLine(61, 6*FH+5, 10+id*2, FORCE); #else lcdDrawSolidHorizontalLine(11, 6*FH+5, 10+(id*3)/2, FORCE); #endif lcdRefresh(); + +#if defined(SIMU) + RTOS_WAIT_MS(100); +#endif + +#if defined(SDCARD_RAW) || defined(SDCARD_YAML) + if (eeModelExistsRlc(id)) { +#else if (eeModelExists(id)) { +#endif eeConvertModel(id, conversionVersionStart); } } +#if !defined(EEPROM) + modelslist.save(); +#endif + return true; } #endif diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index b7c865e49..d30d516bd 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -23,6 +23,9 @@ #include #include "opentx.h" #include "../timers.h" + +#include "storage/eeprom_common.h" +#include "storage/eeprom_rlc.h" #include "conversions/conversions.h" uint8_t s_write_err = 0; // error reasons @@ -154,6 +157,7 @@ void eepromCheck() ENABLE_SYNC_WRITE(false); } +#if !defined(SDCARD_RAW) && !defined(SDCARD_YAML) void storageFormat() { ENABLE_SYNC_WRITE(true); @@ -179,6 +183,7 @@ void storageFormat() ENABLE_SYNC_WRITE(false); } +#endif bool eepromOpen() { @@ -444,7 +449,7 @@ bool RlcFile::copy(uint8_t i_fileDst, uint8_t i_fileSrc) return true; } -#if defined(SDCARD) +#if defined(SDCARD) && !defined(SDCARD_RAW) && !defined(SDCARD_YAML) const char * eeBackupModel(uint8_t i_fileSrc) { char * buf = reusableBuffer.modelsel.mainname; @@ -827,11 +832,16 @@ void eeLoadModelName(uint8_t id, char *name) } } +#if defined(SDCARD_RAW) || defined(SDCARD_YAML) +bool eeModelExistsRlc(uint8_t id) +#else bool eeModelExists(uint8_t id) +#endif { return EFile::exists(FILE_MODEL(id)); } +#if !defined(SDCARD_RAW) && !defined(SDCARD_YAML) void storageCheck(bool immediately) { if (immediately) { @@ -851,6 +861,7 @@ void storageCheck(bool immediately) theFile.writeRlc(FILE_MODEL(g_eeGeneral.currModel), FILE_TYP_MODEL, (uint8_t*)&g_model, sizeof(g_model), immediately); } } +#endif void eeLoadModelHeader(uint8_t id, ModelHeader *header) { diff --git a/radio/src/storage/eeprom_rlc.h b/radio/src/storage/eeprom_rlc.h index 150b39353..cb67208f3 100644 --- a/radio/src/storage/eeprom_rlc.h +++ b/radio/src/storage/eeprom_rlc.h @@ -175,8 +175,10 @@ const char * eeBackupModel(uint8_t i_fileSrc); const char * eeRestoreModel(uint8_t i_fileDst, char *model_name); #endif +#if !defined(SDCARD_RAW) && !defined(SDCARD_YAML) // For conversions void loadRadioSettings(); +#endif bool eepromOpen(); void eeLoadModelName(uint8_t id, char * name); @@ -206,4 +208,8 @@ inline bool isEepromStart(const void * buffer) void eepromBackup(); +#if defined(SDCARD_RAW) || defined(SDCARD_YAML) +bool eeModelExistsRlc(uint8_t id); +#endif + #endif // _EEPROM_RLC_H_ diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index b2010d07d..500536c07 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -478,11 +478,11 @@ ModelsCategory * ModelsList::createCategory(const char* name, bool save) return result; } -ModelCell * ModelsList::addModel(ModelsCategory * category, const char * name) +ModelCell * ModelsList::addModel(ModelsCategory * category, const char * name, bool save) { ModelCell * result = category->addModel(name); modelsCount++; - save(); + if (save) this->save(); return result; } diff --git a/radio/src/storage/modelslist.h b/radio/src/storage/modelslist.h index 42c16c400..1d9bef172 100644 --- a/radio/src/storage/modelslist.h +++ b/radio/src/storage/modelslist.h @@ -145,7 +145,7 @@ public: ModelsCategory * createCategory(const char * name, bool save=true); void removeCategory(ModelsCategory * category); - ModelCell * addModel(ModelsCategory * category, const char * name); + ModelCell * addModel(ModelsCategory * category, const char * name, bool save=true); void removeModel(ModelsCategory * category, ModelCell * model); void moveModel(ModelsCategory * category, ModelCell * model, int8_t step); void moveModel(ModelCell * model, ModelsCategory * previous_category, ModelsCategory * new_category); diff --git a/radio/src/storage/sdcard_common.h b/radio/src/storage/sdcard_common.h index fb3d6192c..80e6f9895 100644 --- a/radio/src/storage/sdcard_common.h +++ b/radio/src/storage/sdcard_common.h @@ -26,13 +26,14 @@ #define DEFAULT_CATEGORY "Models" +#define MODEL_FILENAME_PREFIX "model" #if defined(SDCARD_RAW) -#define DEFAULT_MODEL_FILENAME "model1.bin" -#define MODEL_FILENAME_PATTERN "model.bin" +#define MODEL_FILENAME_SUFFIX ".bin" #elif defined(SDCARD_YAML) -#define DEFAULT_MODEL_FILENAME "model1.yml" -#define MODEL_FILENAME_PATTERN "model.yml" +#define MODEL_FILENAME_SUFFIX ".yml" #endif +#define DEFAULT_MODEL_FILENAME MODEL_FILENAME_PREFIX "1" MODEL_FILENAME_SUFFIX +#define MODEL_FILENAME_PATTERN MODEL_FILENAME_PREFIX MODEL_FILENAME_SUFFIX //#if !defined(EEPROM) extern ModelHeader modelHeaders[MAX_MODELS]; diff --git a/radio/src/storage/sdcard_yaml.cpp b/radio/src/storage/sdcard_yaml.cpp index add78d309..1fb3906aa 100644 --- a/radio/src/storage/sdcard_yaml.cpp +++ b/radio/src/storage/sdcard_yaml.cpp @@ -30,6 +30,10 @@ #include "yaml/yaml_parser.h" #include "yaml/yaml_datastructs.h" +#if defined(EEPROM_RLC) + #include "storage/eeprom_rlc.h" +#endif + const char * readYamlFile(const char* fullpath, const YamlParserCalls* calls, void* parser_ctx) { FIL file; @@ -90,7 +94,15 @@ const char * loadRadioSettings() { FILINFO fno; if (f_stat(RADIO_SETTINGS_YAML_PATH, &fno) != FR_OK) { - return loadRadioSettingsBin(); +#if !defined(EEPROM_RLC) + return loadRadioSettingsBin(); +#else + // Load from EEPROM + if (!eepromOpen() || !eeLoadGeneral(true)) { + return "ERROR"; + } + return nullptr; +#endif } return loadRadioSettingsYaml(); @@ -192,8 +204,9 @@ const char* readModel(const char* filename, uint8_t* buffer, uint32_t size, if (!strncmp(ext, YAML_EXT, 4)) { return readModelYaml(filename, buffer, size, version); } - +#if !defined(EEPROM_RLC) return readModelBin(filename, buffer, size, version); +#endif } return nullptr; } diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 0b718e896..9ff09a043 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -420,7 +420,8 @@ set(HSE_VALUE 12000000) set(SDCARD YES) if(YAML_STORAGE) set(STORAGE SDCARD) - set(STORAGE_FORMAT YAML) + set(STORAGE_FORMAT YAML) + set(STORAGE_CONVERT EEPROM_RLC) else() set(STORAGE EEPROM) set(STORAGE_FORMAT RLC) diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 0f0b3a6a7..781be3064 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -822,9 +822,7 @@ const char STR_REPEAT_AT_ZERO[] = TR_REPEAT_AT_ZERO; const char STR_BAD_RADIO_DATA[] = TR_BADEEPROMDATA; const char STR_STORAGE_FORMAT[] = TR_EEPROMFORMATTING; const char STR_STORAGE_WARNING[] = TR_EEPROMWARN; -const char STR_EEPROM_CONVERTING[] = TR_EEPROM_CONVERTING; const char STR_EEPROMLOWMEM[] = TR_EEPROMLOWMEM; -const char STR_EEPROMOVERFLOW[] = TR_EEPROMOVERFLOW; #else const char STR_BAD_RADIO_DATA[] = TR_BAD_RADIO_DATA; const char STR_STORAGE_WARNING[] = TR_STORAGE_WARNING; @@ -832,6 +830,8 @@ const char STR_STORAGE_FORMAT[] = TR_STORAGE_FORMAT; const char STR_SDCARD_CONVERSION_REQUIRE[] = TR_SDCARD_CONVERSION_REQUIRE; const char STR_CONVERTING[] = TR_CONVERTING; #endif +const char STR_EEPROMOVERFLOW[] = TR_EEPROMOVERFLOW; +const char STR_EEPROM_CONVERTING[] = TR_EEPROM_CONVERTING; #if defined(LUA) const char STR_MENUCUSTOMSCRIPTS[] = TR_MENUCUSTOMSCRIPTS;