From 88619dc68206eee65f1bb66b04ec88783c70f1dc Mon Sep 17 00:00:00 2001 From: vk7js <58905135+vk7js@users.noreply.github.com> Date: Fri, 6 May 2022 21:15:26 +1000 Subject: [PATCH] Refactored symbol handling to clean up code. --- openrtx/src/core/voicePrompts.c | 55 ++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/openrtx/src/core/voicePrompts.c b/openrtx/src/core/voicePrompts.c index c78f8060..bcb61e8c 100644 --- a/openrtx/src/core/voicePrompts.c +++ b/openrtx/src/core/voicePrompts.c @@ -185,21 +185,42 @@ void vpQueuePrompt(uint16_t prompt) } } +static bool GetSymbolVPIfItShouldBeAnnounced(char symbol, VoicePromptFlags_T flags, voicePrompt_t* vp) +{ + *vp=PROMPT_SILENCE; + + const char indexedSymbols[] = "%.+-*#!,@:?()~/[]<>=$'`&|_^{}"; // Must match order of symbols in voicePrompt_t enum. + const char commonSymbols[] = "%.+-*#"; + + bool announceCommonSymbols = (flags & vpAnnounceCommonSymbols) ? true : false; + bool announceLessCommonSymbols=(flags & vpAnnounceLessCommonSymbols) ? true : false; + + char* symbolPtr = strchr(indexedSymbols, symbol); + + if (symbolPtr == NULL) + {// we don't have a prompt for this character. + return (flags&vpAnnounceASCIIValueForUnknownChars) ? true : false; + } + + bool commonSymbol= strchr(commonSymbols, symbol) != NULL; + + *vp = PROMPT_PERCENT+(symbolPtr-indexedSymbols); + + return ((commonSymbol && announceCommonSymbols) || (!commonSymbol && announceLessCommonSymbols)); +} + // This function spells out a string letter by letter. void vpQueueString(char *promptString, VoicePromptFlags_T flags) { - const char indexedSymbols[] = "%.+-*#!,@:?()~/[]<>=$'`&|_^{}"; // handles must match order of vps. - const char commonSymbols[] = "%.+-*#"; // handles must match order of vps. - if (voicePromptIsActive) { vpInit(); } - bool announceCommonSymbols = (flags & vpAnnounceCommonSymbols) ? true : false; - bool announceLessCommonSymbols=(flags & vpAnnounceLessCommonSymbols) ? true : false; while (*promptString != 0) { + voicePrompt_t vp = PROMPT_SILENCE; + if ((*promptString >= '0') && (*promptString <= '9')) { vpQueuePrompt(*promptString - '0' + PROMPT_0); @@ -224,32 +245,16 @@ void vpQueueString(char *promptString, VoicePromptFlags_T flags) { vpQueuePrompt(PROMPT_SPACE); } - else if (announceCommonSymbols || announceLessCommonSymbols) + else if (GetSymbolVPIfItShouldBeAnnounced(*promptString, flags, &vp)) { - char* symbolPtr = strchr(indexedSymbols, *promptString); - if (symbolPtr != NULL) - { - bool commonSymbol= strchr(commonSymbols, *symbolPtr) != NULL; - - if ((commonSymbol && announceCommonSymbols) || (!commonSymbol && announceLessCommonSymbols)) - { - vpQueuePrompt(PROMPT_PERCENT+(symbolPtr-indexedSymbols)); - } - else - { - vpQueuePrompt(PROMPT_SILENCE); - } - } - else if (flags&vpAnnounceASCIIValueForUnknownChars) + if (vp != PROMPT_SILENCE) + vpQueuePrompt(vp); + else // announce ASCII { int32_t val = *promptString; vpQueueLanguageString(¤tLanguage->dtmf_code); // just the word "code" as we don't have character. vpQueueInteger(val); } - else - { - vpQueuePrompt(PROMPT_SILENCE); - } } else {