From 82f60cdc81f2d12259b577dfc907c00879cdcd91 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sat, 19 Jun 2021 14:48:41 +0200 Subject: [PATCH] Fix model names on model select page with not yet converted models Resolves #248 --- radio/src/gui/colorlcd/model_select.cpp | 23 +++++++++++++++---- radio/src/storage/conversions/conversions.cpp | 6 ++--- radio/src/storage/modelslist.cpp | 4 +++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 9a4a0115b..04e08f621 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -108,15 +108,30 @@ class ModelButton : public Button if (strncmp(modelCell->modelFilename, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME) == 0) { memcpy(&partialModel.header, &g_model.header, sizeof(partialModel)); + version = EEPROM_VER; } else { error = readModel(modelCell->modelFilename, (uint8_t *)&partialModel.header, sizeof(partialModel), &version); - if (!error) { - if (modelCell->modelName[0] == '\0' && - partialModel.header.name[0] != '\0') { - modelCell->setModelName(partialModel.header.name); + } + + if (!error) { + if (modelCell->modelName[0] == '\0' && + partialModel.header.name[0] != '\0') { + + if (version == 219) { + size_t len = sizeof(partialModel.header.name); + char* str = partialModel.header.name; + for (int i=0; i < len; i++) { + str[i] = zchar2char(str[i]); + } + // Trim string + while(len > 0 && str[len-1]) { + if (str[len - 1] != ' ' && str[len - 1] != '\0') break; + str[--len] = '\0'; + } } + modelCell->setModelName(partialModel.header.name); } } diff --git a/radio/src/storage/conversions/conversions.cpp b/radio/src/storage/conversions/conversions.cpp index 7071b7540..34430cce6 100644 --- a/radio/src/storage/conversions/conversions.cpp +++ b/radio/src/storage/conversions/conversions.cpp @@ -59,6 +59,9 @@ void convertRadioData(int version) RAISE_ALERT(STR_STORAGE_WARNING, STR_SDCARD_CONVERSION_REQUIRE, NULL, AU_NONE); + // Load models list before converting + modelslist.load(); + unsigned converted = 0; auto to_convert = modelslist.getModelsCount() + 1; @@ -76,9 +79,6 @@ void convertRadioData(int version) RTOS_WAIT_MS(200); #endif - // Load models list before converting - modelslist.load(); - const char* error = nullptr; for (auto category_ptr : modelslist.getCategories()) { for (auto model_ptr : *category_ptr) { diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index b871c5732..1ba806284 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -48,7 +48,9 @@ ModelCell::~ModelCell() void ModelCell::setModelName(char * name) { strncpy(modelName, name, LEN_MODEL_NAME); - if (modelName[0] == 0) { + modelName[LEN_MODEL_NAME] = '\0'; + + if (modelName[0] == '\0') { char * tmp; strncpy(modelName, modelFilename, LEN_MODEL_NAME); tmp = (char *) memchr(modelName, '.', LEN_MODEL_NAME);