UI: Add Time&Date settings, not functional yet

replace/0e3395586453792a7314a7d62d72fb3f5cd101b7
Federico Amedeo Izzo 2020-12-31 16:36:32 +01:00
rodzic 418fec0ac9
commit 641dcc13e9
2 zmienionych plików z 103 dodań i 9 usunięć

Wyświetl plik

@ -39,6 +39,7 @@ enum uiScreen
MENU_GPS, MENU_GPS,
MENU_SETTINGS, MENU_SETTINGS,
SETTINGS_TIMEDATE, SETTINGS_TIMEDATE,
SETTINGS_TIMEDATE_SET,
LOW_BAT LOW_BAT
}; };

Wyświetl plik

@ -79,6 +79,8 @@
#define MAX_ENTRY_LEN 12 #define MAX_ENTRY_LEN 12
// Frequency digits // Frequency digits
#define FREQ_DIGITS 8 #define FREQ_DIGITS 8
// Time & Date digits
#define TIMEDATE_DIGITS 10
const char *menu_items[6] = const char *menu_items[6] =
{ {
@ -147,7 +149,9 @@ freq_t new_rx_frequency;
freq_t new_tx_frequency; freq_t new_tx_frequency;
char new_rx_freq_buf[14] = ""; char new_rx_freq_buf[14] = "";
char new_tx_freq_buf[14] = ""; char new_tx_freq_buf[14] = "";
curTime_t new_timedate = {0};
char new_date_buf[9] = "";
char new_time_buf[9] = "";
layout_t _ui_calculateLayout() layout_t _ui_calculateLayout()
{ {
@ -485,7 +489,7 @@ void _ui_drawSettingsTimeDate(state_t* last_state)
gfx_print(layout.top_pos, "Time&Date", layout.top_font, gfx_print(layout.top_pos, "Time&Date", layout.top_font,
TEXT_ALIGN_CENTER, color_white); TEXT_ALIGN_CENTER, color_white);
// Print current time and date // Print current time and date
char date_buf[12] = ""; char date_buf[9] = "";
char time_buf[9] = ""; char time_buf[9] = "";
snprintf(date_buf, sizeof(date_buf), "%02d/%02d/%02d", snprintf(date_buf, sizeof(date_buf), "%02d/%02d/%02d",
last_state->time.date, last_state->time.month, last_state->time.year); last_state->time.date, last_state->time.month, last_state->time.year);
@ -497,6 +501,44 @@ void _ui_drawSettingsTimeDate(state_t* last_state)
color_white); color_white);
} }
void _ui_drawSettingsTimeDateSet(state_t* last_state)
{
gfx_clearScreen();
// Print "Time&Date" on top bar
gfx_print(layout.top_pos, "Time&Date", layout.top_font,
TEXT_ALIGN_CENTER, color_white);
if(input_position <= 0)
{
strcpy(new_date_buf, "__/__/__");
strcpy(new_time_buf, "__:__:00");
}
else
{
char input_char = input_number + '0';
// Insert date digit
if(input_position <= 6)
{
uint8_t pos = input_position -1;
// Skip "/"
if(input_position > 2) pos += 1;
if(input_position > 4) pos += 1;
new_date_buf[pos] = input_char;
}
// Insert time digit
else
{
uint8_t pos = input_position -7;
// Skip ":"
if(input_position > 8) pos += 1;
new_time_buf[pos] = input_char;
}
}
gfx_print(layout.line2_pos, new_date_buf, layout.line2_font, TEXT_ALIGN_CENTER,
color_white);
gfx_print(layout.line3_pos, new_time_buf, layout.line3_font, TEXT_ALIGN_CENTER,
color_white);
}
void ui_init() void ui_init()
{ {
redraw_needed = true; redraw_needed = true;
@ -552,6 +594,10 @@ freq_t _ui_freq_add_digit(freq_t freq, uint8_t pos, uint8_t number)
return freq += number * coefficient; return freq += number * coefficient;
} }
curTime_t _ui_timedate_add_digit(curTime_t timedate, uint8_t pos, uint8_t number)
{
}
bool _ui_freq_check_limits(freq_t freq) bool _ui_freq_check_limits(freq_t freq)
{ {
bool valid = false; bool valid = false;
@ -626,7 +672,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
// Save pressed number to calculare frequency and show in GUI // Save pressed number to calculare frequency and show in GUI
input_number = input_getPressedNumber(msg); input_number = input_getPressedNumber(msg);
// Calculate portion of the new frequency // Calculate portion of the new frequency
new_rx_frequency = _ui_freq_add_digit(new_rx_frequency, input_position, input_number); new_rx_frequency = _ui_freq_add_digit(new_rx_frequency,
input_position, input_number);
} }
break; break;
// VFO frequency input screen // VFO frequency input screen
@ -689,8 +736,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
if(input_position == 1) if(input_position == 1)
new_rx_frequency = 0; new_rx_frequency = 0;
// Calculate portion of the new RX frequency // Calculate portion of the new RX frequency
new_rx_frequency = _ui_freq_add_digit(new_rx_frequency, input_position, input_number); new_rx_frequency = _ui_freq_add_digit(new_rx_frequency,
if(input_position >= (FREQ_DIGITS)) input_position, input_number);
if(input_position >= FREQ_DIGITS)
{ {
// Switch to TX input // Switch to TX input
input_set = SET_TX; input_set = SET_TX;
@ -705,8 +753,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
if(input_position == 1) if(input_position == 1)
new_tx_frequency = 0; new_tx_frequency = 0;
// Calculate portion of the new TX frequency // Calculate portion of the new TX frequency
new_tx_frequency = _ui_freq_add_digit(new_tx_frequency, input_position, input_number); new_tx_frequency = _ui_freq_add_digit(new_tx_frequency,
if(input_position >= (FREQ_DIGITS)) input_position, input_number);
if(input_position >= FREQ_DIGITS)
{ {
// Save both inserted frequencies // Save both inserted frequencies
if(_ui_freq_check_limits(new_rx_frequency) && if(_ui_freq_check_limits(new_rx_frequency) &&
@ -784,9 +833,17 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
menu_selected = 0; menu_selected = 0;
} }
break; break;
// Time&Date settingsscreen // Time&Date settings screen
case SETTINGS_TIMEDATE: case SETTINGS_TIMEDATE:
if(msg.keys & KEY_ESC) if(msg.keys & KEY_ENTER)
{
// Switch to set Time&Date mode
state.ui_screen = SETTINGS_TIMEDATE_SET;
// Reset input position and selection
input_position = 0;
memset(&new_timedate, 0, sizeof(curTime_t));
}
else if(msg.keys & KEY_ESC)
{ {
// Return to settings menu // Return to settings menu
state.ui_screen = MENU_SETTINGS; state.ui_screen = MENU_SETTINGS;
@ -794,6 +851,37 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
menu_selected = 0; menu_selected = 0;
} }
break; break;
// Time&Date settings screen, edit mode
case SETTINGS_TIMEDATE_SET:
if(msg.keys & KEY_ENTER)
{
// Return to Time&Date menu, saving values
printf("Setting time: %d/%d/%d, %d:%d\n",
new_timedate.date, new_timedate.month,
new_timedate.year, new_timedate.minute,
new_timedate.hour);
rtc_setTime(new_timedate);
state.ui_screen = SETTINGS_TIMEDATE;
}
else if(msg.keys & KEY_ESC)
{
// Return to Time&Date menu discarding values
state.ui_screen = SETTINGS_TIMEDATE;
}
else if(input_isNumberPressed(msg))
{
input_position += 1;
input_number = input_getPressedNumber(msg);
new_timedate = _ui_timedate_add_digit(new_timedate,
input_position, input_number);
if(input_position >= TIMEDATE_DIGITS)
{
// Return to Time&Date menu, saving values
rtc_setTime(new_timedate);
state.ui_screen = SETTINGS_TIMEDATE;
}
}
break;
} }
} }
} }
@ -833,6 +921,11 @@ bool ui_updateGUI(state_t last_state)
_ui_drawSettingsTimeDate(&last_state); _ui_drawSettingsTimeDate(&last_state);
screen_update = true; screen_update = true;
break; break;
// Time&Date settings screen, edit mode
case SETTINGS_TIMEDATE_SET:
_ui_drawSettingsTimeDateSet(&last_state);
screen_update = true;
break;
// Low battery screen // Low battery screen
case LOW_BAT: case LOW_BAT:
screen_update = _ui_drawLowBatteryScreen(); screen_update = _ui_drawLowBatteryScreen();