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.

md1702
vk7js 2022-05-06 20:35:13 +10:00 zatwierdzone przez Silvano Seva
rodzic d5568b8ab3
commit 1d7432ae3b
2 zmienionych plików z 38 dodań i 38 usunięć

Wyświetl plik

@ -29,7 +29,6 @@ in the voicePrompts generator project.
typedef enum
{
PROMPT_SILENCE, //
PROMPT_POINT, // POINT
PROMPT_0, // 0
PROMPT_1, // 1
PROMPT_2, // 2
@ -104,18 +103,19 @@ PROMPT_VOLTS, // Volts
PROMPT_MILLIWATTS, // Milliwatts
PROMPT_WATT, // Wattt
PROMPT_WATTS, // Watts
PROMPT_PERCENT, // Percent
PROMPT_RECEIVE, // Receive
PROMPT_TRANSMIT, // Transmit
PROMPT_MODE, // Mode
PROMPT_DMR, // D M R
PROMPT_FM, // F M
PROMPT_M17, // M seventeen
PROMPT_SPACE, // space
PROMPT_PERCENT, // Percent
PROMPT_POINT, // POINT
PROMPT_PLUS, // Plus
PROMPT_MINUS, // Minus
PROMPT_STAR, // Star
PROMPT_HASH, // Hash
PROMPT_SPACE, // space
PROMPT_EXCLAIM, // exclaim
PROMPT_COMMA, // comma
PROMPT_AT, // at
@ -142,13 +142,18 @@ NUM_VOICE_PROMPTS,
__MAKE_ENUM_16BITS = INT16_MAX
} 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*)))
typedef enum
{
vpAnnounceCaps=0x01,
vpAnnounceCustomPrompts=0x02,
vpAnnounceSpaceAndSymbols=0x04,
vpAnnouncePhoneticRendering=0x08,
vpAnnounceSpace=0x04,
vpAnnounceCommonSymbols=0x08,
vpAnnounceLessCommonSymbols=0x10,
vpAnnounceASCIIValueForUnknownChars=0x20,
vpAnnouncePhoneticRendering=0x40,
} VoicePromptFlags_T;
extern bool voicePromptDataIsLoaded;

Wyświetl plik

@ -188,11 +188,16 @@ void vpQueuePrompt(uint16_t prompt)
// This function spells out a string letter by letter.
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)
{
vpInit();
}
bool announceCommonSymbols = (flags & vpAnnounceCommonSymbols) ? true : false;
bool announceLessCommonSymbols=(flags & vpAnnounceLessCommonSymbols) ? true : false;
while (*promptString != 0)
{
if ((*promptString >= '0') && (*promptString <= '9'))
@ -215,52 +220,42 @@ void vpQueueString(char *promptString, VoicePromptFlags_T flags)
else
vpQueuePrompt(*promptString - 'a' + PROMPT_A);
}
else if (*promptString == '.')
else if ((*promptString==' ') && (flags&vpAnnounceSpace))
{
vpQueuePrompt(PROMPT_POINT);
}
else if (*promptString == '+')
{
vpQueuePrompt(PROMPT_PLUS);
}
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
}
else if (announceCommonSymbols || announceLessCommonSymbols)
{
char* ptr=strchr(indexedSymbols, *promptString);
if (ptr)
char* symbolPtr = strchr(indexedSymbols, *promptString);
if (symbolPtr != NULL)
{
vpQueuePrompt(PROMPT_EXCLAIM+(ptr-indexedSymbols));
bool commonSymbol= strchr(commonSymbols, *symbolPtr) != NULL;
if ((commonSymbol && announceCommonSymbols) || (!commonSymbol && announceLessCommonSymbols))
{
vpQueuePrompt(PROMPT_PERCENT+(symbolPtr-indexedSymbols));
}
else
{
vpQueuePrompt(PROMPT_SILENCE);
}
}
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
{
// otherwise just add silence
vpQueuePrompt(PROMPT_SILENCE);
}
promptString++;
}