UI: Initial MEM implementation
This commit is contained in:
parent
aef0eb30b1
commit
feb7e7ef7e
|
|
@ -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;
|
||||||
|
|
|
||||||
103
openrtx/src/ui.c
103
openrtx/src/ui.c
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue