diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index d591af7ad..d64aad71e 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -334,7 +334,10 @@ class ModelCategoryPageBody : public FormWindow { return [=]() { storageCheck(true); - modelslist.setCurrentModel(modelslist.addModel(category, createModel())); + auto model = modelslist.addModel(category, createModel(), false); + model->setModelName(g_model.header.name); + modelslist.setCurrentModel(model); + modelslist.save(); update(category->size() - 1); }; } diff --git a/radio/src/model_init.cpp b/radio/src/model_init.cpp index c6212ba95..492ccb190 100644 --- a/radio/src/model_init.cpp +++ b/radio/src/model_init.cpp @@ -135,7 +135,11 @@ void setModelDefaults(uint8_t id) setVendorSpecificModelDefaults(id); - strAppendUnsigned(strAppend(g_model.header.name, STR_MODEL), id + 1, 2); +#if !defined(STORAGE_MODELSLIST) + // EEPROM model indexes starting with 0 + id++; +#endif + strAppendUnsigned(strAppend(g_model.header.name, STR_MODEL), id, 2); #if defined(LUA) && defined(PCBTARANIS) // Horus uses menuModelWizard() for wizard if (isFileAvailable(WIZARD_PATH "/" WIZARD_NAME)) { diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index 585282721..ad0b91ee6 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -38,7 +38,8 @@ ModelsList modelslist; ModelCell::ModelCell(const char* name) : valid_rfData(false) { - strncpy(modelFilename, name, sizeof(modelFilename)); + strncpy(modelFilename, name, sizeof(modelFilename)-1); + modelFilename[sizeof(modelFilename)-1] = '\0'; } ModelCell::ModelCell(const char* name, uint8_t len) : valid_rfData(false) diff --git a/radio/src/storage/sdcard_common.cpp b/radio/src/storage/sdcard_common.cpp index 68e4f17a8..563731d57 100644 --- a/radio/src/storage/sdcard_common.cpp +++ b/radio/src/storage/sdcard_common.cpp @@ -60,6 +60,7 @@ void storageEraseAll(bool warn) storageFormat(); storageDirty(EE_GENERAL); + storageDirty(EE_MODEL); storageCheck(true); } @@ -67,10 +68,13 @@ void storageFormat() { sdCheckAndCreateDirectory(RADIO_PATH); sdCheckAndCreateDirectory(MODELS_PATH); -#if defined(STORAGE_MODELSLIST) - storageCreateModelsList(); -#endif generalDefault(); +#if defined(STORAGE_MODELSLIST) + setModelDefaults(1); + storageCreateModelsList(); +#else + setModelDefaults(0); +#endif } void storageCheck(bool immediately) diff --git a/radio/src/storage/sdcard_yaml.cpp b/radio/src/storage/sdcard_yaml.cpp index 5e834e671..74ee5e1d2 100644 --- a/radio/src/storage/sdcard_yaml.cpp +++ b/radio/src/storage/sdcard_yaml.cpp @@ -76,7 +76,13 @@ void storageCreateModelsList() { modelslist.clear(); ModelsCategory* cat = modelslist.createCategory(DEFAULT_CATEGORY, false); - cat->addModel(DEFAULT_MODEL_FILENAME); + ModelCell* model = nullptr; + if (g_eeGeneral.currModelFilename[0] != '\0') { + model = modelslist.addModel(cat, g_eeGeneral.currModelFilename, false); + } else { + model = modelslist.addModel(cat, DEFAULT_MODEL_FILENAME, false); + } + model->setModelName(g_model.header.name); modelslist.save(); } #endif