kopia lustrzana https://github.com/OpenRTX/OpenRTX
265 wiersze
8.2 KiB
C
265 wiersze
8.2 KiB
C
/***************************************************************************
|
|
* Copyright (C) 2022 by Federico Amedeo Izzo IU2NUO, *
|
|
* Niccolò Izzo IU2KIN, *
|
|
* Silvano Seva IU2KWO *
|
|
* Joseph Stephen VK7JS *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/> *
|
|
***************************************************************************/
|
|
#ifndef voice_prompts_h_included
|
|
#define voice_prompts_h_included
|
|
|
|
#include <datatypes.h>
|
|
#include <stdbool.h>
|
|
|
|
/*
|
|
Please note, these prompts represent spoken words or phrases which are not in
|
|
the UI string table, for example letters of the alphabet, digits, and
|
|
descriptive words not displayed in the UI.
|
|
The voice prompt data file stores these first, then after the data for these
|
|
prompts, the data for the indexed string table phrases.
|
|
*/
|
|
/* Please note! this enum must match the order of prompts defined in the
|
|
wordlist.csv file in the voicePrompts generator project.
|
|
*/
|
|
typedef enum
|
|
{
|
|
PROMPT_SILENCE, //
|
|
PROMPT_0, // 0
|
|
PROMPT_1, // 1
|
|
PROMPT_2, // 2
|
|
PROMPT_3, // 3
|
|
PROMPT_4, // 4
|
|
PROMPT_5, // 5
|
|
PROMPT_6, // 6
|
|
PROMPT_7, // 7
|
|
PROMPT_8, // 8
|
|
PROMPT_9, // 9
|
|
PROMPT_A, // A
|
|
PROMPT_B, // B
|
|
PROMPT_C, // C
|
|
PROMPT_D, // D
|
|
PROMPT_E, // E
|
|
PROMPT_F, // F
|
|
PROMPT_G, // G
|
|
PROMPT_H, // H
|
|
PROMPT_I, // I
|
|
PROMPT_J, // J
|
|
PROMPT_K, // K
|
|
PROMPT_L, // L
|
|
PROMPT_M, // M
|
|
PROMPT_N, // N
|
|
PROMPT_O, // O
|
|
PROMPT_P, // P
|
|
PROMPT_Q, // Q
|
|
PROMPT_R, // R
|
|
PROMPT_S, // S
|
|
PROMPT_T, // T
|
|
PROMPT_U, // U
|
|
PROMPT_V, // V
|
|
PROMPT_W, // W
|
|
PROMPT_X, // X
|
|
PROMPT_Y, // Y
|
|
PROMPT_Z, // Zed
|
|
PROMPT_A_PHONETIC, // alpha
|
|
PROMPT_B_PHONETIC, // bravo
|
|
PROMPT_C_PHONETIC, // charlie
|
|
PROMPT_D_PHONETIC, // delta
|
|
PROMPT_E_PHONETIC, // echo
|
|
PROMPT_F_PHONETIC, // foxtrot
|
|
PROMPT_G_PHONETIC, // golf
|
|
PROMPT_H_PHONETIC, // hotel
|
|
PROMPT_I_PHONETIC, // india
|
|
PROMPT_J_PHONETIC, // juliet
|
|
PROMPT_K_PHONETIC, // kilo
|
|
PROMPT_L_PHONETIC, // lema
|
|
PROMPT_M_PHONETIC, // mike
|
|
PROMPT_N_PHONETIC, // november
|
|
PROMPT_O_PHONETIC, // oscar
|
|
PROMPT_P_PHONETIC, // papa
|
|
PROMPT_Q_PHONETIC, // quebec
|
|
PROMPT_R_PHONETIC, // romeo
|
|
PROMPT_S_PHONETIC, // siera
|
|
PROMPT_T_PHONETIC, // tango
|
|
PROMPT_U_PHONETIC, // uniform
|
|
PROMPT_V_PHONETIC, // victor
|
|
PROMPT_W_PHONETIC, // whisky
|
|
PROMPT_X_PHONETIC, // exray
|
|
PROMPT_Y_PHONETIC, // yankie
|
|
PROMPT_Z_PHONETIC, // zulu
|
|
PROMPT_CAP, // cap
|
|
PROMPT_HERTZ, // hertz
|
|
PROMPT_KILOHERTZ, // Kilohertz
|
|
PROMPT_MEGAHERTZ, // Megahertz
|
|
PROMPT_CHANNEL,
|
|
PROMPT_VFO, // V F O
|
|
PROMPT_MILLISECONDS, // Milliseconds
|
|
PROMPT_SECONDS, // Seconds
|
|
PROMPT_MINUTES, // Minutes
|
|
PROMPT_VOLTS, // Volts
|
|
PROMPT_MILLIWATTS, // Milliwatts
|
|
PROMPT_WATT, // Wattt
|
|
PROMPT_WATTS, // Watts
|
|
PROMPT_RECEIVE, // Receive
|
|
PROMPT_TRANSMIT, // Transmit
|
|
PROMPT_MODE, // Mode
|
|
PROMPT_BANDWIDTH, // bandwidth
|
|
PROMPT_POWER, // power
|
|
PROMPT_SQUELCH, // squelch
|
|
PROMPT_SOURCE_ID, // Source ID
|
|
PROMPT_DEST_ID, // Destination ID
|
|
PROMPT_DMR_ID, // DMR ID
|
|
PROMPT_TALKGROUP, // Talk group
|
|
PROMPT_TIMESLOT, // timeslot
|
|
PROMPT_COLORCODE, // color code
|
|
PROMPT_TONE, // tone
|
|
PROMPT_CONTACT, // contact
|
|
PROMPT_NORTH, // north
|
|
PROMPT_SOUTH, // south
|
|
PROMPT_EAST, // east
|
|
PROMPT_WEST, // west
|
|
PROMPT_LATITUDE, // latitude
|
|
PROMPT_LONGITUDE, // longitude
|
|
PROMPT_SPEED, // speed
|
|
PROMPT_ALTITUDE, // altitude
|
|
PROMPT_CHARACTER, // character
|
|
PROMPT_SPACE, // space
|
|
PROMPT_PERCENT, // Percent
|
|
PROMPT_POINT, // POINT
|
|
PROMPT_PLUS, // Plus
|
|
PROMPT_MINUS, // Minus
|
|
PROMPT_STAR, // Star
|
|
PROMPT_HASH, // Hash
|
|
PROMPT_EXCLAIM, // exclaim
|
|
PROMPT_COMMA, // comma
|
|
PROMPT_AT, // at
|
|
PROMPT_COLON, // colon
|
|
PROMPT_QUESTION, // question
|
|
PROMPT_LEFT_PAREN, // left paren
|
|
PROMPT_RIGHT_PAREN, // right paren
|
|
PROMPT_TILDE, // tilde
|
|
PROMPT_SLASH, // slash
|
|
PROMPT_LEFT_BRACKET, // left bracket
|
|
PROMPT_RIGHT_BRACKET, // right bracket
|
|
PROMPT_LESS, // less
|
|
PROMPT_GREATER, // greater
|
|
PROMPT_EQUALS, // equals
|
|
PROMPT_DOLLAR, // dollar
|
|
PROMPT_APOSTROPHE, // apostrophe
|
|
PROMPT_GRAVE, // grave
|
|
PROMPT_AMPERSAND, // and
|
|
PROMPT_BAR, // bar
|
|
PROMPT_UNDERLINE, // underline
|
|
PROMPT_CARET, // caret
|
|
PROMPT_LEFT_BRACE, // left brace
|
|
PROMPT_CUSTOM1, // Hotspot
|
|
PROMPT_CUSTOM2, // ClearNode
|
|
PROMPT_CUSTOM3, // ShariNode
|
|
PROMPT_CUSTOM4, // MicroHub
|
|
PROMPT_CUSTOM5, // Openspot
|
|
PROMPT_CUSTOM6, // repeater
|
|
PROMPT_CUSTOM7, // BlindHams
|
|
PROMPT_CUSTOM8, // Allstar
|
|
PROMPT_CUSTOM9, // parrot
|
|
PROMPT_CUSTOM10, // unused
|
|
NUM_VOICE_PROMPTS,
|
|
} 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*)))
|
|
/*
|
|
These flags govern how vpQueueString operates.
|
|
For example, when editing, it is desireable to hear spaces, capitals and
|
|
extended symbols.
|
|
When just arrowing through menus, spaces, extended symbols etc should not be
|
|
announced.
|
|
*/
|
|
typedef enum
|
|
{
|
|
vpAnnounceCaps=0x01,
|
|
vpAnnounceCustomPrompts=0x02,
|
|
vpAnnounceSpace=0x04,
|
|
vpAnnounceCommonSymbols=0x08,
|
|
vpAnnounceLessCommonSymbols=0x10,
|
|
vpAnnounceASCIIValueForUnknownChars=0x20,
|
|
vpAnnouncePhoneticRendering=0x40,
|
|
} VoicePromptFlags_T;
|
|
/*
|
|
These queuing flags determine if speech is interrupted, played
|
|
immediately, whether prompts are queued for values, etc.
|
|
They are necessary because for example if you call the announceXX functions
|
|
consecutively, it is only desireable to initially stop speech in
|
|
progress and only play after the last prompt is queued.
|
|
If however calling an announceXX function in isolation, normally any prompt in
|
|
progress should be interrupted and play should be called immediately.
|
|
At Voice level 1, changing channels in memory mode or frequencies in VFO mode
|
|
is indicated by a beep however if F1 is pressed, we will still say the current
|
|
channel name or frequency. This is accomplished by queueing but not playing a
|
|
prompt.
|
|
*/
|
|
typedef enum
|
|
{
|
|
vpqDefault = 0,
|
|
vpqInit=0x01, // stop any voice prompts already in progress.
|
|
vpqPlayImmediately=0x02, // call play after queue at all levels.
|
|
vpqPlayImmediatelyAtMediumOrHigher =0x04,
|
|
vpqIncludeDescriptions=0x08
|
|
} VoicePromptQueueFlags_T;
|
|
|
|
typedef enum
|
|
{
|
|
vpNone=0,
|
|
vpBeep,
|
|
vpLow,
|
|
vpMedium,
|
|
vpHigh
|
|
} VoicePromptVerbosity_T;
|
|
|
|
typedef struct
|
|
{
|
|
const char* userWord;
|
|
const voicePrompt_t vp;
|
|
} userDictEntry;
|
|
|
|
extern bool vpDataIsLoaded;
|
|
extern const uint32_t VOICE_PROMPTS_FLASH_HEADER_ADDRESS;
|
|
extern VoicePromptVerbosity_T vpLevel;
|
|
// Loads just the TOC from Flash and stores in RAM for fast access.
|
|
void vpCacheInit(void);
|
|
// event driven to play a voice prompt in progress.
|
|
void vpTick(void);
|
|
// Call before building the prompt sequence to clear prompt in progress.
|
|
void vpInit(void);
|
|
// This function appends an individual prompt item to the prompt queue.
|
|
// This can be a single letter, number, or a phrase.
|
|
void vpQueuePrompt(uint16_t prompt);
|
|
// This function appends the spelling of a complete string to the queue.
|
|
// It is used to pronounce strings for which we do not have a recorded voice
|
|
//prompt.
|
|
void vpQueueString(char *promptString, VoicePromptFlags_T flags);
|
|
// This function appends a signed integer to the queue.
|
|
void vpQueueInteger(int32_t value);
|
|
// This function appends a text string from the current language to the queue.
|
|
// e.g. currentLanguage->off
|
|
// These are recorded prompts which correspond to the strings in the strings
|
|
// table.
|
|
void vpQueueStringTableEntry(const char * const *);
|
|
|
|
void vpPlay(void);// Starts prompt playback
|
|
extern bool vpIsPlaying(void);
|
|
bool vpHasDataToPlay(void);
|
|
void vpTerminate(void);
|
|
bool vpCheckHeader(uint32_t *bufferAddress);
|
|
|
|
#endif |