From 15a19e1fef5753c8e5e9d02821de451324bdf57e Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 7 Aug 2022 14:27:01 +1000 Subject: [PATCH] fix: Use correct path for model name audio It is expected to have `_` in the name in place of spaces. Uncaught side-effect of #645. It now looks for `_` instead of whitespace first, and then checks for model name with whitespace. Also, trigger postModelLoad() alams when changing model for checks and playing model name. --- radio/src/audio.cpp | 21 +++++++++++++-------- radio/src/gui/colorlcd/model_select.cpp | 3 +-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/radio/src/audio.cpp b/radio/src/audio.cpp index 729ace1c1..d2d4aa55f 100644 --- a/radio/src/audio.cpp +++ b/radio/src/audio.cpp @@ -302,14 +302,19 @@ void referenceSystemAudioFiles() const char * const suffixes[] = { "-off", "-on" }; -char * getModelAudioPath(char * path) +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), 0); - *result++ = '/'; - *result = '\0'; - return result; + strncpy(path + SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + char *buf = strcat_currentmodelname(path + sizeof(SOUNDS_PATH), ' '); + + if (!isFileAvailable(path)) { + buf = strcat_currentmodelname(path + sizeof(SOUNDS_PATH), 0); + } + + *buf++ = '/'; + *buf = '\0'; + return buf; } void getFlightmodeAudioFile(char * filename, int index, unsigned int event) @@ -478,8 +483,8 @@ void playModelEvent(uint8_t category, uint8_t index, event_t event) void playModelName() { - char filename[AUDIO_FILENAME_MAXLEN+1]; - char * str = getModelAudioPath(filename); + char filename[AUDIO_FILENAME_MAXLEN + 1]; + char *str = getModelAudioPath(filename); strcpy(str, "name.wav"); audioQueue.playFile(filename); } diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 1566ddabb..78daedb6d 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -539,13 +539,12 @@ class ModelCategoryPageBody : public FormWindow memcpy(g_eeGeneral.currModelFilename, btn->modelFilename(), LEN_MODEL_FILENAME); - loadModel(g_eeGeneral.currModelFilename, false); + loadModel(g_eeGeneral.currModelFilename, true); storageDirty(EE_GENERAL); storageCheck(true); modelslist.setCurrentModel(btn->getModelCell()); modelslist.setCurrentCategory(category); - checkAll(); // Exit to main view auto w = Layer::back();