Default UI: implemented setting of M17 CAN

This commit is contained in:
Silvano Seva 2023-05-28 13:35:13 +02:00
parent 2f0d56a8e0
commit cadec3dfd4
3 changed files with 123 additions and 43 deletions

View File

@ -90,16 +90,16 @@ enum menuItems
enum settingsItems enum settingsItems
{ {
S_DISPLAY = 0 S_DISPLAY = 0,
#ifdef RTC_PRESENT #ifdef RTC_PRESENT
,S_TIMEDATE S_TIMEDATE,
#endif #endif
#ifdef GPS_PRESENT #ifdef GPS_PRESENT
,S_GPS S_GPS,
#endif #endif
,S_M17 S_M17,
,S_VOICE S_VOICE,
,S_RESET2DEFAULTS S_RESET2DEFAULTS,
}; };
enum backupRestoreItems enum backupRestoreItems
@ -110,11 +110,11 @@ enum backupRestoreItems
enum displayItems enum displayItems
{ {
D_BRIGHTNESS = 0 D_BRIGHTNESS = 0,
#ifdef SCREEN_CONTRAST #ifdef SCREEN_CONTRAST
,D_CONTRAST D_CONTRAST,
#endif #endif
,D_TIMER D_TIMER,
}; };
#ifdef GPS_PRESENT #ifdef GPS_PRESENT
@ -125,12 +125,19 @@ enum settingsGPSItems
G_TIMEZONE G_TIMEZONE
}; };
#endif #endif
enum settingsVoicePromptItems enum settingsVoicePromptItems
{ {
VP_LEVEL = 0, VP_LEVEL = 0,
VP_PHONETIC, VP_PHONETIC,
}; };
enum settingsM17Items
{
M17_CALLSIGN = 0,
M17_CAN
};
/** /**
* Struct containing a set of positions and sizes that get * Struct containing a set of positions and sizes that get
* calculated for the selected display size. * calculated for the selected display size.
@ -205,6 +212,7 @@ extern const char *menu_items[];
extern const char *settings_items[]; extern const char *settings_items[];
extern const char *display_items[]; extern const char *display_items[];
extern const char *settings_gps_items[]; extern const char *settings_gps_items[];
extern const char *settings_m17_items[];
extern const char * settings_voice_items[]; extern const char * settings_voice_items[];
extern const char *backup_restore_items[]; extern const char *backup_restore_items[];
@ -214,6 +222,7 @@ extern const uint8_t menu_num;
extern const uint8_t settings_num; extern const uint8_t settings_num;
extern const uint8_t display_num; extern const uint8_t display_num;
extern const uint8_t settings_gps_num; extern const uint8_t settings_gps_num;
extern const uint8_t settings_m17_num;
extern const uint8_t settings_voice_num; extern const uint8_t settings_voice_num;
extern const uint8_t backup_restore_num; extern const uint8_t backup_restore_num;
extern const uint8_t info_num; extern const uint8_t info_num;

View File

@ -166,6 +166,13 @@ const char *settings_gps_items[] =
"UTC Timezone" "UTC Timezone"
}; };
#endif #endif
const char * settings_m17_items[] =
{
"Callsign",
"CAN"
};
const char * settings_voice_items[] = const char * settings_voice_items[] =
{ {
"Voice", "Voice",
@ -238,6 +245,7 @@ const uint8_t display_num = sizeof(display_items)/sizeof(display_items[0]);
#ifdef GPS_PRESENT #ifdef GPS_PRESENT
const uint8_t settings_gps_num = sizeof(settings_gps_items)/sizeof(settings_gps_items[0]); const uint8_t settings_gps_num = sizeof(settings_gps_items)/sizeof(settings_gps_items[0]);
#endif #endif
const uint8_t settings_m17_num = sizeof(settings_m17_items)/sizeof(settings_m17_items[0]);
const uint8_t settings_voice_num = sizeof(settings_voice_items)/sizeof(settings_voice_items[0]); const uint8_t settings_voice_num = sizeof(settings_voice_items)/sizeof(settings_voice_items[0]);
const uint8_t backup_restore_num = sizeof(backup_restore_items)/sizeof(backup_restore_items[0]); const uint8_t backup_restore_num = sizeof(backup_restore_items)/sizeof(backup_restore_items[0]);
const uint8_t info_num = sizeof(info_items)/sizeof(info_items[0]); const uint8_t info_num = sizeof(info_items)/sizeof(info_items[0]);
@ -748,6 +756,12 @@ static void _ui_changeTimer(int variation)
state.settings.display_timer += variation; state.settings.display_timer += variation;
} }
static inline void _ui_changeM17Can(int variation)
{
uint8_t can = state.settings.m17_can;
state.settings.m17_can = (can + variation) % 16;
}
static void _ui_changeVoiceLevel(int variation) static void _ui_changeVoiceLevel(int variation)
{ {
if ((state.settings.vpLevel == vpNone && variation < 0) || if ((state.settings.vpLevel == vpNone && variation < 0) ||
@ -1919,48 +1933,81 @@ void ui_updateFSM(bool *sync_rtx)
case SETTINGS_M17: case SETTINGS_M17:
if(ui_state.edit_mode) if(ui_state.edit_mode)
{ {
if(msg.keys & KEY_ENTER) if(ui_state.menu_selected == M17_CALLSIGN)
{ {
_ui_textInputConfirm(ui_state.new_callsign); // Handle text input for M17 callsign
// Save selected callsign and disable input mode if(msg.keys & KEY_ENTER)
strncpy(state.settings.callsign, ui_state.new_callsign, 10); {
ui_state.edit_mode = false; _ui_textInputConfirm(ui_state.new_callsign);
*sync_rtx = true; // Save selected callsign and disable input mode
vp_announceBuffer(&currentLanguage->callsign, strncpy(state.settings.callsign, ui_state.new_callsign, 10);
false, true, state.settings.callsign); ui_state.edit_mode = false;
vp_announceBuffer(&currentLanguage->callsign,
false, true, state.settings.callsign);
}
else if(msg.keys & KEY_ESC)
{
// Discard selected callsign and disable input mode
ui_state.edit_mode = false;
vp_announceBuffer(&currentLanguage->callsign,
false, true, state.settings.callsign);
}
else if(msg.keys & KEY_UP || msg.keys & KEY_DOWN ||
msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT)
{
_ui_textInputDel(ui_state.new_callsign);
}
else if(input_isNumberPressed(msg))
{
_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, true, ui_state.new_callsign);
f1Handled=true;
}
} }
else if(msg.keys & KEY_ESC) else
{ {
// Discard selected callsign and disable input mode if(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT)
ui_state.edit_mode = false; _ui_changeM17Can(-1);
vp_announceBuffer(&currentLanguage->callsign, else if(msg.keys & KEY_UP || msg.keys & KNOB_RIGHT)
false, true, state.settings.callsign); _ui_changeM17Can(+1);
} else if(msg.keys & KEY_ENTER)
else if(msg.keys & KEY_UP || msg.keys & KEY_DOWN || ui_state.edit_mode = !ui_state.edit_mode;
msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT) else if(msg.keys & KEY_ESC)
_ui_textInputDel(ui_state.new_callsign); ui_state.edit_mode = false;
else if(input_isNumberPressed(msg))
_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, true, ui_state.new_callsign);
f1Handled=true;
} }
} }
else else
{ {
if(msg.keys & KEY_ENTER) if(msg.keys & KEY_ENTER)
{ {
// Enable callsign input // Enable edit mode
ui_state.edit_mode = true; ui_state.edit_mode = true;
// Reset text input variables
_ui_textInputReset(ui_state.new_callsign); // If callsign input, reset text input variables
vp_announceBuffer(&currentLanguage->callsign, if(ui_state.menu_selected == M17_CALLSIGN)
true, true, ui_state.new_callsign); {
_ui_textInputReset(ui_state.new_callsign);
vp_announceBuffer(&currentLanguage->callsign,
true, true, ui_state.new_callsign);
}
} }
else if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
_ui_menuUp(settings_m17_num);
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(settings_m17_num);
else if((msg.keys & KEY_RIGHT) && (ui_state.menu_selected == M17_CAN))
_ui_changeM17Can(+1);
else if((msg.keys & KEY_LEFT) && (ui_state.menu_selected == M17_CAN))
_ui_changeM17Can(-1);
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
{
*sync_rtx = true;
_ui_menuBack(MENU_SETTINGS); _ui_menuBack(MENU_SETTINGS);
}
} }
break; break;
case SETTINGS_VOICE: case SETTINGS_VOICE:

View File

@ -330,6 +330,32 @@ int _ui_getSettingsGPSValueName(char *buf, uint8_t max_len, uint8_t index)
} }
#endif #endif
int _ui_getM17EntryName(char *buf, uint8_t max_len, uint8_t index)
{
if(index >= settings_m17_num) return -1;
snprintf(buf, max_len, "%s", settings_m17_items[index]);
return 0;
}
int _ui_getM17ValueName(char *buf, uint8_t max_len, uint8_t index)
{
if(index >= settings_m17_num)
return -1;
switch(index)
{
case M17_CALLSIGN:
snprintf(buf, max_len, "%s", last_state.settings.callsign);
break;
case M17_CAN:
snprintf(buf, max_len, "%d", last_state.settings.m17_can);
break;
}
return 0;
}
int _ui_getVoiceEntryName(char *buf, uint8_t max_len, uint8_t index) int _ui_getVoiceEntryName(char *buf, uint8_t max_len, uint8_t index)
{ {
if(index >= settings_voice_num) return -1; if(index >= settings_voice_num) return -1;
@ -785,7 +811,7 @@ void _ui_drawSettingsM17(ui_state_t* ui_state)
gfx_printLine(1, 4, layout.top_h, SCREEN_HEIGHT - layout.bottom_h, gfx_printLine(1, 4, layout.top_h, SCREEN_HEIGHT - layout.bottom_h,
layout.horizontal_pad, layout.menu_font, layout.horizontal_pad, layout.menu_font,
TEXT_ALIGN_LEFT, color_white, currentLanguage->callsign); TEXT_ALIGN_LEFT, color_white, currentLanguage->callsign);
if(ui_state->edit_mode) if((ui_state->edit_mode) && (ui_state->menu_selected == M17_CALLSIGN))
{ {
uint16_t rect_width = SCREEN_WIDTH - (layout.horizontal_pad * 2); uint16_t rect_width = SCREEN_WIDTH - (layout.horizontal_pad * 2);
uint16_t rect_height = (SCREEN_HEIGHT - (layout.top_h + layout.bottom_h))/2; uint16_t rect_height = (SCREEN_HEIGHT - (layout.top_h + layout.bottom_h))/2;
@ -799,10 +825,8 @@ void _ui_drawSettingsM17(ui_state_t* ui_state)
} }
else else
{ {
// Print M17 current callsign _ui_drawMenuListValue(ui_state, ui_state->menu_selected, _ui_getM17EntryName,
gfx_printLine(1, 1, layout.top_h, SCREEN_HEIGHT - layout.bottom_h, _ui_getM17ValueName);
layout.horizontal_pad, layout.input_font,
TEXT_ALIGN_CENTER, color_white, last_state.settings.callsign);
} }
} }