Reworked all symbols so that they can be processes via a lookup rather than by individual tests. Added more flags so we can optionally speak different categories of symbols.

This commit is contained in:
vk7js 2022-05-06 20:35:13 +10:00 committed by Silvano Seva
parent d5568b8ab3
commit 1d7432ae3b
2 changed files with 38 additions and 38 deletions

View File

@ -29,7 +29,6 @@ in the voicePrompts generator project.
typedef enum typedef enum
{ {
PROMPT_SILENCE, // PROMPT_SILENCE, //
PROMPT_POINT, // POINT
PROMPT_0, // 0 PROMPT_0, // 0
PROMPT_1, // 1 PROMPT_1, // 1
PROMPT_2, // 2 PROMPT_2, // 2
@ -104,18 +103,19 @@ PROMPT_VOLTS, // Volts
PROMPT_MILLIWATTS, // Milliwatts PROMPT_MILLIWATTS, // Milliwatts
PROMPT_WATT, // Wattt PROMPT_WATT, // Wattt
PROMPT_WATTS, // Watts PROMPT_WATTS, // Watts
PROMPT_PERCENT, // Percent
PROMPT_RECEIVE, // Receive PROMPT_RECEIVE, // Receive
PROMPT_TRANSMIT, // Transmit PROMPT_TRANSMIT, // Transmit
PROMPT_MODE, // Mode PROMPT_MODE, // Mode
PROMPT_DMR, // D M R PROMPT_DMR, // D M R
PROMPT_FM, // F M PROMPT_FM, // F M
PROMPT_M17, // M seventeen PROMPT_M17, // M seventeen
PROMPT_SPACE, // space
PROMPT_PERCENT, // Percent
PROMPT_POINT, // POINT
PROMPT_PLUS, // Plus PROMPT_PLUS, // Plus
PROMPT_MINUS, // Minus PROMPT_MINUS, // Minus
PROMPT_STAR, // Star PROMPT_STAR, // Star
PROMPT_HASH, // Hash PROMPT_HASH, // Hash
PROMPT_SPACE, // space
PROMPT_EXCLAIM, // exclaim PROMPT_EXCLAIM, // exclaim
PROMPT_COMMA, // comma PROMPT_COMMA, // comma
PROMPT_AT, // at PROMPT_AT, // at
@ -142,13 +142,18 @@ NUM_VOICE_PROMPTS,
__MAKE_ENUM_16BITS = INT16_MAX __MAKE_ENUM_16BITS = INT16_MAX
} voicePrompt_t; } voicePrompt_t;
// PROMPT_VOICE_NAME is always the very last prompt after the indexed prompts from the strings table.
#define PROMPT_VOICE_NAME (NUM_VOICE_PROMPTS + (sizeof(stringsTable_t)/sizeof(char*))) #define PROMPT_VOICE_NAME (NUM_VOICE_PROMPTS + (sizeof(stringsTable_t)/sizeof(char*)))
typedef enum typedef enum
{ {
vpAnnounceCaps=0x01, vpAnnounceCaps=0x01,
vpAnnounceCustomPrompts=0x02, vpAnnounceCustomPrompts=0x02,
vpAnnounceSpaceAndSymbols=0x04, vpAnnounceSpace=0x04,
vpAnnouncePhoneticRendering=0x08, vpAnnounceCommonSymbols=0x08,
vpAnnounceLessCommonSymbols=0x10,
vpAnnounceASCIIValueForUnknownChars=0x20,
vpAnnouncePhoneticRendering=0x40,
} VoicePromptFlags_T; } VoicePromptFlags_T;
extern bool voicePromptDataIsLoaded; extern bool voicePromptDataIsLoaded;

View File

@ -188,11 +188,16 @@ void vpQueuePrompt(uint16_t prompt)
// This function spells out a string letter by letter. // This function spells out a string letter by letter.
void vpQueueString(char *promptString, VoicePromptFlags_T flags) void vpQueueString(char *promptString, VoicePromptFlags_T flags)
{ {
const char indexedSymbols[] = "!,@:?()~/[]<>=$'`&|_^{}"; // handles most of them in indexed order, must match order of vps. const char indexedSymbols[] = "%.+-*#!,@:?()~/[]<>=$'`&|_^{}"; // handles must match order of vps.
const char commonSymbols[] = "%.+-*#"; // handles must match order of vps.
if (voicePromptIsActive) if (voicePromptIsActive)
{ {
vpInit(); vpInit();
} }
bool announceCommonSymbols = (flags & vpAnnounceCommonSymbols) ? true : false;
bool announceLessCommonSymbols=(flags & vpAnnounceLessCommonSymbols) ? true : false;
while (*promptString != 0) while (*promptString != 0)
{ {
if ((*promptString >= '0') && (*promptString <= '9')) if ((*promptString >= '0') && (*promptString <= '9'))
@ -215,52 +220,42 @@ void vpQueueString(char *promptString, VoicePromptFlags_T flags)
else else
vpQueuePrompt(*promptString - 'a' + PROMPT_A); vpQueuePrompt(*promptString - 'a' + PROMPT_A);
} }
else if (*promptString == '.') else if ((*promptString==' ') && (flags&vpAnnounceSpace))
{ {
vpQueuePrompt(PROMPT_POINT); vpQueuePrompt(PROMPT_SPACE);
} }
else if (*promptString == '+') else if (announceCommonSymbols || announceLessCommonSymbols)
{ {
vpQueuePrompt(PROMPT_PLUS); char* symbolPtr = strchr(indexedSymbols, *promptString);
} if (symbolPtr != NULL)
else if (*promptString == '-')
{
vpQueuePrompt(PROMPT_MINUS);
}
else if (*promptString == '%')
{
vpQueuePrompt(PROMPT_PERCENT);
}
else if (*promptString == '*')
{
vpQueuePrompt(PROMPT_STAR);
}
else if (*promptString == '#')
{
vpQueuePrompt(PROMPT_HASH);
}
else if (flags&(vpAnnounceSpaceAndSymbols))
{
if (*promptString==' ')
vpQueuePrompt(PROMPT_SPACE);
else
{ {
char* ptr=strchr(indexedSymbols, *promptString); bool commonSymbol= strchr(commonSymbols, *symbolPtr) != NULL;
if (ptr)
if ((commonSymbol && announceCommonSymbols) || (!commonSymbol && announceLessCommonSymbols))
{ {
vpQueuePrompt(PROMPT_EXCLAIM+(ptr-indexedSymbols)); vpQueuePrompt(PROMPT_PERCENT+(symbolPtr-indexedSymbols));
} }
else else
{ {
int32_t val = *promptString; vpQueuePrompt(PROMPT_SILENCE);
vpQueueLanguageString(&currentLanguage->dtmf_code); // just the word "code" as we don't have character.
vpQueueInteger(val);
} }
} }
else if (flags&vpAnnounceASCIIValueForUnknownChars)
{
int32_t val = *promptString;
vpQueueLanguageString(&currentLanguage->dtmf_code); // just the word "code" as we don't have character.
vpQueueInteger(val);
}
else
{
vpQueuePrompt(PROMPT_SILENCE);
}
} }
else else
{
// otherwise just add silence // otherwise just add silence
vpQueuePrompt(PROMPT_SILENCE); vpQueuePrompt(PROMPT_SILENCE);
}
promptString++; promptString++;
} }