Added mechanism for specifying exactly what is read in the summary.

This commit is contained in:
vk7js 2022-09-06 22:07:56 +10:00 committed by Silvano Seva
parent 495b721231
commit f8bfc7fb13
5 changed files with 89 additions and 64 deletions

View File

@ -69,7 +69,8 @@ void vp_announceBandwidth(const uint8_t bandwidth, const vpQueueFlags_t flags);
* channelNumber is 1-based, channelIndex is 0-based. * channelNumber is 1-based, channelIndex is 0-based.
*/ */
void vp_announceChannelSummary(const channel_t* channel, void vp_announceChannelSummary(const channel_t* channel,
const uint16_t channelNumber, const uint16_t bank); const uint16_t channelNumber, const uint16_t bank,
const vpSummaryInfoFlags_t infoFlags);
/** /**
* *

View File

@ -228,6 +228,20 @@ typedef enum
} }
VoicePromptVerbosity_T; VoicePromptVerbosity_T;
typedef enum
{
vpChannelNameOrVFO = 0x01,
vpFrequencies = 0x02,
vpRadioMode = 0x04,
vpModeSpecificInfo = 0x08,
vpPower = 0x10,
vpBankNameOrAllChannels = 0x20,
vpSplashInfo = 0x40,
vpAllInfoExceptSplash = 0x3f,
vpAllInfo = 0xff
}
vpSummaryInfoFlags_t;
/** /**
* Initialise the voice prompt system and load vp table of contents. * Initialise the voice prompt system and load vp table of contents.
*/ */

View File

@ -194,7 +194,8 @@ void vp_anouncePower(const float power, const vpQueueFlags_t flags)
} }
void vp_announceChannelSummary(const channel_t* channel, void vp_announceChannelSummary(const channel_t* channel,
const uint16_t channelNumber, const uint16_t bank) const uint16_t channelNumber, const uint16_t bank,
const vpSummaryInfoFlags_t infoFlags)
{ {
if (channel == NULL) if (channel == NULL)
return; return;
@ -208,57 +209,71 @@ void vp_announceChannelSummary(const channel_t* channel,
{ {
localFlags |= vpqIncludeDescriptions; localFlags |= vpqIncludeDescriptions;
} }
if (infoFlags&vpSplashInfo)
vp_queueStringTableEntry(&currentLanguage->openRTX);
// If VFO mode, announce VFO. // If VFO mode, announce VFO.
// channelNumber will be 0 if called from VFO mode. // channelNumber will be 0 if called from VFO mode.
if (channelNumber == 0) if (infoFlags&vpChannelNameOrVFO)
{ {
vp_queuePrompt(PROMPT_VFO); if (channelNumber == 0)
}
else
{
vp_announceChannelName(channel, channelNumber, localFlags);
}
addSilenceIfNeeded(localFlags);
vp_announceFrequencies(channel->rx_frequency, channel->tx_frequency,
localFlags);
vp_announceRadioMode(channel->mode, localFlags);
addSilenceIfNeeded(localFlags);
if (channel->mode == OPMODE_FM)
{
vp_announceBandwidth(channel->bandwidth, localFlags);
addSilenceIfNeeded(localFlags);
if (channel->fm.rxToneEn || channel->fm.txToneEn)
{ {
vp_announceCTCSS(channel->fm.rxToneEn, channel->fm.rxTone, vp_queuePrompt(PROMPT_VFO);
channel->fm.txToneEn, channel->fm.txTone, localFlags);
} }
else
{
vp_announceChannelName(channel, channelNumber, localFlags);
}
addSilenceIfNeeded(localFlags);
} }
else if (channel->mode == OPMODE_M17) if (infoFlags&vpFrequencies)
vp_announceFrequencies(channel->rx_frequency, channel->tx_frequency,
localFlags);
if (infoFlags&vpRadioMode)
{ {
vp_announceM17Info(channel, localFlags); vp_announceRadioMode(channel->mode, localFlags);
addSilenceIfNeeded(localFlags);
} }
else if (channel->mode == OPMODE_DMR) if (infoFlags&vpModeSpecificInfo)
{ {
vp_announceContactWithIndex(channel->dmr.contact_index, localFlags); if (channel->mode == OPMODE_FM)
{
vp_announceBandwidth(channel->bandwidth, localFlags);
addSilenceIfNeeded(localFlags);
// Force announcement of the words timeslot and colorcode to avoid if (channel->fm.rxToneEn || channel->fm.txToneEn)
// ambiguity. {
vp_announceTimeslot(channel->dmr.dmr_timeslot, vp_announceCTCSS(channel->fm.rxToneEn, channel->fm.rxTone,
(localFlags | vpqIncludeDescriptions)); channel->fm.txToneEn, channel->fm.txTone, localFlags);
vp_announceColorCode(channel->dmr.rxColorCode, channel->dmr.txColorCode, }
(localFlags | vpqIncludeDescriptions)); }
else if (channel->mode == OPMODE_M17)
{
vp_announceM17Info(channel, localFlags);
}
else if (channel->mode == OPMODE_DMR)
{
vp_announceContactWithIndex(channel->dmr.contact_index, localFlags);
// Force announcement of the words timeslot and colorcode to avoid
// ambiguity.
vp_announceTimeslot(channel->dmr.dmr_timeslot,
(localFlags | vpqIncludeDescriptions));
vp_announceColorCode(channel->dmr.rxColorCode, channel->dmr.txColorCode,
(localFlags | vpqIncludeDescriptions));
}
addSilenceIfNeeded(localFlags);
} }
addSilenceIfNeeded(localFlags); if (infoFlags&vpPower)
float power = dBmToWatt(channel->power); {
vp_anouncePower(power, localFlags); float power = dBmToWatt(channel->power);
addSilenceIfNeeded(localFlags); vp_anouncePower(power, localFlags);
addSilenceIfNeeded(localFlags);
if (channelNumber > 0) // i.e. not called from VFO. }
if ((infoFlags&vpBankNameOrAllChannels) &&(channelNumber > 0)) // i.e. not called from VFO.
{ {
vp_announceBank(bank, localFlags); vp_announceBank(bank, localFlags);
} }
@ -740,14 +755,17 @@ void vp_announceSettingsInt(const char* const* stringTableStringPtr,
void vp_announceScreen(uint8_t ui_screen) void vp_announceScreen(uint8_t ui_screen)
{ {
const vpSummaryInfoFlags_t infoFlags = vpChannelNameOrVFO|vpFrequencies |
vpRadioMode;
switch (ui_screen) switch (ui_screen)
{ {
case MAIN_VFO: case MAIN_VFO:
vp_announceChannelSummary(&state.channel, 0, state.bank); vp_announceChannelSummary(&state.channel, 0, state.bank, infoFlags);
break; break;
case MAIN_MEM: case MAIN_MEM:
vp_announceChannelSummary(&state.channel, state.channel_index+1, vp_announceChannelSummary(&state.channel, state.channel_index+1,
state.bank); state.bank, infoFlags);
break; break;
#ifdef GPS_PRESENT #ifdef GPS_PRESENT
case MENU_GPS: case MENU_GPS:

View File

@ -282,9 +282,10 @@ void vp_init()
codec_init(); codec_init();
if (state.settings.vpLevel > vpBeep) if (state.settings.vpLevel > vpBeep)
{ {// announce the splash msg and VFO.
vp_queueStringTableEntry(&currentLanguage->openRTX); vpSummaryInfoFlags_t infoFlags = vpChannelNameOrVFO | vpFrequencies |
vp_play(); vpRadioMode | vpSplashInfo;
vp_announceChannelSummary(&state.channel, 0, 0, infoFlags);
} }
} }

View File

@ -1294,27 +1294,16 @@ void ui_updateFSM(bool *sync_rtx)
} }
} }
else if(msg.keys & KEY_F1) else if(msg.keys & KEY_F1)
{
if (state.settings.vpLevel > vpBeep)
{// quick press repeat vp, long press summary.
if (msg.long_press)
vp_announceChannelSummary(&state.channel, 0, state.bank);
else
vp_replayLastPrompt();
f1Handled = true;
}
}
else if(msg.keys & KEY_F1)
{ {
if (state.settings.vpLevel > vpBeep) if (state.settings.vpLevel > vpBeep)
{// quick press repeat vp, long press summary. {// quick press repeat vp, long press summary.
if (msg.long_press) if (msg.long_press)
vp_announceChannelSummary(&state.channel, 0, vp_announceChannelSummary(&state.channel, 0,
state.bank); state.bank, vpAllInfoExceptSplash);
else else
vp_replayLastPrompt(); vp_replayLastPrompt();
f1Handled = true; f1Handled = true;
} }
} }
else if(input_isNumberPressed(msg)) else if(input_isNumberPressed(msg))
{ {
@ -1398,9 +1387,11 @@ void ui_updateFSM(bool *sync_rtx)
// Quick press repeat vp, long press summary. // Quick press repeat vp, long press summary.
if (msg.long_press) if (msg.long_press)
{ {
vp_announceChannelSummary(&state.channel, vp_announceChannelSummary(
state.channel_index, &state.channel,
state.bank); state.channel_index,
state.bank,
vpAllInfoExceptSplash);
} }
else else
{ {
@ -1451,7 +1442,7 @@ void ui_updateFSM(bool *sync_rtx)
{ {
vp_announceChannelSummary(&state.channel, vp_announceChannelSummary(&state.channel,
state.channel_index+1, state.channel_index+1,
state.bank); state.bank, vpAllInfoExceptSplash);
} }
else else
{ {