diff --git a/openrtx/include/core/voicePrompts.h b/openrtx/include/core/voicePrompts.h index c552096d..b1267a64 100644 --- a/openrtx/include/core/voicePrompts.h +++ b/openrtx/include/core/voicePrompts.h @@ -168,6 +168,8 @@ void vpAppendPrompt(uint16_t prompt);// Append an individual prompt item. This c void vpQueueString(char *promptString, VoicePromptFlags_T flags); void vpQueueInteger(int32_t value); // Append a signed integer void vpQueueStringTableEntry(const char * const *);//Append a text string from the current language e.g. currentLanguage->off +void vpQueueFrequency(freq_t freq, bool includeMHz); + void vpPlay(void);// Starts prompt playback extern bool vpIsPlaying(void); bool vpHasDataToPlay(void); diff --git a/openrtx/src/core/voicePrompts.c b/openrtx/src/core/voicePrompts.c index bcb61e8c..eb206b42 100644 --- a/openrtx/src/core/voicePrompts.c +++ b/openrtx/src/core/voicePrompts.c @@ -316,3 +316,32 @@ bool vpHasDataToPlay(void) return (vpCurrentSequence.Length > 0); } +static void removeUnnecessaryZerosFromVoicePrompts(char *str) +{ + const int NUM_DECIMAL_PLACES = 1; + int len = strlen(str); + for(int i = len; i > 2; i--) + { + if ((str[i - 1] != '0') || (str[i - (NUM_DECIMAL_PLACES + 1)] == '.')) + { + str[i] = 0; + return; + } + } +} + +void vpQueueFrequency(freq_t freq, bool includeMHz) +{ + char buffer[10]; + + snprintf(buffer, 10, "%d.%05d", (freq / 1000000), ((freq%1000000)/10)); + removeUnnecessaryZerosFromVoicePrompts(buffer); + + vpQueueString(buffer); + + if (includeMHz) + { + vpQueuePrompt(PROMPT_MEGAHERTZ); + } +} +