UI: Initial MEM implementation

This commit is contained in:
Federico Amedeo Izzo 2021-01-09 19:37:51 +01:00
parent aef0eb30b1
commit feb7e7ef7e
2 changed files with 83 additions and 25 deletions

View File

@ -37,8 +37,8 @@
enum uiScreen enum uiScreen
{ {
VFO_MAIN = 0, MAIN_VFO = 0,
VFO_INPUT, MAIN_VFO_INPUT,
MAIN_MEM, MAIN_MEM,
MENU_TOP, MENU_TOP,
MENU_ZONE, MENU_ZONE,
@ -114,6 +114,7 @@ typedef struct ui_state_t
char new_date_buf[9]; char new_date_buf[9];
char new_time_buf[9]; char new_time_buf[9];
#endif #endif
uint8_t last_main_state;
} ui_state_t; } ui_state_t;
extern layout_t layout; extern layout_t layout;

View File

@ -239,7 +239,7 @@ layout_t _ui_calculateLayout()
return new_layout; return new_layout;
} }
void _ui_drawVFOBackground() void _ui_drawMainBackground()
{ {
// Print top bar line of hline_h pixel height // Print top bar line of hline_h pixel height
gfx_drawHLine(layout.top_h, layout.hline_h, color_grey); gfx_drawHLine(layout.top_h, layout.hline_h, color_grey);
@ -253,7 +253,7 @@ void _ui_drawVFOBackground()
yellow); yellow);
} }
void _ui_drawVFOTop(state_t* last_state) void _ui_drawMainTop(state_t* last_state)
{ {
#ifdef HAS_RTC #ifdef HAS_RTC
// Print clock on top bar // Print clock on top bar
@ -303,6 +303,22 @@ void _ui_drawVFOMiddle(state_t* last_state)
color_white); color_white);
} }
void _ui_drawMEMMiddle(state_t* last_state)
{
// Print VFO frequencies
char freq_buf[20] = "";
snprintf(freq_buf, sizeof(freq_buf), " Rx:%03u.%05u",
last_state->channel.rx_frequency/1000000,
last_state->channel.rx_frequency%1000000/10);
gfx_print(layout.line2_left, freq_buf, layout.line2_font, TEXT_ALIGN_CENTER,
color_white);
snprintf(freq_buf, sizeof(freq_buf), " Tx:%03u.%05u",
last_state->channel.tx_frequency/1000000,
last_state->channel.tx_frequency%1000000/10);
gfx_print(layout.line3_left, freq_buf, layout.line3_font, TEXT_ALIGN_CENTER,
color_white);
}
void _ui_drawVFOMiddleInput(state_t* last_state, ui_state_t* ui_state) void _ui_drawVFOMiddleInput(state_t* last_state, ui_state_t* ui_state)
{ {
// Add inserted number to string, skipping "Rx: "/"Tx: " and "." // Add inserted number to string, skipping "Rx: "/"Tx: " and "."
@ -365,28 +381,43 @@ void _ui_drawVFOMiddleInput(state_t* last_state, ui_state_t* ui_state)
void _ui_drawVFOBottom() void _ui_drawVFOBottom()
{ {
gfx_print(layout.bottom_left, "OpenRTX", layout.bottom_font, gfx_print(layout.bottom_left, "OpenRTX VFO", layout.bottom_font,
TEXT_ALIGN_CENTER, color_white); TEXT_ALIGN_CENTER, color_white);
} }
void _ui_drawVFOMain(state_t* last_state) void _ui_drawMEMBottom()
{
gfx_print(layout.bottom_left, "OpenRTX MEM", layout.bottom_font,
TEXT_ALIGN_CENTER, color_white);
}
void _ui_drawMainVFO(state_t* last_state)
{ {
gfx_clearScreen(); gfx_clearScreen();
_ui_drawVFOBackground(); _ui_drawMainBackground();
_ui_drawVFOTop(last_state); _ui_drawMainTop(last_state);
_ui_drawVFOMiddle(last_state); _ui_drawVFOMiddle(last_state);
_ui_drawVFOBottom(); _ui_drawVFOBottom();
} }
void _ui_drawVFOInput(state_t* last_state) void _ui_drawMainVFOInput(state_t* last_state)
{ {
gfx_clearScreen(); gfx_clearScreen();
_ui_drawVFOBackground(); _ui_drawMainBackground();
_ui_drawVFOTop(last_state); _ui_drawMainTop(last_state);
_ui_drawVFOMiddleInput(last_state, &ui_state); _ui_drawVFOMiddleInput(last_state, &ui_state);
_ui_drawVFOBottom(); _ui_drawVFOBottom();
} }
void _ui_drawMainMEM(state_t* last_state)
{
gfx_clearScreen();
_ui_drawMainBackground();
_ui_drawMainTop(last_state);
_ui_drawMEMMiddle(last_state);
_ui_drawMEMBottom();
}
void ui_init() void ui_init()
{ {
redraw_needed = true; redraw_needed = true;
@ -520,7 +551,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
{ {
state.ui_screen = LOW_BAT; state.ui_screen = LOW_BAT;
if(event.type == EVENT_KBD && event.payload) { if(event.type == EVENT_KBD && event.payload) {
state.ui_screen = VFO_MAIN; state.ui_screen = MAIN_VFO;
state.emergency = true; state.emergency = true;
} }
return; return;
@ -534,7 +565,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
switch(state.ui_screen) switch(state.ui_screen)
{ {
// VFO screen // VFO screen
case VFO_MAIN: case MAIN_VFO:
if(msg.keys & KEY_UP) if(msg.keys & KEY_UP)
{ {
// Increment TX and RX frequency of 12.5KHz // Increment TX and RX frequency of 12.5KHz
@ -561,11 +592,18 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
{ {
// Open Menu // Open Menu
state.ui_screen = MENU_TOP; state.ui_screen = MENU_TOP;
// Save current main state
ui_state.last_main_state = MAIN_VFO;
}
else if(msg.keys & KEY_ESC)
{
// Switch to MEM screen
state.ui_screen = MAIN_MEM;
} }
else if(input_isNumberPressed(msg)) else if(input_isNumberPressed(msg))
{ {
// Open Frequency input screen // Open Frequency input screen
state.ui_screen = VFO_INPUT; state.ui_screen = MAIN_VFO_INPUT;
// Reset input position and selection // Reset input position and selection
ui_state.input_position = 1; ui_state.input_position = 1;
ui_state.input_set = SET_RX; ui_state.input_set = SET_RX;
@ -585,7 +623,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
} }
break; break;
// VFO frequency input screen // VFO frequency input screen
case VFO_INPUT: case MAIN_VFO_INPUT:
if(msg.keys & KEY_ENTER) if(msg.keys & KEY_ENTER)
{ {
// Switch to TX input // Switch to TX input
@ -619,12 +657,12 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
*sync_rtx = true; *sync_rtx = true;
} }
} }
state.ui_screen = VFO_MAIN; state.ui_screen = MAIN_VFO;
} }
} }
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
{ {
state.ui_screen = VFO_MAIN; state.ui_screen = MAIN_VFO;
} }
else if(msg.keys & KEY_UP || msg.keys & KEY_DOWN) else if(msg.keys & KEY_UP || msg.keys & KEY_DOWN)
{ {
@ -675,7 +713,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
state.channel.tx_frequency = ui_state.new_tx_frequency; state.channel.tx_frequency = ui_state.new_tx_frequency;
*sync_rtx = true; *sync_rtx = true;
} }
state.ui_screen = VFO_MAIN; state.ui_screen = MAIN_VFO;
} }
} }
} }
@ -686,6 +724,21 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
state.ui_screen = MENU_MACRO; state.ui_screen = MENU_MACRO;
} }
break; break;
// MEM screen
case MAIN_MEM:
if(msg.keys & KEY_ENTER)
{
// Open Menu
state.ui_screen = MENU_TOP;
// Save current main state
ui_state.last_main_state = MAIN_MEM;
}
else if(msg.keys & KEY_ESC)
{
// Switch to VFO screen
state.ui_screen = MAIN_VFO;
}
break;
// Top menu screen // Top menu screen
case MENU_TOP: case MENU_TOP:
if(msg.keys & KEY_UP) if(msg.keys & KEY_UP)
@ -722,8 +775,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
} }
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
{ {
// Close Menu // Close Menu, switch to last main state
state.ui_screen = VFO_MAIN; state.ui_screen = ui_state.last_main_state;
// Reset menu selection // Reset menu selection
ui_state.menu_selected = 0; ui_state.menu_selected = 0;
} }
@ -810,7 +863,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
} }
// Exit from this menu when monitor key is released // Exit from this menu when monitor key is released
if(!(msg.keys & KEY_MONI)) if(!(msg.keys & KEY_MONI))
state.ui_screen = VFO_MAIN; state.ui_screen = MAIN_VFO;
break; break;
// Settings menu screen // Settings menu screen
case MENU_SETTINGS: case MENU_SETTINGS:
@ -901,12 +954,16 @@ void ui_updateGUI(state_t last_state)
switch(last_state.ui_screen) switch(last_state.ui_screen)
{ {
// VFO main screen // VFO main screen
case VFO_MAIN: case MAIN_VFO:
_ui_drawVFOMain(&last_state); _ui_drawMainVFO(&last_state);
break; break;
// VFO frequency input screen // VFO frequency input screen
case VFO_INPUT: case MAIN_VFO_INPUT:
_ui_drawVFOInput(&last_state); _ui_drawMainVFOInput(&last_state);
break;
// MEM main screen
case MAIN_MEM:
_ui_drawMainMEM(&last_state);
break; break;
// Top menu screen // Top menu screen
case MENU_TOP: case MENU_TOP: