UI refactoring: Move VFO input logic to separate functions

replace/a6a388906f4fa9a3d68e5accc231cd886ac88223
Federico Amedeo Izzo 2021-01-13 20:43:39 +01:00
rodzic b60100a1f9
commit ab44bb90e7
1 zmienionych plików z 82 dodań i 74 usunięć

Wyświetl plik

@ -395,6 +395,86 @@ int _ui_fsm_loadChannel(uint16_t index, bool *sync_rtx) {
return result;
}
void _ui_fsm_confirmVFOInput(bool *sync_rtx) {
// Switch to TX input
if(ui_state.input_set == SET_RX)
{
ui_state.input_set = SET_TX;
// Reset input position
ui_state.input_position = 0;
}
else if(ui_state.input_set == SET_TX)
{
// Save new frequency setting
// If TX frequency was not set, TX = RX
if(ui_state.new_tx_frequency == 0)
{
if(_ui_freq_check_limits(ui_state.new_rx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_rx_frequency;
*sync_rtx = true;
}
}
// Otherwise set both frequencies
else
{
if(_ui_freq_check_limits(ui_state.new_rx_frequency) &&
_ui_freq_check_limits(ui_state.new_tx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_tx_frequency;
*sync_rtx = true;
}
}
state.ui_screen = MAIN_VFO;
}
}
void _ui_fsm_insertVFONumber(kbd_msg_t msg, bool *sync_rtx) {
// Advance input position
ui_state.input_position += 1;
// Save pressed number to calculate frequency and show in GUI
ui_state.input_number = input_getPressedNumber(msg);
if(ui_state.input_set == SET_RX)
{
if(ui_state.input_position == 1)
ui_state.new_rx_frequency = 0;
// Calculate portion of the new RX frequency
ui_state.new_rx_frequency = _ui_freq_add_digit(ui_state.new_rx_frequency,
ui_state.input_position, ui_state.input_number);
if(ui_state.input_position >= FREQ_DIGITS)
{
// Switch to TX input
ui_state.input_set = SET_TX;
// Reset input position
ui_state.input_position = 0;
// Reset TX frequency
ui_state.new_tx_frequency = 0;
}
}
else if(ui_state.input_set == SET_TX)
{
if(ui_state.input_position == 1)
ui_state.new_tx_frequency = 0;
// Calculate portion of the new TX frequency
ui_state.new_tx_frequency = _ui_freq_add_digit(ui_state.new_tx_frequency,
ui_state.input_position, ui_state.input_number);
if(ui_state.input_position >= FREQ_DIGITS)
{
// Save both inserted frequencies
if(_ui_freq_check_limits(ui_state.new_rx_frequency) &&
_ui_freq_check_limits(ui_state.new_tx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_tx_frequency;
*sync_rtx = true;
}
state.ui_screen = MAIN_VFO;
}
}
}
void ui_updateFSM(event_t event, bool *sync_rtx)
{
// Check if battery has enough charge to operate
@ -487,39 +567,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
case MAIN_VFO_INPUT:
if(msg.keys & KEY_ENTER)
{
// Switch to TX input
if(ui_state.input_set == SET_RX)
{
ui_state.input_set = SET_TX;
// Reset input position
ui_state.input_position = 0;
}
else if(ui_state.input_set == SET_TX)
{
// Save new frequency setting
// If TX frequency was not set, TX = RX
if(ui_state.new_tx_frequency == 0)
{
if(_ui_freq_check_limits(ui_state.new_rx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_rx_frequency;
*sync_rtx = true;
}
}
// Otherwise set both frequencies
else
{
if(_ui_freq_check_limits(ui_state.new_rx_frequency) &&
_ui_freq_check_limits(ui_state.new_tx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_tx_frequency;
*sync_rtx = true;
}
}
state.ui_screen = MAIN_VFO;
}
_ui_fsm_confirmVFOInput(sync_rtx);
}
else if(msg.keys & KEY_ESC)
{
@ -537,47 +585,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
}
else if(input_isNumberPressed(msg))
{
// Advance input position
ui_state.input_position += 1;
// Save pressed number to calculare frequency and show in GUI
ui_state.input_number = input_getPressedNumber(msg);
if(ui_state.input_set == SET_RX)
{
if(ui_state.input_position == 1)
ui_state.new_rx_frequency = 0;
// Calculate portion of the new RX frequency
ui_state.new_rx_frequency = _ui_freq_add_digit(ui_state.new_rx_frequency,
ui_state.input_position, ui_state.input_number);
if(ui_state.input_position >= FREQ_DIGITS)
{
// Switch to TX input
ui_state.input_set = SET_TX;
// Reset input position
ui_state.input_position = 0;
// Reset TX frequency
ui_state.new_tx_frequency = 0;
}
}
else if(ui_state.input_set == SET_TX)
{
if(ui_state.input_position == 1)
ui_state.new_tx_frequency = 0;
// Calculate portion of the new TX frequency
ui_state.new_tx_frequency = _ui_freq_add_digit(ui_state.new_tx_frequency,
ui_state.input_position, ui_state.input_number);
if(ui_state.input_position >= FREQ_DIGITS)
{
// Save both inserted frequencies
if(_ui_freq_check_limits(ui_state.new_rx_frequency) &&
_ui_freq_check_limits(ui_state.new_tx_frequency))
{
state.channel.rx_frequency = ui_state.new_rx_frequency;
state.channel.tx_frequency = ui_state.new_tx_frequency;
*sync_rtx = true;
}
state.ui_screen = MAIN_VFO;
}
}
_ui_fsm_insertVFONumber(msg, sync_rtx);
}
else if(msg.keys & KEY_MONI)
{