From 0d344bedd8f462fbfdd2d01ab7abc1065cb05db6 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Thu, 10 Jun 2021 13:17:49 +0200 Subject: [PATCH] [color] Batch conversions --- radio/src/gui/colorlcd/layout.h | 1 + .../colorlcd/layouts/layout_factory_impl.h | 2 +- radio/src/gui/colorlcd/model_select.cpp | 12 +-- radio/src/gui/colorlcd/themes/480_default.cpp | 5 +- radio/src/gui/colorlcd/themes/flysky.cpp | 5 +- radio/src/sdcard.h | 3 +- radio/src/storage/conversions/conversions.cpp | 91 ++++++++++++++++ .../conversions/conversions_219_220.cpp | 20 ++-- radio/src/storage/modelslist.cpp | 101 +----------------- radio/src/storage/modelslist.h | 2 - radio/src/storage/sdcard_common.cpp | 14 +-- radio/src/storage/sdcard_common.h | 1 + radio/src/thirdparty/libopenui | 2 +- radio/src/translations.cpp | 2 + radio/src/translations.h | 2 + radio/src/translations/cn.h.txt | 2 + radio/src/translations/cz.h.txt | 2 + radio/src/translations/de.h.txt | 2 + radio/src/translations/en.h.txt | 2 + radio/src/translations/es.h.txt | 2 + radio/src/translations/fi.h.txt | 2 + radio/src/translations/fr.h.txt | 2 + radio/src/translations/it.h.txt | 2 + radio/src/translations/nl.h.txt | 2 + radio/src/translations/pl.h.txt | 2 + radio/src/translations/pt.h.txt | 2 + radio/src/translations/se.h.txt | 2 + radio/src/translations/tw.h.txt | 2 + 28 files changed, 162 insertions(+), 127 deletions(-) diff --git a/radio/src/gui/colorlcd/layout.h b/radio/src/gui/colorlcd/layout.h index f611dc034..a1c31a9da 100644 --- a/radio/src/gui/colorlcd/layout.h +++ b/radio/src/gui/colorlcd/layout.h @@ -44,6 +44,7 @@ class LayoutFactory virtual const ZoneOption * getOptions() const = 0; virtual WidgetsContainer * create(LayoutPersistentData * persistentData) const = 0; virtual WidgetsContainer * load(LayoutPersistentData * persistentData) const = 0; + virtual void initPersistentData(LayoutPersistentData * persistentData) const = 0; protected: const char * id; diff --git a/radio/src/gui/colorlcd/layouts/layout_factory_impl.h b/radio/src/gui/colorlcd/layouts/layout_factory_impl.h index 30738471e..1acb3f7c5 100644 --- a/radio/src/gui/colorlcd/layouts/layout_factory_impl.h +++ b/radio/src/gui/colorlcd/layouts/layout_factory_impl.h @@ -150,7 +150,7 @@ class BaseLayoutFactory: public LayoutFactory return layout; } - void initPersistentData(Layout::PersistentData * persistentData) const + void initPersistentData(Layout::PersistentData * persistentData) const override { memset(persistentData, 0, sizeof(Layout::PersistentData)); if (options) { diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 2dbc75c93..465a54af7 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -128,16 +128,14 @@ class ModelButton: public Button { } else { error = readModel(modelCell->modelFilename, (uint8_t *)&partialModel.header, sizeof(partialModel), &version); - // LEN_BITMAP_NAME has now 4 bytes more - if (version <= 218) { - memmove(partialModel.timers, &(partialModel.header.bitmap[10]), sizeof(TimerData)*MAX_TIMERS); - memclear(&(partialModel.header.bitmap[10]), 4); + if (!error) { + if (modelCell->modelName[0] == '\0' + && partialModel.header.name[0] != '\0') { + modelCell->setModelName(partialModel.header.name); + } } } -// if (modelCell->modelName[0] == '\0' && !error) -// setModelName(partialModel.header.name); // resets buffer!!! - buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT); if (buffer == nullptr) { return; diff --git a/radio/src/gui/colorlcd/themes/480_default.cpp b/radio/src/gui/colorlcd/themes/480_default.cpp index 67f8f3b97..a674f1243 100644 --- a/radio/src/gui/colorlcd/themes/480_default.cpp +++ b/radio/src/gui/colorlcd/themes/480_default.cpp @@ -402,11 +402,12 @@ class Theme480: public OpenTxTheme dc->drawText(DATETIME_MIDDLE, DATETIME_LINE2, str, FONT(XS)|FOCUS_COLOR|CENTERED); } - void drawProgressBar(BitmapBuffer * dc, coord_t x, coord_t y, coord_t w, coord_t h, int value) const override + void drawProgressBar(BitmapBuffer *dc, coord_t x, coord_t y, coord_t w, + coord_t h, int value, int total) const override { dc->drawSolidRect(x, y, w, h, 1, DEFAULT_COLOR); if (value > 0) { - int width = (w * value) / 100; + int width = (w * value) / total; dc->drawSolidFilledRect(x + 2, y + 2, width - 4, h - 4, CHECKBOX_COLOR); } } diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index b10f50fb6..4a0648e5e 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -420,11 +420,12 @@ class FlyskyTheme: public OpenTxTheme dc->drawText(DATETIME_MIDDLE, DATETIME_LINE2, str, FONT(XS)|FOCUS_COLOR|CENTERED); } - void drawProgressBar(BitmapBuffer * dc, coord_t x, coord_t y, coord_t w, coord_t h, int value) const override + void drawProgressBar(BitmapBuffer *dc, coord_t x, coord_t y, coord_t w, + coord_t h, int value, int total) const override { dc->drawSolidRect(x, y, w, h, 1, DEFAULT_COLOR); if (value > 0) { - int width = (w * value) / 100; + int width = (w * value) / total; dc->drawSolidFilledRect(x + 2, y + 2, width - 4, h - 4, CHECKBOX_COLOR); } } diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index c58261c44..9901c1696 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -54,8 +54,9 @@ #define LEN_FILE_PATH_MAX (sizeof(SCRIPTS_TELEM_PATH)+1) // longest + "/" #if defined(COLORLCD) +#define RADIO_FILENAME "radio.bin" const char RADIO_MODELSLIST_PATH[] = RADIO_PATH PATH_SEPARATOR "models.txt"; -const char RADIO_SETTINGS_PATH[] = RADIO_PATH PATH_SEPARATOR "radio.bin"; +const char RADIO_SETTINGS_PATH[] = RADIO_PATH PATH_SEPARATOR RADIO_FILENAME; #if defined(SDCARD_YAML) const char RADIO_MODELSLIST_YAML_PATH[] = RADIO_PATH PATH_SEPARATOR "models.yml"; const char RADIO_SETTINGS_YAML_PATH[] = RADIO_PATH PATH_SEPARATOR "radio.yml"; diff --git a/radio/src/storage/conversions/conversions.cpp b/radio/src/storage/conversions/conversions.cpp index 75fa45aaf..74f8991c1 100644 --- a/radio/src/storage/conversions/conversions.cpp +++ b/radio/src/storage/conversions/conversions.cpp @@ -21,16 +21,107 @@ #include "opentx.h" #include "conversions.h" +#if defined(SDCARD) +#include "storage/modelslist.h" +#include "storage/sdcard_common.h" + +#if defined(COLORLCD) +static void drawProgressScreen(const char* filename, int progress, int total) +{ + OpenTxTheme* l_theme = static_cast(theme); + + lcd->reset(); + l_theme->drawBackground(lcd); + lcd->drawText(LCD_W/2, LCD_H/2 - 30, STR_CONVERTING, FONT(XL) | CENTERED | ALARM_COLOR); + lcd->drawText(LCD_W/2, LCD_H/2, filename, FONT(STD) | CENTERED | DEFAULT_COLOR); + + l_theme->drawProgressBar(lcd, + LCD_W / 4, + LCD_H / 2 + 40, + LCD_W / 2, + 20, + progress, total); + + WDG_RESET(); + lcdRefresh(); +} +#endif + void convertRadioData(int version) { TRACE("convertRadioData(%d)", version); +#if defined(COLORLCD) + // the theme has not been loaded before + static_cast(theme)->load(); +#endif + + // Init backlight mode before entering alert screens + requiredBacklightBright = BACKLIGHT_FORCED_ON; + +#if defined(PCBHORUS) + g_eeGeneral.blOffBright = 20; +#endif + + RAISE_ALERT(STR_STORAGE_WARNING, STR_SDCARD_CONVERSION_REQUIRE, NULL, + AU_NONE); + + unsigned converted = 0; + auto to_convert = modelslist.getModelsCount() + 1; + +#if defined(COLORLCD) + drawProgressScreen(RADIO_FILENAME, converted, to_convert); +#endif + + TRACE("converting '%s' (%d/%d)", RADIO_FILENAME, converted, to_convert); + #if STORAGE_CONVERSIONS < 220 if (version == 219) { convertRadioData_219_to_220(g_eeGeneral); } #endif + converted++; + +#if defined(SIMU) + RTOS_WAIT_MS(200); +#endif + + const char* error = nullptr; + for (auto category_ptr : modelslist.getCategories()) { + for (auto model_ptr : *category_ptr) { + + uint8_t model_version; + const char* filename = model_ptr->modelFilename; + + TRACE("converting '%s' (%d/%d)", filename, converted, to_convert); +#if defined(COLORLCD) + drawProgressScreen(filename, converted, to_convert); +#endif + + error = readModel(filename, (uint8_t *)&g_model, sizeof(g_model), &model_version); + if (!error) { + + convertModelData(model_version); + + char path[256]; + getModelPath(path, filename); + error = writeFile(path, (uint8_t *)&g_model, sizeof(g_model)); + //TODO: what should be done with this error? + } + + converted++; + +#if defined(SIMU) + RTOS_WAIT_MS(200); +#endif + } + } + + // reload models list + modelslist.clear(); + modelslist.load(); } +#endif void convertModelData(int version) { diff --git a/radio/src/storage/conversions/conversions_219_220.cpp b/radio/src/storage/conversions/conversions_219_220.cpp index 8743b2889..7fbe3eb0f 100644 --- a/radio/src/storage/conversions/conversions_219_220.cpp +++ b/radio/src/storage/conversions/conversions_219_220.cpp @@ -94,6 +94,11 @@ static void convertToStr(char* str, size_t len) } } +#if defined(COLORLCD) +extern const LayoutFactory * defaultLayout; +extern OpenTxTheme * defaultTheme; +#endif + void convertModelData_219_to_220(ModelData &model) { ModelData* oldModelAllocated = (ModelData*)malloc(sizeof(ModelData)); @@ -101,7 +106,6 @@ void convertModelData_219_to_220(ModelData &model) memcpy(&oldModel, &model, sizeof(ModelData)); ModelData& newModel = (ModelData&)model; - convertToStr(model.header.name, LEN_MODEL_NAME_219); for (uint8_t i=0; igetId()); + defaultLayout->initPersistentData(&newModel.screenData[0].layoutData); + } #endif free(oldModelAllocated); } -#if defined(PCBHORUS) -extern OpenTxTheme * defaultTheme; -#endif - void convertRadioData_219_to_220(RadioData & settings) { TRACE("Radio conversion from v219 to v220"); @@ -217,7 +221,7 @@ void convertRadioData_219_to_220(RadioData & settings) RadioData& oldSettings = *oldSettingsAllocated; memcpy(&oldSettings, &settings, sizeof(RadioData)); -#if defined(PCBHORUS) +#if defined(COLORLCD) // Clear CustomScreenData + TopBarPersistentData // as they cannot be converted (missing option types) strcpy(g_eeGeneral.themeName, defaultTheme->getName()); diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index 0b5c20b81..b871c5732 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -28,17 +28,14 @@ using std::list; ModelsList modelslist; -ModelCell::ModelCell(const char * name): - valid_rfData(false) +ModelCell::ModelCell(const char* name) : valid_rfData(false) { strncpy(modelFilename, name, sizeof(modelFilename)); } -ModelCell::ModelCell(const char * name, uint8_t len) - : valid_rfData(false) +ModelCell::ModelCell(const char* name, uint8_t len) : valid_rfData(false) { - if (len > sizeof(modelFilename)-1) - len = sizeof(modelFilename)-1; + if (len > sizeof(modelFilename) - 1) len = sizeof(modelFilename) - 1; memcpy(modelFilename, name, len); modelFilename[len] = '\0'; @@ -55,7 +52,7 @@ void ModelCell::setModelName(char * name) char * tmp; strncpy(modelName, modelFilename, LEN_MODEL_NAME); tmp = (char *) memchr(modelName, '.', LEN_MODEL_NAME); - if (tmp) + if (tmp != nullptr) *tmp = 0; } } @@ -72,11 +69,10 @@ void ModelCell::setModelName(char* name, uint8_t len) char * tmp; strncpy(modelName, modelFilename, LEN_MODEL_NAME); tmp = (char *) memchr(modelName, '.', LEN_MODEL_NAME); - if (tmp != NULL) + if (tmp != nullptr) *tmp = 0; } - //resetBuffer(); } void ModelCell::setModelId(uint8_t moduleIdx, uint8_t id) @@ -84,93 +80,6 @@ void ModelCell::setModelId(uint8_t moduleIdx, uint8_t id) modelId[moduleIdx] = id; } -// void ModelCell::resetBuffer() -// { -// if (buffer) { -// delete buffer; -// buffer = NULL; -// } -// } - -// const BitmapBuffer * ModelCell::getBuffer() -// { -// if (!buffer) { -// loadBitmap(); -// } -// return buffer; -// } - -// void ModelCell::loadBitmap() -// { -// uint8_t version; - -// PACK(struct { -// ModelHeader header; -// TimerData timers[MAX_TIMERS]; -// }) partialmodel; - -// const char * error = NULL; -// BitmapBuffer * tmp_buffer; - -// if (strncmp(modelFilename, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME) == 0) { -// memcpy(&partialmodel.header, &g_model.header, sizeof(partialmodel)); -// } -// else { -// #if !defined (SDCARD_YAML) -// error = readModel(modelFilename, (uint8_t *)&partialmodel.header, sizeof(partialmodel), &version); -// // LEN_BITMAP_NAME has now 4 bytes more -// if (version <= 218) { -// memmove(partialmodel.timers, &(partialmodel.header.bitmap[10]), sizeof(TimerData)*MAX_TIMERS); -// memclear(&(partialmodel.header.bitmap[10]), 4); -// } -// #else -// memset(&partialmodel.header,0,sizeof(partialmodel)); -// #endif -// } - -// if ((modelName[0] == 0) && ! error) -// setModelName(partialmodel.header.name); // resets buffer!!! - -// tmp_buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT); -// if (tmp_buffer == NULL) { -// return; -// } -// tmp_buffer->clear(TEXT_BGCOLOR); - -// if (error) { -// tmp_buffer->drawText(5, 2, "(Invalid Model)", TEXT_COLOR); -// tmp_buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); -// } -// else { -// char timer[LEN_TIMER_STRING]; -// tmp_buffer->drawSizedText(5, 2, modelName, /*LEN_MODEL_NAME*/strlen(modelName), -// SMLSIZE|TEXT_COLOR); - -// getTimerString(timer, 0); -// for (uint8_t i = 0; i < MAX_TIMERS; i++) { -// if (partialmodel.timers[i].mode != 0 && partialmodel.timers[i].persistent) { -// getTimerString(timer, partialmodel.timers[i].value, 1); -// break; -// } -// } -// tmp_buffer->drawText(101, 40, timer, TEXT_COLOR); -// for (int i=0; i<4; i++) { -// tmp_buffer->drawBitmapPattern(104+i*11, 25, LBM_SCORE0, TITLE_BGCOLOR); -// } -// GET_FILENAME(filename, BITMAPS_PATH, partialmodel.header.bitmap, ""); -// const BitmapBuffer * bitmap = BitmapBuffer::load(filename); -// if (bitmap) { -// tmp_buffer->drawScaledBitmap(bitmap, 5, 24, 56, 32); -// delete bitmap; -// } -// else { -// tmp_buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); -// } -// } -// tmp_buffer->drawSolidHorizontalLine(5, 19, 143, LINE_COLOR); - -// buffer = tmp_buffer; -// } void ModelCell::save(FIL* file) { diff --git a/radio/src/storage/modelslist.h b/radio/src/storage/modelslist.h index 85054c512..07d1f7af6 100644 --- a/radio/src/storage/modelslist.h +++ b/radio/src/storage/modelslist.h @@ -65,8 +65,6 @@ class ModelCell void setRfModuleData(uint8_t moduleIdx, ModuleData* modData); bool fetchRfData(); - // void loadBitmap(); - // void resetBuffer(); }; class ModelsCategory: public std::list diff --git a/radio/src/storage/sdcard_common.cpp b/radio/src/storage/sdcard_common.cpp index 59e1e8668..cdf755ee8 100644 --- a/radio/src/storage/sdcard_common.cpp +++ b/radio/src/storage/sdcard_common.cpp @@ -145,6 +145,13 @@ void storageReadAll() { TRACE("storageReadAll"); + // Wipe models list in case + // it's being reloaded after USB connection + modelslist.clear(); + + // and reload the list + modelslist.load(); + if (loadRadioSettings() != nullptr) { storageEraseAll(true); } @@ -172,12 +179,5 @@ void storageReadAll() if (loadModel(g_eeGeneral.currModelFilename, false) != nullptr) { TRACE("No current model or SD card error"); } - - // Wipe models list in case - // it's being reloaded after USB connection - modelslist.clear(); - - // and reload the list - modelslist.load(); } diff --git a/radio/src/storage/sdcard_common.h b/radio/src/storage/sdcard_common.h index 5533e004a..9d7683d12 100644 --- a/radio/src/storage/sdcard_common.h +++ b/radio/src/storage/sdcard_common.h @@ -35,6 +35,7 @@ // opens radio.bin or model file const char * openFile(const char * fullpath, FIL * file, uint16_t * size, uint8_t * version); +const char * writeFile(const char * fullpath, const uint8_t * data, uint16_t size); void getModelPath(char * path, const char * filename); diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index 4b78e03cd..ace19326c 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit 4b78e03cd00608d7870e6603eb1ff974fbd05da6 +Subproject commit ace19326c5bacd9b0b2561c2c9a0fc780beecbd6 diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index c7b8b26ea..87363800f 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -821,6 +821,8 @@ const char STR_EEPROMOVERFLOW[] = TR_EEPROMOVERFLOW; const char STR_BAD_RADIO_DATA[] = TR_BAD_RADIO_DATA; const char STR_STORAGE_WARNING[] = TR_STORAGE_WARNING; 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 #if defined(LUA) diff --git a/radio/src/translations.h b/radio/src/translations.h index fd5175c44..ad0a0f68a 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -600,6 +600,8 @@ extern const char STR_CAT_NOT_EMPTY[]; extern const char STR_WARNING[]; extern const char STR_STORAGE_WARNING[]; extern const char STR_EEPROM_CONVERTING[]; +extern const char STR_SDCARD_CONVERSION_REQUIRE[]; +extern const char STR_CONVERTING[]; extern const char STR_THROTTLE_UPPERCASE[]; extern const char STR_ALARMSWARN[]; extern const char STR_SWITCHWARN[]; diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index b1577ab32..3de51490b 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -690,6 +690,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "存储" #define TR_EEPROM_CONVERTING "转换数据" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "油门" #define TR_ALARMSWARN "警告" #define TR_SWITCHWARN TR("开关", "开关位置") diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index c0801defa..d80f62470 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -777,6 +777,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "ÚLOŽIŠTĚ" #define TR_EEPROM_CONVERTING "Aktualizuji EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "PLYNU" #define TR_ALARMSWARN "ALARMU" #define TR_SWITCHWARN "POZICE" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 384fbd23d..eccd3bee1 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -782,6 +782,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "SPEICHER" #define TR_EEPROM_CONVERTING "EEPROM Konvertierung" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "GAS" #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "SCHALTER" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index ae77352ea..914910216 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -786,6 +786,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Converting EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "THROTTLE" #define TR_ALARMSWARN "ALARMS" #define TR_SWITCHWARN TR("SWITCH", "CONTROL") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index d483265d4..b88667292 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -784,6 +784,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "ALMAC." #define TR_EEPROM_CONVERTING "Convirtiendo EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE TR("ACELERAD.", "ACELERADOR") #define TR_ALARMSWARN "ALARMAS" #define TR_SWITCHWARN TR("INTERRUP.", "INTERRUPTOR") diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 626128ffc..05eb538cd 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -798,6 +798,8 @@ #define TR_EEPROMWARN "FINSKA" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "THROTTLE" #define TR_ALARMSWARN "ALARMS" #define TR_SWITCHWARN TR("SWITCH","CONTROL") diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 119d95a4d..4f0ffc7d3 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -803,6 +803,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STOCKAGE" #define TR_EEPROM_CONVERTING "Conversion EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "GAZ" #define TR_ALARMSWARN "SON" #define TR_SWITCHWARN TR("INTERS","CONTROLES") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 435d785d4..d035dfd1d 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -804,6 +804,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Conversione EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "MOTORE" #define TR_ALARMSWARN "ALLARMI" #define TR_SWITCHWARN "CONTROLLI" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index f8c132f8e..b9486ca6e 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -787,6 +787,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converteren" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "GAS" #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "SCHAKELAAR" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index d0259b62a..593e019da 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -801,6 +801,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Konwersja EEPROM" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "GAZ" #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN TR("Przełą","Kontrola") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index a33ebe0fe..b16e08f32 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -802,6 +802,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "ACELERAD" #define TR_ALARMSWARN "ALARMES" #define TR_SWITCHWARN "CHAVES" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 7addcd639..22dee994a 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -803,6 +803,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "LAGRING" #define TR_EEPROM_CONVERTING "EEPROM Konvertering" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "GAS" #define TR_ALARMSWARN "ALARM" #define TR_SWITCHWARN "BRYTARE" diff --git a/radio/src/translations/tw.h.txt b/radio/src/translations/tw.h.txt index e492070ac..06a903269 100644 --- a/radio/src/translations/tw.h.txt +++ b/radio/src/translations/tw.h.txt @@ -690,6 +690,8 @@ #define TR_EEPROMWARN "EEPROM" #define TR_STORAGE_WARNING "存儲" #define TR_EEPROM_CONVERTING "轉換數據" +#define TR_SDCARD_CONVERSION_REQUIRE "SD card conversion required" +#define TR_CONVERTING "Converting: " #define TR_THROTTLE_UPPERCASE "油門" #define TR_ALARMSWARN "警告" #define TR_SWITCHWARN TR("開關", "開關位置")