Use channel knob to change frequency and navigate menus (TG-238)

replace/403c8f307da07843cf00f53c61581fcbbd048929
Federico Amedeo Izzo 2021-06-05 18:11:30 +02:00
rodzic f5a70b3e43
commit 57b66652b7
4 zmienionych plików z 42 dodań i 34 usunięć

Wyświetl plik

@ -57,8 +57,8 @@ enum key
KEY_F6 = (1 << 24), /* Function button (device specific) */
KEY_F7 = (1 << 25), /* Function button (device specific) */
KEY_F8 = (1 << 26), /* Function button (device specific) */
KEY_F9 = (1 << 27), /* Function button (device specific) */
KEY_F10 = (1 << 28), /* Function button (device specific) */
KNOB_LEFT = (1 << 27), /* Knob rotated counter clockwise */
KNOB_RIGHT = (1 << 28), /* Knob rotated clockwise */
};
/**
@ -87,9 +87,9 @@ typedef union
{
struct
{
uint32_t _padding : 2,
long_press : 1,
keys : 29;
uint32_t long_press : 1,
keys : 29,
_padding : 2;
};
uint32_t value;

Wyświetl plik

@ -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
// 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;
*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;
*sync_rtx = true;
}
@ -738,7 +738,7 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
{
// VFO screen
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
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;
}
}
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_LEFT)
{
// Decrement TX and RX frequency of 12.5KHz
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
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);
}
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);
}
break;
// Top menu screen
case MENU_TOP:
if(msg.keys & KEY_UP)
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
_ui_menuUp(menu_num);
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(menu_num);
else if(msg.keys & KEY_ENTER)
{
@ -893,10 +893,10 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
case MENU_CHANNEL:
// Contacts menu screen
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
_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)
{
@ -969,9 +969,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
#endif
// Settings menu screen
case MENU_SETTINGS:
if(msg.keys & KEY_UP)
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
_ui_menuUp(settings_num);
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(settings_num);
else if(msg.keys & KEY_ENTER)
{
@ -1002,9 +1002,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
break;
// Info menu screen
case MENU_INFO:
if(msg.keys & KEY_UP)
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
_ui_menuUp(info_num);
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(info_num);
else if(msg.keys & KEY_ESC)
_ui_menuBack(MENU_TOP);
@ -1057,7 +1057,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
break;
#endif
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)
{
@ -1073,7 +1074,8 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
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)
{
@ -1089,9 +1091,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
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);
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(display_num);
else if(msg.keys & KEY_ENTER)
ui_state.edit_mode = !ui_state.edit_mode;
@ -1101,7 +1103,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
#ifdef HAS_GPS
case SETTINGS_GPS:
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)
{
@ -1122,18 +1126,20 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
state.settings.gps_set_time = !state.settings.gps_set_time;
break;
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;
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;
break;
default:
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);
else if(msg.keys & KEY_DOWN)
else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT)
_ui_menuDown(settings_gps_num);
else if(msg.keys & KEY_ENTER)
ui_state.edit_mode = !ui_state.edit_mode;

Wyświetl plik

@ -52,22 +52,22 @@ keyboard_t kbd_getKeys()
{
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;
int8_t new_pos = platform_getChSelector();
if (old_pos != new_pos)
{
int8_t diff = old_pos - new_pos;
int8_t diff = new_pos - old_pos;
if (diff < 0)
keys |= KEY_LEFT;
keys |= KNOB_LEFT;
else if (diff > 0)
keys |= KEY_RIGHT;
keys |= KNOB_RIGHT;
else
{
if (old_pos < 0)
keys |= KEY_LEFT;
keys |= KNOB_LEFT;
else
keys |= KEY_RIGHT;
keys |= KNOB_RIGHT;
}
old_pos = new_pos;
}

Wyświetl plik

@ -52,6 +52,8 @@ keyboard_t kbd_getKeys() {
if (state[SDL_SCANCODE_NONUSHASH]) keys |= KEY_HASH;
if (state[SDL_SCANCODE_MINUS]) keys |= KEY_F1;
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;
}