Added voice feedback for the M17 Settings Menu:

1. Added vp_announceBuffer to speak a prompt, edit mode and string buffer.
2. Added logic to the vp_announceScreen for m17Settings read-only mode.
3. Added logic for handling edit mode.
4. Removed vpCaps flag from several places because it is irrelevant when input only supports caps.
This commit is contained in:
vk7js 2022-09-05 21:01:58 +10:00 committed by Silvano Seva
parent 579ce7baa5
commit c0eba3866e
3 changed files with 47 additions and 2 deletions

View File

@ -202,6 +202,13 @@ void vp_announceSettingsInt(const char* const* stringTableStringPtr,
*/ */
void vp_announceScreen(uint8_t ui_screen); void vp_announceScreen(uint8_t ui_screen);
/**
* This function is called from ui_updateFSM to speak string buffers.
*/
void vp_announceBuffer(const char* const* stringTableStringPtr, bool editMode,
const char* buffer);
/** /**
* *
*/ */

View File

@ -271,8 +271,7 @@ void vp_announceInputChar(const char ch)
vp_flush(); vp_flush();
uint8_t flags = vpAnnounceCaps uint8_t flags = vpAnnounceSpace
| vpAnnounceSpace
| vpAnnounceCommonSymbols | vpAnnounceCommonSymbols
| vpAnnounceLessCommonSymbols; | vpAnnounceLessCommonSymbols;
@ -749,9 +748,38 @@ void vp_announceScreen(uint8_t ui_screen)
case SETTINGS_TIMEDATE: case SETTINGS_TIMEDATE:
vp_announceSettingsTimeDate(); vp_announceSettingsTimeDate();
break; break;
case SETTINGS_M17:
vp_announceBuffer(&currentLanguage->callsign,
false, state.settings.callsign);
break;
} }
} }
void vp_announceBuffer(const char* const* stringTableStringPtr, bool editMode,
const char* buffer)
{
bool isPlaying=vp_isPlaying();
vp_flush();
if (!isPlaying)
{
vp_queueStringTableEntry(stringTableStringPtr);
if (editMode)
vp_queuePrompt(PROMPT_EDIT);
}
vpFlags_t flags= vpAnnounceCommonSymbols;
// add edit mode flags to adjust what is spoken.
if (editMode)
flags |= vpAnnounceLessCommonSymbols | vpAnnounceSpace | vpAnnounceASCIIValueForUnknownChars;
vp_queueString(buffer, flags);
vp_play();
}
vpQueueFlags_t vp_getVoiceLevelQueueFlags() vpQueueFlags_t vp_getVoiceLevelQueueFlags()
{ {
uint8_t vpLevel = state.settings.vpLevel; uint8_t vpLevel = state.settings.vpLevel;

View File

@ -1840,6 +1840,8 @@ void ui_updateFSM(bool *sync_rtx)
strncpy(state.settings.callsign, ui_state.new_callsign, 10); strncpy(state.settings.callsign, ui_state.new_callsign, 10);
ui_state.edit_mode = false; ui_state.edit_mode = false;
*sync_rtx = true; *sync_rtx = true;
vp_announceBuffer(&currentLanguage->callsign,
false, state.settings.callsign);
} }
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
// Discard selected callsign and disable input mode // Discard selected callsign and disable input mode
@ -1849,6 +1851,12 @@ void ui_updateFSM(bool *sync_rtx)
_ui_textInputDel(ui_state.new_callsign); _ui_textInputDel(ui_state.new_callsign);
else if(input_isNumberPressed(msg)) else if(input_isNumberPressed(msg))
_ui_textInputKeypad(ui_state.new_callsign, 9, msg, true); _ui_textInputKeypad(ui_state.new_callsign, 9, msg, true);
else if (msg.long_press && (msg.keys & KEY_F1) && (state.settings.vpLevel > vpBeep))
{
vp_announceBuffer(&currentLanguage->callsign,
true, ui_state.new_callsign);
f1Handled=true;
}
} }
else else
{ {
@ -1858,6 +1866,8 @@ void ui_updateFSM(bool *sync_rtx)
ui_state.edit_mode = true; ui_state.edit_mode = true;
// Reset text input variables // Reset text input variables
_ui_textInputReset(ui_state.new_callsign); _ui_textInputReset(ui_state.new_callsign);
vp_announceBuffer(&currentLanguage->callsign,
true, ui_state.new_callsign);
} }
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
_ui_menuBack(MENU_SETTINGS); _ui_menuBack(MENU_SETTINGS);