Use channel knob to change frequency and navigate menus (TG-238)
This commit is contained in:
parent
f5a70b3e43
commit
57b66652b7
|
|
@ -57,8 +57,8 @@ enum key
|
||||||
KEY_F6 = (1 << 24), /* Function button (device specific) */
|
KEY_F6 = (1 << 24), /* Function button (device specific) */
|
||||||
KEY_F7 = (1 << 25), /* Function button (device specific) */
|
KEY_F7 = (1 << 25), /* Function button (device specific) */
|
||||||
KEY_F8 = (1 << 26), /* Function button (device specific) */
|
KEY_F8 = (1 << 26), /* Function button (device specific) */
|
||||||
KEY_F9 = (1 << 27), /* Function button (device specific) */
|
KNOB_LEFT = (1 << 27), /* Knob rotated counter clockwise */
|
||||||
KEY_F10 = (1 << 28), /* Function button (device specific) */
|
KNOB_RIGHT = (1 << 28), /* Knob rotated clockwise */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -87,9 +87,9 @@ typedef union
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32_t _padding : 2,
|
uint32_t long_press : 1,
|
||||||
long_press : 1,
|
keys : 29,
|
||||||
keys : 29;
|
_padding : 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
|
||||||
|
|
@ -645,11 +645,11 @@ void _ui_fsm_menuMacro(kbd_msg_t msg, bool *sync_rtx) {
|
||||||
}
|
}
|
||||||
#else // Use left and right buttons or relative position knob
|
#else // Use left and right buttons or relative position knob
|
||||||
// NOTE: Use up and down for UV380 which has not yet a functional knob
|
// NOTE: Use up and down for UV380 which has not yet a functional knob
|
||||||
if(msg.keys & KEY_LEFT || msg.keys & KEY_DOWN) {
|
if(msg.keys & KEY_LEFT || msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT) {
|
||||||
state.sqlLevel = (state.sqlLevel == 0) ? 0 : state.sqlLevel - 1;
|
state.sqlLevel = (state.sqlLevel == 0) ? 0 : state.sqlLevel - 1;
|
||||||
*sync_rtx = true;
|
*sync_rtx = true;
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_RIGHT || msg.keys & KEY_UP) {
|
else if(msg.keys & KEY_RIGHT || msg.keys & KEY_UP || msg.keys & KNOB_RIGHT) {
|
||||||
state.sqlLevel = (state.sqlLevel == 15) ? 15 : state.sqlLevel + 1;
|
state.sqlLevel = (state.sqlLevel == 15) ? 15 : state.sqlLevel + 1;
|
||||||
*sync_rtx = true;
|
*sync_rtx = true;
|
||||||
}
|
}
|
||||||
|
|
@ -738,7 +738,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
{
|
{
|
||||||
// VFO screen
|
// VFO screen
|
||||||
case MAIN_VFO:
|
case MAIN_VFO:
|
||||||
if(msg.keys & KEY_UP)
|
if(msg.keys & KEY_UP || msg.keys & KNOB_RIGHT)
|
||||||
{
|
{
|
||||||
// Increment TX and RX frequency of 12.5KHz
|
// Increment TX and RX frequency of 12.5KHz
|
||||||
if(_ui_freq_check_limits(state.channel.rx_frequency + 12500) &&
|
if(_ui_freq_check_limits(state.channel.rx_frequency + 12500) &&
|
||||||
|
|
@ -749,7 +749,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
*sync_rtx = true;
|
*sync_rtx = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT)
|
||||||
{
|
{
|
||||||
// Decrement TX and RX frequency of 12.5KHz
|
// Decrement TX and RX frequency of 12.5KHz
|
||||||
if(_ui_freq_check_limits(state.channel.rx_frequency - 12500) &&
|
if(_ui_freq_check_limits(state.channel.rx_frequency - 12500) &&
|
||||||
|
|
@ -838,20 +838,20 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
// Switch to VFO screen
|
// Switch to VFO screen
|
||||||
state.ui_screen = MAIN_VFO;
|
state.ui_screen = MAIN_VFO;
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_UP)
|
else if(msg.keys & KEY_UP || msg.keys & KNOB_RIGHT)
|
||||||
{
|
{
|
||||||
_ui_fsm_loadChannel(state.channel_index + 1, sync_rtx);
|
_ui_fsm_loadChannel(state.channel_index + 1, sync_rtx);
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT)
|
||||||
{
|
{
|
||||||
_ui_fsm_loadChannel(state.channel_index - 1, sync_rtx);
|
_ui_fsm_loadChannel(state.channel_index - 1, sync_rtx);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Top menu screen
|
// Top menu screen
|
||||||
case MENU_TOP:
|
case MENU_TOP:
|
||||||
if(msg.keys & KEY_UP)
|
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
_ui_menuUp(menu_num);
|
_ui_menuUp(menu_num);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
_ui_menuDown(menu_num);
|
_ui_menuDown(menu_num);
|
||||||
else if(msg.keys & KEY_ENTER)
|
else if(msg.keys & KEY_ENTER)
|
||||||
{
|
{
|
||||||
|
|
@ -893,10 +893,10 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
case MENU_CHANNEL:
|
case MENU_CHANNEL:
|
||||||
// Contacts menu screen
|
// Contacts menu screen
|
||||||
case MENU_CONTACTS:
|
case MENU_CONTACTS:
|
||||||
if(msg.keys & KEY_UP)
|
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
// Using 1 as parameter disables menu wrap around
|
// Using 1 as parameter disables menu wrap around
|
||||||
_ui_menuUp(1);
|
_ui_menuUp(1);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
{
|
{
|
||||||
if(state.ui_screen == MENU_ZONE)
|
if(state.ui_screen == MENU_ZONE)
|
||||||
{
|
{
|
||||||
|
|
@ -969,9 +969,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
#endif
|
#endif
|
||||||
// Settings menu screen
|
// Settings menu screen
|
||||||
case MENU_SETTINGS:
|
case MENU_SETTINGS:
|
||||||
if(msg.keys & KEY_UP)
|
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
_ui_menuUp(settings_num);
|
_ui_menuUp(settings_num);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
_ui_menuDown(settings_num);
|
_ui_menuDown(settings_num);
|
||||||
else if(msg.keys & KEY_ENTER)
|
else if(msg.keys & KEY_ENTER)
|
||||||
{
|
{
|
||||||
|
|
@ -1002,9 +1002,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
break;
|
break;
|
||||||
// Info menu screen
|
// Info menu screen
|
||||||
case MENU_INFO:
|
case MENU_INFO:
|
||||||
if(msg.keys & KEY_UP)
|
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
_ui_menuUp(info_num);
|
_ui_menuUp(info_num);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
_ui_menuDown(info_num);
|
_ui_menuDown(info_num);
|
||||||
else if(msg.keys & KEY_ESC)
|
else if(msg.keys & KEY_ESC)
|
||||||
_ui_menuBack(MENU_TOP);
|
_ui_menuBack(MENU_TOP);
|
||||||
|
|
@ -1057,7 +1057,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case SETTINGS_DISPLAY:
|
case SETTINGS_DISPLAY:
|
||||||
if(msg.keys & KEY_LEFT || (msg.keys & KEY_DOWN && ui_state.edit_mode))
|
if(msg.keys & KEY_LEFT || (ui_state.edit_mode &&
|
||||||
|
(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT)))
|
||||||
{
|
{
|
||||||
switch(ui_state.menu_selected)
|
switch(ui_state.menu_selected)
|
||||||
{
|
{
|
||||||
|
|
@ -1073,7 +1074,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
state.ui_screen = SETTINGS_DISPLAY;
|
state.ui_screen = SETTINGS_DISPLAY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_RIGHT || (msg.keys & KEY_UP && ui_state.edit_mode))
|
else if(msg.keys & KEY_RIGHT || (ui_state.edit_mode &&
|
||||||
|
(msg.keys & KEY_UP || msg.keys & KNOB_RIGHT)))
|
||||||
{
|
{
|
||||||
switch(ui_state.menu_selected)
|
switch(ui_state.menu_selected)
|
||||||
{
|
{
|
||||||
|
|
@ -1089,9 +1091,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
state.ui_screen = SETTINGS_DISPLAY;
|
state.ui_screen = SETTINGS_DISPLAY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_UP)
|
else if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
_ui_menuUp(display_num);
|
_ui_menuUp(display_num);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
_ui_menuDown(display_num);
|
_ui_menuDown(display_num);
|
||||||
else if(msg.keys & KEY_ENTER)
|
else if(msg.keys & KEY_ENTER)
|
||||||
ui_state.edit_mode = !ui_state.edit_mode;
|
ui_state.edit_mode = !ui_state.edit_mode;
|
||||||
|
|
@ -1101,7 +1103,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
#ifdef HAS_GPS
|
#ifdef HAS_GPS
|
||||||
case SETTINGS_GPS:
|
case SETTINGS_GPS:
|
||||||
if(msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT ||
|
if(msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT ||
|
||||||
((msg.keys & KEY_UP || msg.keys & KEY_DOWN) && ui_state.edit_mode))
|
(ui_state.edit_mode &&
|
||||||
|
(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT ||
|
||||||
|
msg.keys & KEY_UP || msg.keys & KNOB_RIGHT)))
|
||||||
{
|
{
|
||||||
switch(ui_state.menu_selected)
|
switch(ui_state.menu_selected)
|
||||||
{
|
{
|
||||||
|
|
@ -1122,18 +1126,20 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
|
||||||
state.settings.gps_set_time = !state.settings.gps_set_time;
|
state.settings.gps_set_time = !state.settings.gps_set_time;
|
||||||
break;
|
break;
|
||||||
case G_TIMEZONE:
|
case G_TIMEZONE:
|
||||||
if(msg.keys & KEY_LEFT || msg.keys & KEY_UP)
|
if(msg.keys & KEY_LEFT || msg.keys & KEY_UP ||
|
||||||
|
msg.keys & KNOB_LEFT)
|
||||||
state.settings.utc_timezone -= 1;
|
state.settings.utc_timezone -= 1;
|
||||||
else if(msg.keys & KEY_RIGHT || msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_RIGHT || msg.keys & KEY_DOWN ||
|
||||||
|
msg.keys & KNOB_RIGHT)
|
||||||
state.settings.utc_timezone += 1;
|
state.settings.utc_timezone += 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
state.ui_screen = SETTINGS_GPS;
|
state.ui_screen = SETTINGS_GPS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg.keys & KEY_UP)
|
else if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
|
||||||
_ui_menuUp(settings_gps_num);
|
_ui_menuUp(settings_gps_num);
|
||||||
else if(msg.keys & KEY_DOWN)
|
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
|
||||||
_ui_menuDown(settings_gps_num);
|
_ui_menuDown(settings_gps_num);
|
||||||
else if(msg.keys & KEY_ENTER)
|
else if(msg.keys & KEY_ENTER)
|
||||||
ui_state.edit_mode = !ui_state.edit_mode;
|
ui_state.edit_mode = !ui_state.edit_mode;
|
||||||
|
|
|
||||||
|
|
@ -52,22 +52,22 @@ keyboard_t kbd_getKeys()
|
||||||
{
|
{
|
||||||
keyboard_t keys = 0;
|
keyboard_t keys = 0;
|
||||||
|
|
||||||
/* Use absolute position knob to emulate left and right buttons */
|
/* Read channel knob to send KNOB_LEFT and KNOB_RIGHT events */
|
||||||
static int8_t old_pos = 0;
|
static int8_t old_pos = 0;
|
||||||
int8_t new_pos = platform_getChSelector();
|
int8_t new_pos = platform_getChSelector();
|
||||||
if (old_pos != new_pos)
|
if (old_pos != new_pos)
|
||||||
{
|
{
|
||||||
int8_t diff = old_pos - new_pos;
|
int8_t diff = new_pos - old_pos;
|
||||||
if (diff < 0)
|
if (diff < 0)
|
||||||
keys |= KEY_LEFT;
|
keys |= KNOB_LEFT;
|
||||||
else if (diff > 0)
|
else if (diff > 0)
|
||||||
keys |= KEY_RIGHT;
|
keys |= KNOB_RIGHT;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (old_pos < 0)
|
if (old_pos < 0)
|
||||||
keys |= KEY_LEFT;
|
keys |= KNOB_LEFT;
|
||||||
else
|
else
|
||||||
keys |= KEY_RIGHT;
|
keys |= KNOB_RIGHT;
|
||||||
}
|
}
|
||||||
old_pos = new_pos;
|
old_pos = new_pos;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ keyboard_t kbd_getKeys() {
|
||||||
if (state[SDL_SCANCODE_NONUSHASH]) keys |= KEY_HASH;
|
if (state[SDL_SCANCODE_NONUSHASH]) keys |= KEY_HASH;
|
||||||
if (state[SDL_SCANCODE_MINUS]) keys |= KEY_F1;
|
if (state[SDL_SCANCODE_MINUS]) keys |= KEY_F1;
|
||||||
if (state[SDL_SCANCODE_M]) keys |= KEY_MONI;
|
if (state[SDL_SCANCODE_M]) keys |= KEY_MONI;
|
||||||
|
if (state[SDL_SCANCODE_PAGEUP]) keys |= KNOB_LEFT;
|
||||||
|
if (state[SDL_SCANCODE_PAGEDOWN]) keys |= KNOB_RIGHT;
|
||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue