From b42e14a297d3e0ea1307f50a6102dea096135036 Mon Sep 17 00:00:00 2001 From: eshifri Date: Thu, 13 Jan 2022 20:46:42 -0800 Subject: [PATCH 1/8] Model notes file name added for color LCD --- radio/src/dataconstants.h | 2 ++ radio/src/datastructs.h | 2 +- radio/src/datastructs_private.h | 1 + radio/src/gui/colorlcd/preflight_checks.cpp | 18 ++++++++++++++++++ radio/src/gui/colorlcd/view_text.cpp | 11 ++++++++++- radio/src/gui/gui_common.cpp | 8 ++++++++ .../src/storage/yaml/yaml_datastructs_nv14.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x10.cpp | 1 + 8 files changed, 42 insertions(+), 2 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 489f9a3be48..d8d7da47a2c 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -93,6 +93,8 @@ enum CurveType { CURVE_TYPE_LAST = CURVE_TYPE_CUSTOM }; +#define LEN_NOTES_FILE_NAME 15 + #define MIN_POINTS_PER_CURVE 3 #define MAX_POINTS_PER_CURVE 17 diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index c90cf723a55..c00fa5f8458 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -137,7 +137,7 @@ static inline void check_struct() #elif defined(PCBHORUS) #if defined(PCBX10) CHKSIZE(RadioData, 923); - CHKSIZE(ModelData, 11025); + CHKSIZE(ModelData, 11040); #else CHKSIZE(RadioData, 905); CHKSIZE(ModelData, 11023); diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 22a2a09fd10..975a4dd9b9b 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -697,6 +697,7 @@ PACK(struct ModelData { CUSTOM_SCREENS_DATA char modelRegistrationID[PXX2_LEN_REGISTRATION_ID]; + char modelNotesFileName[LEN_NOTES_FILE_NAME]; FUNCTION_SWITCHS_FIELDS diff --git a/radio/src/gui/colorlcd/preflight_checks.cpp b/radio/src/gui/colorlcd/preflight_checks.cpp index e5b9c619fe5..7060b71582f 100644 --- a/radio/src/gui/colorlcd/preflight_checks.cpp +++ b/radio/src/gui/colorlcd/preflight_checks.cpp @@ -109,6 +109,24 @@ PreflightChecks::PreflightChecks() : Page(ICON_MODEL_SETUP) auto line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_CHECKLIST, 0, COLOR_THEME_PRIMARY1); new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.displayChecklist)); + new FileChoice( + line, rect_t{}, MODELS_PATH, TEXT_EXT, sizeof(g_model.modelNotesFileName), + []() { + std::string notes(g_model.modelNotesFileName, + sizeof(g_model.modelNotesFileName)); + notes += TEXT_EXT; + return notes; + }, + [](std::string newValue) { + uint8_t nameLength; + uint8_t extLength; + getFileExtension(newValue.data(), 0, 0, &nameLength, &extLength); + nameLength -= extLength; + newValue = newValue.substr(0, nameLength); + strncpy(g_model.modelNotesFileName, newValue.c_str(), + sizeof(g_model.modelNotesFileName)); + SET_DIRTY(); + }); // Throttle warning line = form->newLine(&grid); diff --git a/radio/src/gui/colorlcd/view_text.cpp b/radio/src/gui/colorlcd/view_text.cpp index 799509ea865..0dbebded43c 100644 --- a/radio/src/gui/colorlcd/view_text.cpp +++ b/radio/src/gui/colorlcd/view_text.cpp @@ -208,13 +208,22 @@ void readModelNotes() bool notesFound = false; LED_ERROR_BEGIN(); - std::string modelNotesName(g_model.header.name); + std::string modelNotesName(g_model.modelNotesFileName); modelNotesName.append(TEXT_EXT); const char buf[] = {MODELS_PATH}; f_chdir((TCHAR *)buf); notesFound = openNotes(buf, modelNotesName); + if (!notesFound) { + modelNotesName.assign(g_model.header.name); + modelNotesName.append(TEXT_EXT); + const char buf[] = {MODELS_PATH}; + f_chdir((TCHAR*)buf); + + notesFound = openNotes(buf, modelNotesName); + } + if(!notesFound) { replaceSpaceWithUnderscore(modelNotesName); notesFound = openNotes(buf, modelNotesName); } diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 3e37d2688f3..cd548811ec7 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -884,6 +884,14 @@ bool modelHasNotes() return true; } + filename[sizeof(MODELS_PATH)] = 0; + strncat(filename, g_model.modelNotesFileName, + sizeof(g_model.modelNotesFileName)); + strcat(filename, TEXT_EXT); + if (isFileAvailable(filename)) { + return true; + } + buf = strcat_currentmodelname(&filename[sizeof(MODELS_PATH)], ' '); strcpy(buf, TEXT_EXT); if (isFileAvailable(filename)) { diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index 24f6e3dc0a8..03246fdc899 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -884,6 +884,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 1248, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index 98cd5e44bdb..1d8ae342706 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -908,6 +908,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { From 87248b7960d6fd521ce3550e43ec36cd994248ad Mon Sep 17 00:00:00 2001 From: eshifri Date: Sat, 15 Jan 2022 10:37:47 -0800 Subject: [PATCH 2/8] implementation for B/W TXs --- radio/src/datastructs.h | 16 +++---- radio/src/gui/128x64/model_setup.cpp | 47 ++++++++++++++++++- radio/src/gui/212x64/model_setup.cpp | 42 +++++++++++++++-- radio/src/gui/colorlcd/preflight_checks.cpp | 1 + radio/src/gui/common/stdlcd/view_text.cpp | 13 +++-- .../conversions/yaml/yaml_datastructs_t12.cpp | 1 + .../conversions/yaml/yaml_datastructs_t8.cpp | 1 + .../yaml/yaml_datastructs_tlite.cpp | 1 + .../yaml/yaml_datastructs_tx12.cpp | 1 + .../conversions/yaml/yaml_datastructs_x10.cpp | 1 + .../yaml/yaml_datastructs_x12s.cpp | 1 + .../conversions/yaml/yaml_datastructs_x7.cpp | 1 + .../conversions/yaml/yaml_datastructs_x9d.cpp | 1 + .../conversions/yaml/yaml_datastructs_x9e.cpp | 1 + .../yaml/yaml_datastructs_x9lite.cpp | 1 + .../yaml/yaml_datastructs_x9lites.cpp | 1 + .../yaml/yaml_datastructs_xlite.cpp | 1 + .../yaml/yaml_datastructs_xlites.cpp | 1 + .../yaml/yaml_datastructs_zorro.cpp | 1 + .../src/storage/yaml/yaml_datastructs_t12.cpp | 1 + .../src/storage/yaml/yaml_datastructs_t8.cpp | 1 + .../storage/yaml/yaml_datastructs_tlite.cpp | 1 + .../storage/yaml/yaml_datastructs_tpro.cpp | 1 + .../storage/yaml/yaml_datastructs_tx12.cpp | 1 + .../storage/yaml/yaml_datastructs_x12s.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x7.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x9d.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x9e.cpp | 1 + .../storage/yaml/yaml_datastructs_x9lite.cpp | 1 + .../storage/yaml/yaml_datastructs_x9lites.cpp | 1 + .../storage/yaml/yaml_datastructs_xlite.cpp | 1 + .../storage/yaml/yaml_datastructs_xlites.cpp | 1 + .../storage/yaml/yaml_datastructs_zorro.cpp | 1 + radio/src/translations.cpp | 2 + radio/src/translations.h | 2 + radio/src/translations/cn.h | 2 + radio/src/translations/cz.h | 2 + radio/src/translations/de.h | 2 + radio/src/translations/en.h | 2 + radio/src/translations/es.h | 2 + radio/src/translations/fi.h | 2 + radio/src/translations/fr.h | 2 + radio/src/translations/it.h | 2 + radio/src/translations/nl.h | 2 + radio/src/translations/pl.h | 2 + radio/src/translations/pt.h | 2 + radio/src/translations/se.h | 2 + radio/src/translations/tw.h | 2 + 48 files changed, 162 insertions(+), 15 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index c00fa5f8458..ab81d3db295 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -118,33 +118,33 @@ static inline void check_struct() #if defined(PCBXLITES) CHKSIZE(RadioData, 861); - CHKSIZE(ModelData, 6161); + CHKSIZE(ModelData, 6176); #elif defined(PCBXLITE) CHKSIZE(RadioData, 859); - CHKSIZE(ModelData, 6161); + CHKSIZE(ModelData, 6176); #elif defined(RADIO_TPRO) CHKSIZE(RadioData, 842); - CHKSIZE(ModelData, 6186); + CHKSIZE(ModelData, 6201); #elif defined(PCBX7) CHKSIZE(RadioData, 865); - CHKSIZE(ModelData, 6161); + CHKSIZE(ModelData, 66176); #elif defined(PCBX9E) CHKSIZE(RadioData, 955); - CHKSIZE(ModelData, 6613); + CHKSIZE(ModelData, 6628); #elif defined(PCBX9D) || defined(PCBX9DP) CHKSIZE(RadioData, 897); - CHKSIZE(ModelData, 6605); + CHKSIZE(ModelData, 6620); #elif defined(PCBHORUS) #if defined(PCBX10) CHKSIZE(RadioData, 923); CHKSIZE(ModelData, 11040); #else CHKSIZE(RadioData, 905); - CHKSIZE(ModelData, 11023); + CHKSIZE(ModelData, 11038); #endif #elif defined(PCBNV14) CHKSIZE(RadioData, 851); - CHKSIZE(ModelData, 10839); + CHKSIZE(ModelData, 10854); #endif #undef CHKSIZE diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 5d69b77a693..fc24ab8e373 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -93,6 +93,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_THROTTLE_TRIM_SWITCH, ITEM_MODEL_SETUP_PREFLIGHT_LABEL, ITEM_MODEL_SETUP_CHECKLIST_DISPLAY, + ITEM_MODEL_NOTES_FILE, ITEM_MODEL_SETUP_THROTTLE_WARNING, ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING, ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING_VALUE, @@ -188,7 +189,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_TRAINER_LABEL, ITEM_MODEL_SETUP_TRAINER_MODE, #if defined(BLUETOOTH) - ITEM_MODEL_SETUP_TRAINER_BLUETOOTH, + ITEM_MODEL_SETUP_TRAINER_BLUETOOTH, #endif ITEM_MODEL_SETUP_TRAINER_CHANNELS, ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS, @@ -356,6 +357,29 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event) } } +void copySelection(char *dst, const char *src, uint8_t size) +{ + if (memcmp(src, "---", 3) == 0) + memset(dst, 0, size); + else + memcpy(dst, src, size); +} + +void onModelNotesMenu(const char *result) +{ + if (result == STR_UPDATE_LIST) { + if (!sdListFiles(MODELS_PATH, TEXT_EXT, sizeof(g_model.modelNotesFileName), + nullptr)) { + POPUP_WARNING(STR_NO_NOTES_ON_SD); + } + } else if (result != STR_EXIT) { + // The user choose a file in the list + copySelection(g_model.modelNotesFileName, result, + sizeof(g_model.modelNotesFileName)); + storageDirty(EE_MODEL); + } +} + #include "common/stdlcd/model_setup_pxx1.cpp" #if defined(PXX2) @@ -759,6 +783,27 @@ void menuModelSetup(event_t event) g_model.displayChecklist = editCheckBox(g_model.displayChecklist, MODEL_SETUP_2ND_COLUMN, y, STR_CHECKLIST, attr, event); break; + case ITEM_MODEL_NOTES_FILE: + lcdDrawTextAlignedLeft(y, STR_NOTES_FILE); + if (ZEXIST(g_model.modelNotesFileName)) + lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, + g_model.modelNotesFileName, + sizeof(g_model.modelNotesFileName), attr); + else + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VCSWFUNC, 0, attr); + if (attr && event == EVT_KEY_BREAK(KEY_ENTER) && READ_ONLY_UNLOCKED()) { + s_editMode = 0; + if (sdListFiles(MODELS_PATH, TEXT_EXT, + sizeof(g_model.modelNotesFileName), + g_model.modelNotesFileName, LIST_NONE_SD_FILE)) { + POPUP_MENU_START(onModelNotesMenu); + TRACE("Notes: %s", g_model.modelNotesFileName); + } else { + POPUP_WARNING(STR_NO_NOTES_ON_SD); + } + } + break; + case ITEM_MODEL_SETUP_THROTTLE_WARNING: g_model.disableThrottleWarning = !editCheckBox(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLE_WARNING, attr, event); break; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 7a74c5220b7..af1f16d8b72 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -78,6 +78,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_THROTTLE_TRIM_SWITCH, ITEM_MODEL_SETUP_PREFLIGHT_LABEL, ITEM_MODEL_SETUP_CHECKLIST_DISPLAY, + ITEM_MODEL_NOTES_FILE, ITEM_MODEL_SETUP_THROTTLE_WARNING, ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING, ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING_VALUE, @@ -183,6 +184,21 @@ void onModelSetupBitmapMenu(const char * result) } } +void onModelNotesMenu(const char *result) +{ + if (result == STR_UPDATE_LIST) { + if (!sdListFiles(MODELS_PATH, TEXT_EXT, sizeof(g_model.modelNotesFileName), + nullptr)) { + POPUP_WARNING(STR_NO_NOTES_ON_SD); + } + } else if (result != STR_EXIT) { + // The user chose a file in the list + copySelection(g_model.modelNotesFileName, result, + sizeof(g_model.modelNotesFileName)); + storageDirty(EE_MODEL); + } +} + void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, event_t event) { TimerData &timer = g_model.timers[timerIdx]; @@ -468,9 +484,9 @@ void menuModelSetup(event_t event) #endif int sub = menuVerticalPosition; - - for (int i = 0; i < NUM_BODY_LINES; ++i) { - coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH; + for (int i = 0; i < NUM_BODY_LINES; ++i) + { + coord_t y = MENU_HEADER_HEIGHT + 1 + i* FH; uint8_t k = i + menuVerticalOffset; for (int j = 0; j <= k; j++) { if (mstate_tab[j] == HIDDEN_ROW) @@ -667,6 +683,26 @@ void menuModelSetup(event_t event) g_model.displayChecklist = editCheckBox(g_model.displayChecklist, MODEL_SETUP_2ND_COLUMN, y, STR_CHECKLIST, attr, event); break; + case ITEM_MODEL_NOTES_FILE: + lcdDrawTextAlignedLeft(y, STR_NOTES_FILE); + if (ZEXIST(g_model.modelNotesFileName)) lcdDrawSizedText( + MODEL_SETUP_2ND_COLUMN, y, g_model.modelNotesFileName, + sizeof(g_model.modelNotesFileName), attr); + else + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VCSWFUNC, 0, attr); + if (attr && event == EVT_KEY_BREAK(KEY_ENTER) && READ_ONLY_UNLOCKED()) { + s_editMode = 0; + if (sdListFiles(MODELS_PATH, TEXT_EXT, + sizeof(g_model.modelNotesFileName), + g_model.modelNotesFileName, LIST_NONE_SD_FILE)) { + POPUP_MENU_START(onModelNotesMenu); + TRACE("Notes: %s", g_model.modelNotesFileName); + } else { + POPUP_WARNING(STR_NO_NOTES_ON_SD); + } + } + break; + case ITEM_MODEL_SETUP_THROTTLE_WARNING: g_model.disableThrottleWarning = !editCheckBox(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLE_WARNING, attr, event); break; diff --git a/radio/src/gui/colorlcd/preflight_checks.cpp b/radio/src/gui/colorlcd/preflight_checks.cpp index 7060b71582f..9dee42eedc0 100644 --- a/radio/src/gui/colorlcd/preflight_checks.cpp +++ b/radio/src/gui/colorlcd/preflight_checks.cpp @@ -109,6 +109,7 @@ PreflightChecks::PreflightChecks() : Page(ICON_MODEL_SETUP) auto line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_CHECKLIST, 0, COLOR_THEME_PRIMARY1); new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.displayChecklist)); + new StaticText(line, rect_t{}, STR_NOTES_FILE, 0, COLOR_THEME_PRIMARY1); new FileChoice( line, rect_t{}, MODELS_PATH, TEXT_EXT, sizeof(g_model.modelNotesFileName), []() { diff --git a/radio/src/gui/common/stdlcd/view_text.cpp b/radio/src/gui/common/stdlcd/view_text.cpp index 35dbea976fe..d7910e2f206 100644 --- a/radio/src/gui/common/stdlcd/view_text.cpp +++ b/radio/src/gui/common/stdlcd/view_text.cpp @@ -105,8 +105,15 @@ void readModelNotes() LED_ERROR_BEGIN(); strcpy(reusableBuffer.viewText.filename, MODELS_PATH "/"); - char *buf = strcat_currentmodelname(&reusableBuffer.viewText.filename[sizeof(MODELS_PATH)], 0); - strcpy(buf, TEXT_EXT); + strcat(reusableBuffer.viewText.filename, g_model.modelNotesFileName); + char* buf = strcat(reusableBuffer.viewText.filename, TEXT_EXT); + + if (!isFileAvailable(buf)) { + strcpy(reusableBuffer.viewText.filename, MODELS_PATH "/"); + buf = strcat_currentmodelname( + &reusableBuffer.viewText.filename[sizeof(MODELS_PATH)], 0); + strcpy(buf, TEXT_EXT); + } waitKeysReleased(); event_t event = EVT_ENTRY; @@ -118,7 +125,7 @@ void readModelNotes() menuTextView(event); lcdRefresh(); } - if (power == e_power_off){ + if (power == e_power_off) { drawSleepBitmap(); boardOff(); break; diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp index 5d02e2cd77d..d08153c04a2 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp index 3b7452e96c6..54f42115116 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp index 3b7452e96c6..54f42115116 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp index 366acd3da82..9d122534635 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp index db2bd42cbdf..072bdab32fa 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp @@ -879,6 +879,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp index 41e00722ffd..5bdb4868c85 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp @@ -879,6 +879,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp index 3b7452e96c6..54f42115116 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp index 5241e7d0094..c6802b76146 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp @@ -846,6 +846,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp index aeaed279feb..66ecb73038e 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp @@ -886,6 +886,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp index d65fb41acb4..e6b64c8a5a1 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp @@ -816,6 +816,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp index 903bf0b7f53..9a931ffbed9 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp @@ -826,6 +826,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp index f42f557834d..3e7651e8740 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp @@ -823,6 +823,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp index fc0febc7dec..87cdc0c8b7e 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp @@ -827,6 +827,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp index 4a655962a0d..0e3ab652fb8 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp @@ -831,6 +831,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_t12.cpp b/radio/src/storage/yaml/yaml_datastructs_t12.cpp index 7d6cea5c3cd..496a8b73647 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t12.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_t8.cpp b/radio/src/storage/yaml/yaml_datastructs_t8.cpp index 2c7432054b0..e3168d05399 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t8.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t8.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_tlite.cpp b/radio/src/storage/yaml/yaml_datastructs_tlite.cpp index 2c7432054b0..e3168d05399 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tlite.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp index cb80626a5fe..41403dc690c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp @@ -860,6 +860,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_UNSIGNED( "functionSwitchConfig", 16 ), YAML_UNSIGNED( "functionSwitchGroup", 16 ), YAML_UNSIGNED( "functionSwitchStartConfig", 16 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_tx12.cpp b/radio/src/storage/yaml/yaml_datastructs_tx12.cpp index a75335d90fb..bf0d3cb53fb 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tx12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tx12.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp index b06ae1d4472..a91d83871cb 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp @@ -906,6 +906,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x7.cpp b/radio/src/storage/yaml/yaml_datastructs_x7.cpp index 2c7432054b0..e3168d05399 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x7.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x7.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index 5f9f3cec7f7..fef78ad3a8c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -869,6 +869,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index 0fcc29345a6..efefb109db2 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -909,6 +909,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp index b47c9de97f5..0b22b376dd0 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp @@ -839,6 +839,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp index de3cbed4494..e9b7a325670 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp @@ -849,6 +849,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp index 3ae0a7c5b55..5481e2bc4fc 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp @@ -846,6 +846,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index c89c637537f..7481c06d863 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -850,6 +850,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_zorro.cpp b/radio/src/storage/yaml/yaml_datastructs_zorro.cpp index af5b6fa0feb..bf032849dc7 100644 --- a/radio/src/storage/yaml/yaml_datastructs_zorro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_zorro.cpp @@ -854,6 +854,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), + YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 0a4fd937622..6d2a67e308a 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -441,6 +441,7 @@ const char STR_SDHC_CARD[] = TR_SDHC_CARD; const char STR_NO_SOUNDS_ON_SD[] = TR_NO_SOUNDS_ON_SD; const char STR_NO_MODELS_ON_SD[] = TR_NO_MODELS_ON_SD; const char STR_NO_BITMAPS_ON_SD[] = TR_NO_BITMAPS_ON_SD; +const char STR_NO_NOTES_ON_SD[] = TR_NO_NOTES_ON_SD; const char STR_NO_SCRIPTS_ON_SD[] = TR_NO_SCRIPTS_ON_SD; const char STR_SCRIPT_SYNTAX_ERROR[] = TR_SCRIPT_SYNTAX_ERROR; const char STR_SCRIPT_PANIC[] = TR_SCRIPT_PANIC; @@ -653,6 +654,7 @@ const char STR_MODULE_PROTOCOL_WARN_LINE2[] = TR_MODULE_PROTOCOL_WARN_LINE2; const char STR_SET[] = TR_SET; const char STR_PREFLIGHT[] = TR_PREFLIGHT; const char STR_CHECKLIST[] = TR_CHECKLIST; +const char STR_NOTES_FILE[] = TR_NOTES_FILE; const char STR_VIEW_NOTES[] = TR_VIEW_NOTES; const char STR_MODEL_SELECT[] = TR_MODEL_SELECT; const char STR_RESET_SUBMENU[] = TR_RESET_SUBMENU; diff --git a/radio/src/translations.h b/radio/src/translations.h index 34d3a630f54..9a836e10ea4 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -668,6 +668,7 @@ extern const char STR_SDHC_CARD[]; extern const char STR_NO_SOUNDS_ON_SD[]; extern const char STR_NO_MODELS_ON_SD[]; extern const char STR_NO_BITMAPS_ON_SD[]; +extern const char STR_NO_NOTES_ON_SD[] ; extern const char STR_NO_SCRIPTS_ON_SD[]; extern const char STR_SCRIPT_SYNTAX_ERROR[]; extern const char STR_SCRIPT_PANIC[]; @@ -999,6 +1000,7 @@ extern const char STR_MODULE_PROTOCOL_WARN_LINE2[]; extern const char STR_SET[]; extern const char STR_PREFLIGHT[]; extern const char STR_CHECKLIST[]; +extern const char STR_NOTES_FILE[]; extern const char STR_VIEW_NOTES[]; extern const char STR_MODEL_SELECT[]; extern const char STR_RESET_SUBMENU[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 6f47838f62d..96b08016758 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -684,6 +684,7 @@ #define TR_NO_SOUNDS_ON_SD "存储卡中无音频" #define TR_NO_MODELS_ON_SD "存储卡中无模型" #define TR_NO_BITMAPS_ON_SD "存储卡中无图片" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "存储卡中无脚本" #define TR_SCRIPT_SYNTAX_ERROR "脚本程序语法错误" #define TR_SCRIPT_PANIC "Script panic" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "关机保持mAh", INDENT "关机保持 mAh") #define TR_PREFLIGHT "初始位置检查" #define TR_CHECKLIST TR(INDENT "显示列表", INDENT "显示列表") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS偏移", INDENT "FAS 偏移量") #define TR_AUX_SERIAL_MODE "串口" #define TR_AUX2_SERIAL_MODE "串口 2" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 69846ed346b..9e0f737b359 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -700,6 +700,7 @@ #define TR_NO_SOUNDS_ON_SD "žádný zvuk" BREAKSPACE "na SD" #define TR_NO_MODELS_ON_SD "žádný model" BREAKSPACE "na SD" #define TR_NO_BITMAPS_ON_SD "žádné obrázky" BREAKSPACE "na SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "na SD" #define TR_NO_SCRIPTS_ON_SD "žádný skript" BREAKSPACE "na SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntaktická chyba", "Syntaktická chyba skriptu") #define TR_SCRIPT_PANIC "Script zmaten" @@ -945,6 +946,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Ulož mAh", INDENT "Ukládat mAh") #define TR_PREFLIGHT "Předletová kontrola" #define TR_CHECKLIST TR(INDENT "Poznámky", INDENT "Zobrazit poznámky") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Ofset") #define TR_AUX_SERIAL_MODE "Seriový port" #define TR_AUX2_SERIAL_MODE "Seriový port 2" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index ec9aa1c16f6..85324973149 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -682,6 +682,7 @@ #define TR_NO_SOUNDS_ON_SD "Keine Töne" BREAKSPACE "auf SD" #define TR_NO_MODELS_ON_SD "Kein Modelle" BREAKSPACE "auf SD" #define TR_NO_BITMAPS_ON_SD "Keine Bitmaps" BREAKSPACE "auf SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "Keine Skripte" BREAKSPACE "auf SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntaxfehler", "Skript Syntaxfehler") #define TR_SCRIPT_PANIC "Skript Panik" @@ -933,6 +934,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Spr. mAh", INDENT "Speichern mAh") //9XR-Pro #define TR_PREFLIGHT "Vorflug-Checkliste" #define TR_CHECKLIST TR(INDENT "Checkliste", INDENT "Checkliste anzeigen") //9XR-Pro +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS-Ofs", INDENT "FAS-Offset") #define TR_AUX_SERIAL_MODE "Serieller Port" #define TR_AUX2_SERIAL_MODE "Serieller Port 2" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index bc91f817520..5296d5aae2b 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -684,6 +684,7 @@ #define TR_NO_SOUNDS_ON_SD "No sounds" BREAKSPACE "on SD" #define TR_NO_MODELS_ON_SD "No models" BREAKSPACE "on SD" #define TR_NO_BITMAPS_ON_SD "No bitmaps" BREAKSPACE "on SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "No scripts" BREAKSPACE "on SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Script syntax error") #define TR_SCRIPT_PANIC "Script panic" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Str mAh", INDENT "Persistent mAh") #define TR_PREFLIGHT "Preflight Checks" #define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Display checklist") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS offset") #define TR_AUX_SERIAL_MODE "Serial port" #define TR_AUX2_SERIAL_MODE "Serial port 2" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index f39915b5060..61f9e07490b 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -684,6 +684,7 @@ #define TR_NO_SOUNDS_ON_SD "Sin sonidos en SD" #define TR_NO_MODELS_ON_SD "Sin modelos en SD" #define TR_NO_BITMAPS_ON_SD "Sin imágenes en SD" +#define TR_NO_NOTES_ON_SD "Sin notes file en SD" #define TR_NO_SCRIPTS_ON_SD "No scripts en SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Script syntax error") #define TR_SCRIPT_PANIC "Script panic" @@ -932,6 +933,7 @@ #define TR_PERSISTENT_MAH INDENT "Valor mAh" #define TR_PREFLIGHT "Chequeos prevuelo" #define TR_CHECKLIST TR(INDENT "Lista verif", INDENT "Lista verificación") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Puerto serie" #define TR_AUX2_SERIAL_MODE "Puerto serie 2" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 30f8ea27fc1..4377d74db76 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -696,6 +696,7 @@ #define TR_NO_SOUNDS_ON_SD "Ei ääniä SD:llä" #define TR_NO_MODELS_ON_SD "No Models on SD" #define TR_NO_BITMAPS_ON_SD "Ei bittikarttoja SD:llä" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "Ei skriptejä SD:llä" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Script syntax error") #define TR_SCRIPT_PANIC "Skriptipaniikki" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH INDENT "Store mAh" #define TR_PREFLIGHT "Preflight Checks" #define TR_CHECKLIST INDENT "Display Checklist" +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Sarjaportti" #define TR_AUX2_SERIAL_MODE "Sarjaportti 2" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 7c6d9bd18d5..8d2868b35b4 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -703,6 +703,7 @@ #define TR_NO_SOUNDS_ON_SD "Aucun son sur SD" #define TR_NO_MODELS_ON_SD "Aucun modèle SD" #define TR_NO_BITMAPS_ON_SD "Aucun Bitmap SD" +#define TR_NO_NOTES_ON_SD "No notes file on SD" #define TR_NO_SCRIPTS_ON_SD "Aucun Script SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Erreur syntaxe", "Erreur syntaxe script") #define TR_SCRIPT_PANIC "Script bloqué" @@ -948,6 +949,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Enr. mAh", INDENT "Enregistrer mAh") #define TR_PREFLIGHT "Vérifications avant vol" #define TR_CHECKLIST TR(INDENT "Notes", INDENT "Afficher notes") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "Corr FAS", INDENT "Correction FAS") #define TR_AUX_SERIAL_MODE "Port série" #define TR_AUX2_SERIAL_MODE "Port série 2" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index f464235b71d..5938a93e828 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -684,6 +684,7 @@ #define TR_NO_SOUNDS_ON_SD "No Suoni" BREAKSPACE "su SD" #define TR_NO_MODELS_ON_SD "No Model." BREAKSPACE "su SD" #define TR_NO_BITMAPS_ON_SD "No Immag." BREAKSPACE "su SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "No Scripts" BREAKSPACE "su SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Errore sintassi", "Script errore sintassi") #define TR_SCRIPT_PANIC "Script panico" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH INDENT "Memo mAh" #define TR_PREFLIGHT "Controlli Prevolo" #define TR_CHECKLIST INDENT "Mostra Checklist" +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Porta Seriale" #define TR_AUX2_SERIAL_MODE "Porta Seriale 2" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index 862407d3a7b..54965c40b20 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -690,6 +690,7 @@ #define TR_NO_SOUNDS_ON_SD "Geen Geluiden" BREAKSPACE "op SD" #define TR_NO_MODELS_ON_SD "Geen Modellen" BREAKSPACE "op SD" #define TR_NO_BITMAPS_ON_SD "Geen Bitmaps" BREAKSPACE "op SD" +#define TR_NO_NOTES_ON_SD "Geen Notes file" BREAKSPACE "op SD" #define TR_NO_SCRIPTS_ON_SD "Geen Scripts" BREAKSPACE "op SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Script syntax error") #define TR_SCRIPT_PANIC "Script panic" @@ -936,6 +937,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Str mAh", INDENT "Vasthouden mAh") #define TR_PREFLIGHT "Preflight Checks" #define TR_CHECKLIST TR(INDENT "Checklist", INDENT "Toon Checklist") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Seriele poort" #define TR_AUX2_SERIAL_MODE "Seriele poort 2" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 62bc2f9b93d..da8e0721305 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -680,6 +680,7 @@ #define TR_NO_SOUNDS_ON_SD "Brak dźwięków na SD" #define TR_NO_MODELS_ON_SD "Brak modelu na SD" #define TR_NO_BITMAPS_ON_SD "Brak obrazków na SD" +#define TR_NO_NOTES_ON_SD "Brak notes file na SD" #define TR_NO_SCRIPTS_ON_SD "Brak skryptów na SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Skrypt:syntax error") #define TR_SCRIPT_PANIC "Skrypt:panic" @@ -925,6 +926,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "Zap. mAh", INDENT "Zapisz mAh") #define TR_PREFLIGHT "Lista Ostrzeżeń" #define TR_CHECKLIST TR(INDENT "Czeklista",INDENT "Pokaż Listę Ostrzeżeń") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Port szreg." #define TR_AUX2_SERIAL_MODE "Port szreg. 2" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index a627c6bec00..0b380bf94f9 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -685,6 +685,7 @@ #define TR_NO_SOUNDS_ON_SD "Sem Som no SD" #define TR_NO_MODELS_ON_SD "Sem Modelo no SD" #define TR_NO_BITMAPS_ON_SD "No Bitmaps on SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "No Scripts on SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntax error", "Script syntax error") #define TR_SCRIPT_PANIC "Script panic" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH INDENT "Store mAh" #define TR_PREFLIGHT "Preflight Checks" #define TR_CHECKLIST INDENT "Display Checklist" +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_AUX_SERIAL_MODE "Serial port" #define TR_AUX2_SERIAL_MODE "Serial port 2" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index 7c2fd88c0b7..e2752e5eae3 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -713,6 +713,7 @@ #define TR_NO_SOUNDS_ON_SD "Inga ljud på SD" #define TR_NO_MODELS_ON_SD "Inga modeller på SD" #define TR_NO_BITMAPS_ON_SD "Ikoner saknas på SD" +#define TR_NO_NOTES_ON_SD "No notes file" BREAKSPACE "on SD" #define TR_NO_SCRIPTS_ON_SD "Programkod saknas på SD" #define TR_SCRIPT_SYNTAX_ERROR TR("Syntaxfel", "Skriptsyntaxfel") #define TR_SCRIPT_PANIC "Script panic" @@ -962,6 +963,7 @@ #define TR_PERSISTENT_MAH INDENT "Lagra mAh" #define TR_PREFLIGHT "Startkontroller" #define TR_CHECKLIST TR(INDENT "Checklista", INDENT "Visa checklista") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS ofs", INDENT "FAS offset") #define TR_AUX_SERIAL_MODE "Serieport" #define TR_AUX2_SERIAL_MODE "Serieport 2" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 2eb67833964..042fc106afd 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -684,6 +684,7 @@ #define TR_NO_SOUNDS_ON_SD "存儲卡中無音頻" #define TR_NO_MODELS_ON_SD "存儲卡中無模型" #define TR_NO_BITMAPS_ON_SD "存儲卡中無圖片" +#define TR_NO_NOTES_ON_SD "No notes file on SD" #define TR_NO_SCRIPTS_ON_SD "存儲卡中無腳本" #define TR_SCRIPT_SYNTAX_ERROR "腳本程序語法錯誤" #define TR_SCRIPT_PANIC "Script panic" @@ -930,6 +931,7 @@ #define TR_PERSISTENT_MAH TR(INDENT "關機保持mAh", INDENT "關機保持 mAh") #define TR_PREFLIGHT "初始位置檢查" #define TR_CHECKLIST TR(INDENT "顯示列表", INDENT "顯示列表") +#define TR_NOTES_FILE TR(INDENT "Notes", INDENT "Notes File") #define TR_FAS_OFFSET TR(INDENT "FAS偏移", INDENT "FAS 偏移量") #define TR_AUX_SERIAL_MODE "端口" #define TR_AUX2_SERIAL_MODE "端口 2" From 19bf252a22655fa81fe4dcda132c30bdd009134d Mon Sep 17 00:00:00 2001 From: eshifri Date: Sat, 15 Jan 2022 12:07:46 -0800 Subject: [PATCH 3/8] Fix YAML onversion structures --- radio/src/datastructs.h | 2 +- radio/src/gui/colorlcd/preflight_checks.cpp | 3 +++ radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp | 1 - .../src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp | 1 - radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp | 1 - 16 files changed, 4 insertions(+), 15 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index ab81d3db295..ff658b37526 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -127,7 +127,7 @@ static inline void check_struct() CHKSIZE(ModelData, 6201); #elif defined(PCBX7) CHKSIZE(RadioData, 865); - CHKSIZE(ModelData, 66176); + CHKSIZE(ModelData, 6176); #elif defined(PCBX9E) CHKSIZE(RadioData, 955); CHKSIZE(ModelData, 6628); diff --git a/radio/src/gui/colorlcd/preflight_checks.cpp b/radio/src/gui/colorlcd/preflight_checks.cpp index 9dee42eedc0..238487b57a4 100644 --- a/radio/src/gui/colorlcd/preflight_checks.cpp +++ b/radio/src/gui/colorlcd/preflight_checks.cpp @@ -109,6 +109,9 @@ PreflightChecks::PreflightChecks() : Page(ICON_MODEL_SETUP) auto line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_CHECKLIST, 0, COLOR_THEME_PRIMARY1); new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.displayChecklist)); + + // Checklist filename + line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_NOTES_FILE, 0, COLOR_THEME_PRIMARY1); new FileChoice( line, rect_t{}, MODELS_PATH, TEXT_EXT, sizeof(g_model.modelNotesFileName), diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp index d08153c04a2..5d02e2cd77d 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp index 54f42115116..3b7452e96c6 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp index 54f42115116..3b7452e96c6 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp index 9d122534635..366acd3da82 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp index 072bdab32fa..db2bd42cbdf 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x10.cpp @@ -879,7 +879,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp index 5bdb4868c85..41e00722ffd 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x12s.cpp @@ -879,7 +879,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp index 54f42115116..3b7452e96c6 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp index c6802b76146..5241e7d0094 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp @@ -846,7 +846,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp index 66ecb73038e..aeaed279feb 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp @@ -886,7 +886,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp index e6b64c8a5a1..d65fb41acb4 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp @@ -816,7 +816,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp index 9a931ffbed9..903bf0b7f53 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp @@ -826,7 +826,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp index 3e7651e8740..f42f557834d 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp @@ -823,7 +823,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp index 87cdc0c8b7e..fc0febc7dec 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp @@ -827,7 +827,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp index 0e3ab652fb8..4a655962a0d 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_zorro.cpp @@ -831,7 +831,6 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), - YAML_STRING("modelNotesFileName", 15), YAML_END }; static const struct YamlNode struct_PartialModel[] = { From 90e9f79cb4c51a6970204bf13a83418e350cddb1 Mon Sep 17 00:00:00 2001 From: eshifri Date: Thu, 20 Jan 2022 09:07:58 -0800 Subject: [PATCH 4/8] Add Companion support --- .../src/firmwares/edgetx/yaml_modeldata.cpp | 2 + companion/src/firmwares/modeldata.h | 3 +- companion/src/helpers.cpp | 2 +- companion/src/modeledit/setup.cpp | 12 + companion/src/modeledit/setup.h | 1 + companion/src/modeledit/setup.ui | 444 +++++++++--------- 6 files changed, 245 insertions(+), 219 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_modeldata.cpp b/companion/src/firmwares/edgetx/yaml_modeldata.cpp index a69275118b1..82ace148d0d 100644 --- a/companion/src/firmwares/edgetx/yaml_modeldata.cpp +++ b/companion/src/firmwares/edgetx/yaml_modeldata.cpp @@ -953,6 +953,7 @@ Node convert::encode(const ModelData& rhs) } node["modelRegistrationID"] = rhs.registrationId; + node["modelNotesFileName"] = rhs.modelNotesFileName; if (Boards::getCapability(getCurrentBoard(), Board::FunctionSwitches)) { node["functionSwitchConfig"] = rhs.functionSwitchConfig; @@ -1130,6 +1131,7 @@ bool convert::decode(const Node& node, ModelData& rhs) node["view"] >> rhs.view; node["modelRegistrationID"] >> rhs.registrationId; + node["modelNotesFileName"] >> rhs.modelNotesFileName; node["functionSwitchConfig"] >> rhs.functionSwitchConfig; node["functionSwitchGroup"] >> rhs.functionSwitchGroup; diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index 3d63a65e25e..f76a5046a13 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -175,7 +175,8 @@ class ModelData { unsigned int view; char registrationId[8+1]; - + char modelNotesFileName[15+1]; + enum FunctionSwitchConfig { FUNC_SWITCH_CONFIG_NONE, FUNC_SWITCH_CONFIG_FIRST = FUNC_SWITCH_CONFIG_NONE, diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index e4701aea6f1..60d23386d1b 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -687,7 +687,7 @@ QString Helpers::getChecklistsPath() QString Helpers::getChecklistFilename(const ModelData * model) { - QString name = model->name; + QString name = model->modelNotesFileName; name.replace(" ", "_"); name.append(".txt"); // TODO : add to constants return name; diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 1154467184a..fd32273d7f0 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -1596,6 +1596,17 @@ void SetupPanel::on_name_editingFinished() } } +void SetupPanel::on_notesName_editingFinished() +{ + //if (QString(model->modelNotesFileName) != ui->notes_file->text()) + { + int length = ui->notes_file->maxLength(); + strncpy(model->modelNotesFileName, ui->notes_file->text().toLatin1(), + length); + emit modified(); + } +} + void SetupPanel::on_image_currentIndexChanged(int index) { if (!lock) { @@ -1663,6 +1674,7 @@ void SetupPanel::update() ui->displayText->setChecked(model->displayChecklist); ui->gfEnabled->setChecked(!model->noGlobalFunctions); ui->jitterFilter->setCurrentIndex(model->jitterFilter); + ui->notes_file->setText(model->modelNotesFileName); updateBeepCenter(); updateStartupSwitches(); diff --git a/companion/src/modeledit/setup.h b/companion/src/modeledit/setup.h index cdc7302cdb7..67fed6196c7 100644 --- a/companion/src/modeledit/setup.h +++ b/companion/src/modeledit/setup.h @@ -213,6 +213,7 @@ class SetupPanel : public ModelPanel void onModuleUpdateItemModels(); void onFunctionSwitchesUpdateItemModels(); void on_jitterFilter_currentIndexChanged(int index); + void on_notesName_editingFinished(); private: Ui::Setup *ui; diff --git a/companion/src/modeledit/setup.ui b/companion/src/modeledit/setup.ui index 010ce675806..8177454a53f 100644 --- a/companion/src/modeledit/setup.ui +++ b/companion/src/modeledit/setup.ui @@ -6,7 +6,7 @@ 0 0 - 1024 + 1007 435 @@ -32,6 +32,88 @@ + + + + Qt::Horizontal + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 50 + false + + + + Timer 2 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + + + + + 75 + true + + + + Model + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Timer 3 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + @@ -133,8 +215,14 @@ - - + + + + + 0 + 0 + + 75 @@ -142,15 +230,15 @@ - Model + Warnings Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + + 50 @@ -158,13 +246,23 @@ - Timer 3 + Top LCD Timer Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + 0 + 0 + + + + @@ -233,99 +331,8 @@ - - - - - 50 - false - - - - Top LCD Timer - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Warnings - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Horizontal - - - - - - - - 50 - false - - - - Timer 2 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - + + Qt::Horizontal @@ -378,7 +385,7 @@ - Pot/Slider Warnings + Pot Warnings @@ -435,13 +442,6 @@ - - - - Qt::Horizontal - - - @@ -466,83 +466,20 @@ - - - - - 0 - 0 - - - - - Exponential - - - - - Extra Fine - - - - - Fine - - - - - Medium - - - - - Coarse - - - - - - - - - 0 - 0 - - - - - Never - - - - - On change - - - - - Always - - - - - - + + Qt::LeftToRight - Throttle Warning + Custom Throttle Warning - - - - Qt::LeftToRight - + + - Custom Throttle Warning + Global Functions @@ -562,23 +499,6 @@ - - - - Qt::LeftToRight - - - Display Checklist - - - - - - - Global Functions - - - @@ -592,8 +512,18 @@ - - + + + + Qt::LeftToRight + + + Display Checklist + + + + + 0 @@ -602,32 +532,64 @@ - Global + Never - Off + On change - On + Always - - + + + + Qt::LeftToRight + + + Throttle Warning + + + + + - + 0 0 - - Edit Checklist... - + + + Exponential + + + + + Extra Fine + + + + + Fine + + + + + Medium + + + + + Coarse + + @@ -640,6 +602,13 @@ + + + + Throttle trim switch + + + @@ -656,11 +625,29 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - - - - Throttle trim switch + + + + + 0 + 0 + + + + Global + + + + + Off + + + + + On + + @@ -673,6 +660,16 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi + + + + + 0 + 0 + + + + @@ -683,17 +680,14 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - - - - - 0 - 0 - + + + + Checklist file name - + Qt::Horizontal @@ -706,6 +700,22 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi + + + + + 0 + 0 + + + + Edit Checklist... + + + + + + From dc66eaac9f0553d602a5515d7de7cbbb8353b417 Mon Sep 17 00:00:00 2001 From: eshifri Date: Thu, 20 Jan 2022 18:22:43 -0800 Subject: [PATCH 5/8] Fix saving name in Companion --- companion/src/modeledit/setup.cpp | 10 +++++----- companion/src/modeledit/setup.h | 2 +- companion/src/modeledit/setup.ui | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index fd32273d7f0..0e942997ea9 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -1596,12 +1596,12 @@ void SetupPanel::on_name_editingFinished() } } -void SetupPanel::on_notesName_editingFinished() +void SetupPanel::on_notesFile_editingFinished() { - //if (QString(model->modelNotesFileName) != ui->notes_file->text()) + if (QString(model->modelNotesFileName) != ui->notesFile->text()) { - int length = ui->notes_file->maxLength(); - strncpy(model->modelNotesFileName, ui->notes_file->text().toLatin1(), + int length = ui->notesFile->maxLength(); + strncpy(model->modelNotesFileName, ui->notesFile->text().toLatin1(), length); emit modified(); } @@ -1674,7 +1674,7 @@ void SetupPanel::update() ui->displayText->setChecked(model->displayChecklist); ui->gfEnabled->setChecked(!model->noGlobalFunctions); ui->jitterFilter->setCurrentIndex(model->jitterFilter); - ui->notes_file->setText(model->modelNotesFileName); + ui->notesFile->setText(model->modelNotesFileName); updateBeepCenter(); updateStartupSwitches(); diff --git a/companion/src/modeledit/setup.h b/companion/src/modeledit/setup.h index 67fed6196c7..cf7e3fb89ba 100644 --- a/companion/src/modeledit/setup.h +++ b/companion/src/modeledit/setup.h @@ -213,7 +213,7 @@ class SetupPanel : public ModelPanel void onModuleUpdateItemModels(); void onFunctionSwitchesUpdateItemModels(); void on_jitterFilter_currentIndexChanged(int index); - void on_notesName_editingFinished(); + void on_notesFile_editingFinished(); private: Ui::Setup *ui; diff --git a/companion/src/modeledit/setup.ui b/companion/src/modeledit/setup.ui index 8177454a53f..54d5edcd2c4 100644 --- a/companion/src/modeledit/setup.ui +++ b/companion/src/modeledit/setup.ui @@ -681,7 +681,7 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + Checklist file name @@ -714,7 +714,17 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + + + + 0 + 0 + + + + 15 + + From 5493fb95c87e31ed6e49bb3197952b00225bf023 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sat, 26 Mar 2022 11:33:37 +1000 Subject: [PATCH 6/8] Use model name for checklist if not specified --- companion/src/constants.h | 2 ++ companion/src/helpers.cpp | 17 ++++++++++++----- companion/src/helpers.h | 2 +- companion/src/modeledit/setup.cpp | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/companion/src/constants.h b/companion/src/constants.h index 5e7a2d9d265..7cc423dbcdb 100644 --- a/companion/src/constants.h +++ b/companion/src/constants.h @@ -50,6 +50,8 @@ #define CPN_MAX_SCRIPTS 9 #define CPN_MAX_SCRIPT_INPUTS 10 +#define CPN_STR_MODELNOTES_EXT ".txt" + #define CPN_STR_APP_NAME QCoreApplication::translate("Companion", "EdgeTX Companion") #define CPN_STR_TTL_INFO QCoreApplication::translate("Companion", "Information") // shared Title Case words, eg. for a window title or section heading #define CPN_STR_TTL_WARNING QCoreApplication::translate("Companion", "Warning") diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 60d23386d1b..e8d6f6d8cdf 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -685,17 +685,24 @@ QString Helpers::getChecklistsPath() return QDir::toNativeSeparators(g.profile[g.id()].sdPath() + "/MODELS/"); // TODO : add sub folder to constants } -QString Helpers::getChecklistFilename(const ModelData * model) +QString Helpers::getChecklistFilename(const ModelData * model, bool appendExtension) { - QString name = model->modelNotesFileName; - name.replace(" ", "_"); - name.append(".txt"); // TODO : add to constants + QString name; + if (!strlen(model->modelNotesFileName) == 0) { + name = model->modelNotesFileName; + } else { + name = model->name; + name.replace(" ", "_"); + } + if (appendExtension) { + name.append(CPN_STR_MODELNOTES_EXT); + } return name; } QString Helpers::getChecklistFilePath(const ModelData * model) { - return getChecklistsPath() + getChecklistFilename(model); + return getChecklistsPath() + getChecklistFilename(model, true); } QString Helpers::removeAccents(const QString & str) diff --git a/companion/src/helpers.h b/companion/src/helpers.h index fc349254600..673f18d19e9 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -110,7 +110,7 @@ namespace Helpers void exportAppSettings(QWidget * dlgParent = nullptr); QString getChecklistsPath(); - QString getChecklistFilename(const ModelData * model); + QString getChecklistFilename(const ModelData * model, bool appendExtension); QString getChecklistFilePath(const ModelData * model); QString removeAccents(const QString & str); unsigned int getBitmappedValue(const unsigned int & field, const unsigned int index, const unsigned int numbits = 1, const unsigned int offset = 0); diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 0e942997ea9..81073d09768 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -1674,7 +1674,7 @@ void SetupPanel::update() ui->displayText->setChecked(model->displayChecklist); ui->gfEnabled->setChecked(!model->noGlobalFunctions); ui->jitterFilter->setCurrentIndex(model->jitterFilter); - ui->notesFile->setText(model->modelNotesFileName); + ui->notesFile->setText(Helpers::getChecklistFilename(model, false)); updateBeepCenter(); updateStartupSwitches(); From 1b5c3b2dacd12bee049ad1c36fed73bb6edec242 Mon Sep 17 00:00:00 2001 From: eshifri Date: Sat, 6 Aug 2022 22:19:03 -0700 Subject: [PATCH 7/8] Make file name field conditional. --- radio/src/gui/colorlcd/preflight_checks.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/preflight_checks.cpp b/radio/src/gui/colorlcd/preflight_checks.cpp index 238487b57a4..698787da1d8 100644 --- a/radio/src/gui/colorlcd/preflight_checks.cpp +++ b/radio/src/gui/colorlcd/preflight_checks.cpp @@ -108,7 +108,7 @@ PreflightChecks::PreflightChecks() : Page(ICON_MODEL_SETUP) // Display checklist auto line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_CHECKLIST, 0, COLOR_THEME_PRIMARY1); - new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.displayChecklist)); + auto fn = new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.displayChecklist)); // Checklist filename line = form->newLine(&grid); @@ -131,6 +131,7 @@ PreflightChecks::PreflightChecks() : Page(ICON_MODEL_SETUP) sizeof(g_model.modelNotesFileName)); SET_DIRTY(); }); + make_conditional(line, fn); // Throttle warning line = form->newLine(&grid); From 2bb2a806850be1bd2d7d8c159a1d7f878890722b Mon Sep 17 00:00:00 2001 From: eshifri Date: Sun, 7 Aug 2022 11:40:56 -0700 Subject: [PATCH 8/8] Add option to select model notes file from the file explorer (SD manager) --- radio/src/gui/colorlcd/radio_sdmanager.cpp | 10 ++++++++++ radio/src/gui/common/stdlcd/radio_sdmanager.cpp | 13 +++++++++++++ radio/src/translations.cpp | 1 + radio/src/translations.h | 1 + radio/src/translations/cn.h | 1 + radio/src/translations/cz.h | 1 + radio/src/translations/da.h | 1 + radio/src/translations/de.h | 1 + radio/src/translations/en.h | 1 + radio/src/translations/es.h | 1 + radio/src/translations/fi.h | 1 + radio/src/translations/fr.h | 1 + radio/src/translations/it.h | 1 + radio/src/translations/nl.h | 1 + radio/src/translations/pl.h | 1 + radio/src/translations/pt.h | 1 + radio/src/translations/se.h | 1 + radio/src/translations/tw.h | 1 + 18 files changed, 39 insertions(+) diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index a6306abd95d..a31acd54a28 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -248,6 +248,16 @@ void RadioSdManagerPage::fileAction(const char* path, const char* name, } } }); + if (!strcasecmp(MODELS_PATH, path)) { + menu->addLine(TR_ASSIGN_NOTES, [=]() { + int nameLength = std::min(sizeof(g_model.modelNotesFileName) - 1, + strlen(name) - sizeof(TEXT_EXT) + 1); + memcpy(g_model.modelNotesFileName, name, nameLength); + g_model.modelNotesFileName[nameLength] = 0; + g_model.displayChecklist = 1; + storageDirty(EE_MODEL); + }); + } } if (!READ_ONLY() && !strcasecmp(ext, FIRMWARE_EXT)) { if (isBootloader(fullpath)) { diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 6b1a4e1683b..79163da76e1 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -205,6 +205,14 @@ void onSdManagerMenu(const char * result) storageDirty(EE_MODEL); } #endif + else if (result == STR_ASSIGN_NOTES) { + int nameLength = std::min((int)sizeof(g_model.modelNotesFileName) - 1, + (int)(strlen(line) - sizeof(TEXT_EXT) + 1)); + memcpy(g_model.modelNotesFileName, line, nameLength); + g_model.modelNotesFileName[nameLength] = 0; + g_model.displayChecklist = 1; + storageDirty(EE_MODEL); + } else if (result == STR_VIEW_TEXT) { getSelectionFullPath(lfn); pushMenuTextView(lfn); @@ -395,6 +403,11 @@ void menuRadioSdManager(event_t _event) if (ext) { if (!strcasecmp(ext, SOUNDS_EXT)) { POPUP_MENU_ADD_ITEM(STR_PLAY_FILE); + } else if (isExtensionMatching(ext, TEXT_EXT) && + (ext - line) <= (int)sizeof(g_model.modelNotesFileName) - 1) { + f_getcwd(lfn, FF_MAX_LFN); + if (!strcmp(lfn, MODELS_PATH)) + POPUP_MENU_ADD_ITEM(STR_ASSIGN_NOTES); } #if LCD_DEPTH > 1 else if (isExtensionMatching(ext, BITMAPS_EXT)) { diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 6d2a67e308a..eba1ad33237 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -449,6 +449,7 @@ const char STR_SCRIPT_KILLED[] = TR_SCRIPT_KILLED; const char STR_SCRIPT_ERROR[] = TR_SCRIPT_ERROR; const char STR_PLAY_FILE[] = TR_PLAY_FILE; const char STR_ASSIGN_BITMAP[] = TR_ASSIGN_BITMAP; +const char STR_ASSIGN_NOTES[] = TR_ASSIGN_NOTES; const char STR_EXECUTE_FILE[] = TR_EXECUTE_FILE; const char STR_DELETE_FILE[] = TR_DELETE_FILE; const char STR_COPY_FILE[] = TR_COPY_FILE; diff --git a/radio/src/translations.h b/radio/src/translations.h index 9a836e10ea4..f553b3913e6 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -676,6 +676,7 @@ extern const char STR_SCRIPT_KILLED[]; extern const char STR_SCRIPT_ERROR[]; extern const char STR_PLAY_FILE[]; extern const char STR_ASSIGN_BITMAP[]; +extern const char STR_ASSIGN_NOTES[]; #if defined(COLORLCD) extern const char STR_ASSIGN_SPLASH[]; extern const char STR_FIRST_CHANNEL[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 96b08016758..aa9abe6c579 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -696,6 +696,7 @@ #define TR_RENAME_FILE "重命名" #define TR_ASSIGN_BITMAP "设置为模型图片" #define TR_ASSIGN_SPLASH "设置为开机图片" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "执行" #define TR_REMOVED "已删除" #define TR_SD_INFO "信息" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 9e0f737b359..c680377f25e 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -712,6 +712,7 @@ #define TR_RENAME_FILE "Přejmenovat" #define TR_ASSIGN_BITMAP "Zvolit obrázek" #define TR_ASSIGN_SPLASH "Úvodní obrazovka" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Spustit" #define TR_REMOVED "odstraněn" #define TR_SD_INFO "Informace" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 7e9af5a78d7..15323e86104 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -697,6 +697,7 @@ #define TR_RENAME_FILE "Omdøb" #define TR_ASSIGN_BITMAP "Tildel billede" #define TR_ASSIGN_SPLASH "Start billde" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Udfør" #define TR_REMOVED " slettet" #define TR_SD_INFO "Information" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 85324973149..26ebdf9b34a 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -694,6 +694,7 @@ #define TR_RENAME_FILE "Umbenennen" #define TR_ASSIGN_BITMAP "Bitmap zuordnen" #define TR_ASSIGN_SPLASH "Als Startbild" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Execute" #define TR_REMOVED " gelöscht" #define TR_SD_INFO "Information" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 5296d5aae2b..2e9b6071783 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -696,6 +696,7 @@ #define TR_RENAME_FILE "Rename" #define TR_ASSIGN_BITMAP "Assign bitmap" #define TR_ASSIGN_SPLASH "Splash screen" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Execute" #define TR_REMOVED " removed" #define TR_SD_INFO "Information" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 61f9e07490b..517820cbd07 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -696,6 +696,7 @@ #define TR_RENAME_FILE "Renombrar" #define TR_ASSIGN_BITMAP "Asignar imagen" #define TR_ASSIGN_SPLASH "Pant. bienvenida" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Ejecutar" #define TR_REMOVED "Borrado" #define TR_SD_INFO "Información" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 4377d74db76..fc6a3579d62 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -708,6 +708,7 @@ #define TR_RENAME_FILE "Nimeä uudelleen" #define TR_ASSIGN_BITMAP "Määritä bittikartta" #define TR_ASSIGN_SPLASH "Aloitusruutu" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Suorittaa" #define TR_REMOVED "poistettu" #define TR_SD_INFO "Tiedot" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 8d2868b35b4..e4d1b0aabe0 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -715,6 +715,7 @@ #define TR_RENAME_FILE "Renommer" #define TR_ASSIGN_BITMAP "Sélectionner image" #define TR_ASSIGN_SPLASH "Logo d'accueil" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Exécuter" #define TR_REMOVED " supprimé" #define TR_SD_INFO "Information" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index 5938a93e828..b7c0148d106 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -696,6 +696,7 @@ #define TR_RENAME_FILE "Rinomina" #define TR_ASSIGN_BITMAP "Assegna immagine" #define TR_ASSIGN_SPLASH "Splash screen" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Esegui" #define TR_REMOVED " rimosso" #define TR_SD_INFO "Informazioni" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index 54965c40b20..30a733a9e31 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -702,6 +702,7 @@ #define TR_RENAME_FILE "Hernoemen" #define TR_ASSIGN_BITMAP "Bitmap toekennen" #define TR_ASSIGN_SPLASH "Splash screen" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Uitvoeren" #define TR_REMOVED " verwijderd" #define TR_SD_INFO "Informatie" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index da8e0721305..240fc3ba1b4 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -692,6 +692,7 @@ #define TR_RENAME_FILE "Zmień nazwę" #define TR_ASSIGN_BITMAP "Wybierz obrazek" #define TR_ASSIGN_SPLASH "Splash screen" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Wykonaj" #define TR_REMOVED " skasowane" #define TR_SD_INFO "Informacje" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 0b380bf94f9..fe544116204 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -697,6 +697,7 @@ #define TR_RENAME_FILE "Renomear" #define TR_ASSIGN_BITMAP "Assign Bitmap" #define TR_ASSIGN_SPLASH "Splash screen" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Execute" #define TR_REMOVED "Remover" #define TR_SD_INFO "Dados SD" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index e2752e5eae3..d93522339a8 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -725,6 +725,7 @@ #define TR_RENAME_FILE "Byt namn" #define TR_ASSIGN_BITMAP "Tilldela ikon" #define TR_ASSIGN_SPLASH "Startbild" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "Utför" #define TR_REMOVED " raderad" #define TR_SD_INFO "Information" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 042fc106afd..c82ba7de5ed 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -696,6 +696,7 @@ #define TR_RENAME_FILE "重取名" #define TR_ASSIGN_BITMAP "設置為模型圖片" #define TR_ASSIGN_SPLASH "設置為開機圖片" +#define TR_ASSIGN_NOTES "Assign as notes" #define TR_EXECUTE_FILE "執行" #define TR_REMOVED "已刪除" #define TR_SD_INFO "信息"