diff --git a/radio/src/audio.cpp b/radio/src/audio.cpp index bbe59ff34..fb8714fda 100644 --- a/radio/src/audio.cpp +++ b/radio/src/audio.cpp @@ -303,7 +303,7 @@ char * getModelAudioPath(char * path) { strcpy(path, SOUNDS_PATH "/"); strncpy(path+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char * result = strcat_currentmodelname(path+sizeof(SOUNDS_PATH)); + char * result = strcat_currentmodelname(path+sizeof(SOUNDS_PATH), 0); *result++ = '/'; *result = '\0'; return result; diff --git a/radio/src/gui/colorlcd/view_text.cpp b/radio/src/gui/colorlcd/view_text.cpp index 68e8e02cd..4c8fedc1c 100644 --- a/radio/src/gui/colorlcd/view_text.cpp +++ b/radio/src/gui/colorlcd/view_text.cpp @@ -428,15 +428,57 @@ void ViewTextWindow::drawVerticalScrollbar(BitmapBuffer *dc) #include "datastructs.h" +static void replaceSpaceWithUnderscore(std::string& name) +{ + size_t index; + do { + index = name.find(' '); + if(index != std::string::npos) + name[index] = '_'; + } while (index != std::string::npos); +} + +bool openNotes(const char buf[], std::string modelNotesName) +{ + if(isFileAvailable(modelNotesName.c_str())) { + new ViewTextWindow(std::string(buf), modelNotesName, ICON_MODEL); + return true; + } else { + return false; + } +} void readModelNotes() { + bool notesFound = false; LED_ERROR_BEGIN(); std::string modelNotesName(g_model.header.name); modelNotesName.append(TEXT_EXT); const char buf[] = {MODELS_PATH}; f_chdir((TCHAR*)buf); - new ViewTextWindow(std::string(buf), modelNotesName, ICON_MODEL); + + notesFound = openNotes(buf, modelNotesName); + if(!notesFound) { + replaceSpaceWithUnderscore(modelNotesName); + notesFound = openNotes(buf, modelNotesName); + } + +#if !defined(EEPROM) + if(!notesFound) { + modelNotesName.assign(g_eeGeneral.currModelFilename); + size_t index = modelNotesName.find(".bin"); + if(index != std::string::npos) + { + modelNotesName.erase(index); + modelNotesName.append(TEXT_EXT); + notesFound = openNotes(buf, modelNotesName); + } + if(!notesFound) { + replaceSpaceWithUnderscore(modelNotesName); + notesFound = openNotes(buf, modelNotesName); + } + } +#endif LED_ERROR_END(); } \ No newline at end of file diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 4c15aecfa..969e0e623 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -830,7 +830,13 @@ bool isTrainerModeAvailable(int mode) bool modelHasNotes() { char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/"; - char *buf = strcat_currentmodelname(&filename[sizeof(MODELS_PATH)]); + char *buf = strcat_currentmodelname(&filename[sizeof(MODELS_PATH)], 0); + strcpy(buf, TEXT_EXT); + if (isFileAvailable(filename)) { + return true; + } + + buf = strcat_currentmodelname(&filename[sizeof(MODELS_PATH)], ' '); strcpy(buf, TEXT_EXT); if (isFileAvailable(filename)) { return true; diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 26b7cfe05..1da964969 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1182,13 +1182,13 @@ extern ReusableBuffer reusableBuffer; uint8_t zlen(const char *str, uint8_t size); bool zexist(const char *str, uint8_t size); unsigned int effectiveLen(const char * str, unsigned int size); -char * strcat_zchar(char *dest, const char *name, uint8_t size, const char *defaultName=nullptr, uint8_t defaultNameSize=0, uint8_t defaultIdx=0); -#define strcatFlightmodeName(dest, idx) strcat_zchar(dest, g_model.flightModeData[idx].name, LEN_FLIGHT_MODE_NAME, STR_FM, PSIZE(TR_FM), idx+1) +char * strcat_zchar(char *dest, const char *name, uint8_t size, const char spaceSym = 0, const char *defaultName=nullptr, uint8_t defaultNameSize=0, uint8_t defaultIdx=0); +#define strcatFlightmodeName(dest, idx) strcat_zchar(dest, g_model.flightModeData[idx].name, LEN_FLIGHT_MODE_NAME, 0, STR_FM, PSIZE(TR_FM), idx+1) #if defined(EEPROM) -#define strcat_modelname(dest, idx) strcat_zchar(dest, modelHeaders[idx].name, LEN_MODEL_NAME, STR_MODEL, PSIZE(TR_MODEL), idx+1) -#define strcat_currentmodelname(dest) strcat_modelname(dest, g_eeGeneral.currModel) +#define strcat_modelname(dest, idx) strcat_zchar(dest, modelHeaders[idx].name, LEN_MODEL_NAME, 0, STR_MODEL, PSIZE(TR_MODEL), idx+1) +#define strcat_currentmodelname(dest, foo) strcat_modelname(dest, g_eeGeneral.currModel) #else -#define strcat_currentmodelname(dest) strcat_zchar(dest, g_model.header.name, LEN_MODEL_NAME) +#define strcat_currentmodelname(dest, spaceSym) strcat_zchar(dest, g_model.header.name, LEN_MODEL_NAME, spaceSym) #endif #define ZLEN(s) zlen(s, sizeof(s)) #define ZEXIST(s) zexist(s, sizeof(s)) diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index f5d1d5917..33541282b 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -128,7 +128,7 @@ uint8_t zlen(const char * str, uint8_t size) return 0; } -char * strcat_zchar(char * dest, const char * name, uint8_t size, const char * defaultName, uint8_t defaultNameSize, uint8_t defaultIdx) +char * strcat_zchar(char * dest, const char * name, uint8_t size, const char spaceSym, const char * defaultName, uint8_t defaultNameSize, uint8_t defaultIdx) { int8_t len = 0; @@ -142,7 +142,7 @@ char * strcat_zchar(char * dest, const char * name, uint8_t size, const char * d if (!len && dest[i]) len = i+1; if (len) { - if (!dest[i]) + if (dest[i] == spaceSym) dest[i] = '_'; } i--;