diff --git a/openrtx/include/core/voicePromptUtils.h b/openrtx/include/core/voicePromptUtils.h index 6fd0bce2..2534d592 100644 --- a/openrtx/include/core/voicePromptUtils.h +++ b/openrtx/include/core/voicePromptUtils.h @@ -69,7 +69,8 @@ void vp_announceBandwidth(const uint8_t bandwidth, const vpQueueFlags_t flags); * channelNumber is 1-based, channelIndex is 0-based. */ 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); /** * diff --git a/openrtx/include/core/voicePrompts.h b/openrtx/include/core/voicePrompts.h index 32d5385e..828461dd 100644 --- a/openrtx/include/core/voicePrompts.h +++ b/openrtx/include/core/voicePrompts.h @@ -228,6 +228,20 @@ typedef enum } 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. */ diff --git a/openrtx/src/core/voicePromptUtils.c b/openrtx/src/core/voicePromptUtils.c index 9e146788..daffce7e 100644 --- a/openrtx/src/core/voicePromptUtils.c +++ b/openrtx/src/core/voicePromptUtils.c @@ -194,7 +194,8 @@ void vp_anouncePower(const float power, const vpQueueFlags_t flags) } 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) return; @@ -208,57 +209,71 @@ void vp_announceChannelSummary(const channel_t* channel, { localFlags |= vpqIncludeDescriptions; } + if (infoFlags&vpSplashInfo) + vp_queueStringTableEntry(¤tLanguage->openRTX); // If VFO mode, announce VFO. // channelNumber will be 0 if called from VFO mode. - if (channelNumber == 0) + if (infoFlags&vpChannelNameOrVFO) { - vp_queuePrompt(PROMPT_VFO); - } - 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) + if (channelNumber == 0) { - vp_announceCTCSS(channel->fm.rxToneEn, channel->fm.rxTone, - channel->fm.txToneEn, channel->fm.txTone, localFlags); + vp_queuePrompt(PROMPT_VFO); } + 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 - // ambiguity. - vp_announceTimeslot(channel->dmr.dmr_timeslot, - (localFlags | vpqIncludeDescriptions)); - vp_announceColorCode(channel->dmr.rxColorCode, channel->dmr.txColorCode, - (localFlags | vpqIncludeDescriptions)); + if (channel->fm.rxToneEn || channel->fm.txToneEn) + { + vp_announceCTCSS(channel->fm.rxToneEn, channel->fm.rxTone, + channel->fm.txToneEn, channel->fm.txTone, localFlags); + } + } + 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); - float power = dBmToWatt(channel->power); - vp_anouncePower(power, localFlags); - addSilenceIfNeeded(localFlags); - - if (channelNumber > 0) // i.e. not called from VFO. + + if (infoFlags&vpPower) + { + float power = dBmToWatt(channel->power); + vp_anouncePower(power, localFlags); + addSilenceIfNeeded(localFlags); + } + if ((infoFlags&vpBankNameOrAllChannels) &&(channelNumber > 0)) // i.e. not called from VFO. { vp_announceBank(bank, localFlags); } @@ -740,14 +755,17 @@ void vp_announceSettingsInt(const char* const* stringTableStringPtr, void vp_announceScreen(uint8_t ui_screen) { + const vpSummaryInfoFlags_t infoFlags = vpChannelNameOrVFO|vpFrequencies | + vpRadioMode; + switch (ui_screen) { case MAIN_VFO: - vp_announceChannelSummary(&state.channel, 0, state.bank); + vp_announceChannelSummary(&state.channel, 0, state.bank, infoFlags); break; case MAIN_MEM: vp_announceChannelSummary(&state.channel, state.channel_index+1, - state.bank); + state.bank, infoFlags); break; #ifdef GPS_PRESENT case MENU_GPS: diff --git a/openrtx/src/core/voicePrompts.c b/openrtx/src/core/voicePrompts.c index 1b968688..2106b037 100644 --- a/openrtx/src/core/voicePrompts.c +++ b/openrtx/src/core/voicePrompts.c @@ -282,9 +282,10 @@ void vp_init() codec_init(); if (state.settings.vpLevel > vpBeep) - { - vp_queueStringTableEntry(¤tLanguage->openRTX); - vp_play(); + {// announce the splash msg and VFO. + vpSummaryInfoFlags_t infoFlags = vpChannelNameOrVFO | vpFrequencies | + vpRadioMode | vpSplashInfo; + vp_announceChannelSummary(&state.channel, 0, 0, infoFlags); } } diff --git a/openrtx/src/ui/ui.c b/openrtx/src/ui/ui.c index 6bd653b1..898f7303 100644 --- a/openrtx/src/ui/ui.c +++ b/openrtx/src/ui/ui.c @@ -1294,27 +1294,16 @@ void ui_updateFSM(bool *sync_rtx) } } 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) {// quick press repeat vp, long press summary. if (msg.long_press) vp_announceChannelSummary(&state.channel, 0, - state.bank); + state.bank, vpAllInfoExceptSplash); else vp_replayLastPrompt(); - f1Handled = true; - } + f1Handled = true; + } } else if(input_isNumberPressed(msg)) { @@ -1398,9 +1387,11 @@ void ui_updateFSM(bool *sync_rtx) // Quick press repeat vp, long press summary. if (msg.long_press) { - vp_announceChannelSummary(&state.channel, - state.channel_index, - state.bank); + vp_announceChannelSummary( + &state.channel, + state.channel_index, + state.bank, + vpAllInfoExceptSplash); } else { @@ -1451,7 +1442,7 @@ void ui_updateFSM(bool *sync_rtx) { vp_announceChannelSummary(&state.channel, state.channel_index+1, - state.bank); + state.bank, vpAllInfoExceptSplash); } else {