FM radio button actions changed to be the same as in VFO mode

This commit is contained in:
Krzysiek Egzmont
2023-11-27 15:45:02 +01:00
parent 3c643208ff
commit fe49f250b0

104
app/fm.c
View File

@@ -47,6 +47,19 @@ bool gFM_FoundFrequency;
bool gFM_AutoScan; bool gFM_AutoScan;
uint16_t gFM_RestoreCountdown_10ms; uint16_t gFM_RestoreCountdown_10ms;
const uint8_t BUTTON_STATE_PRESSED = 1 << 0;
const uint8_t BUTTON_STATE_HELD = 1 << 1;
const uint8_t BUTTON_EVENT_PRESSED = BUTTON_STATE_PRESSED;
const uint8_t BUTTON_EVENT_HELD = BUTTON_STATE_PRESSED | BUTTON_STATE_HELD;
const uint8_t BUTTON_EVENT_SHORT = 0;
const uint8_t BUTTON_EVENT_LONG = BUTTON_STATE_HELD;
static void Key_FUNC(KEY_Code_t Key, uint8_t state);
bool FM_CheckValidChannel(uint8_t Channel) bool FM_CheckValidChannel(uint8_t Channel)
{ {
return (Channel < ARRAY_SIZE(gFM_Channels) && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) ? true : false; return (Channel < ARRAY_SIZE(gFM_Channels) && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) ? true : false;
@@ -223,12 +236,11 @@ Bail:
return ret; return ret;
} }
static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) static void Key_DIGITS(KEY_Code_t Key, uint8_t state)
{ {
enum { STATE_FREQ_MODE, STATE_MR_MODE, STATE_SAVE }; enum { STATE_FREQ_MODE, STATE_MR_MODE, STATE_SAVE };
if (!bKeyHeld && !bKeyPressed) { if (state == BUTTON_EVENT_SHORT && !gWasFKeyPressed) {
if (!gWasFKeyPressed) {
uint8_t State; uint8_t State;
if (gAskToDelete) { if (gAskToDelete) {
@@ -317,9 +329,16 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
gAnotherVoiceID = (VOICE_ID_t)Key; gAnotherVoiceID = (VOICE_ID_t)Key;
#endif #endif
}
else
Key_FUNC(Key, state);
}
return; static void Key_FUNC(KEY_Code_t Key, uint8_t state)
} {
if (state == BUTTON_EVENT_SHORT || state == BUTTON_EVENT_HELD)
{
bool autoScan = gWasFKeyPressed || (state == BUTTON_EVENT_HELD);
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
gWasFKeyPressed = false; gWasFKeyPressed = false;
@@ -331,7 +350,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
ACTION_FM(); ACTION_FM();
break; break;
case KEY_1: case KEY_3:
gEeprom.FM_IsMrMode = !gEeprom.FM_IsMrMode; gEeprom.FM_IsMrMode = !gEeprom.FM_IsMrMode;
if (!FM_ConfigureChannelState()) if (!FM_ConfigureChannelState())
@@ -343,12 +362,8 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
break; break;
case KEY_2: case KEY_STAR:
ACTION_Scan(true); ACTION_Scan(autoScan);
break;
case KEY_3:
ACTION_Scan(false);
break; break;
default: default:
@@ -358,12 +373,9 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
} }
} }
static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) static void Key_EXIT(uint8_t state)
{ {
if (bKeyHeld) if (state != BUTTON_EVENT_SHORT)
return;
if (!bKeyPressed)
return; return;
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
@@ -418,13 +430,11 @@ static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
gRequestDisplayScreen = DISPLAY_FM; gRequestDisplayScreen = DISPLAY_FM;
} }
static void FM_Key_MENU(bool bKeyPressed, bool bKeyHeld) static void Key_MENU(uint8_t state)
{ {
if (bKeyHeld) if (state != BUTTON_EVENT_SHORT)
return; return;
if (!bKeyPressed)
return;
gRequestDisplayScreen = DISPLAY_FM; gRequestDisplayScreen = DISPLAY_FM;
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
@@ -478,38 +488,29 @@ static void FM_Key_MENU(bool bKeyPressed, bool bKeyHeld)
} }
} }
static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step) static void Key_UP_DOWN(uint8_t state, int8_t Step)
{ {
if (bKeyHeld || !bKeyPressed) if (state == BUTTON_EVENT_PRESSED) {
{ if (gInputBoxIndex) {
if (gInputBoxIndex)
return;
if (!bKeyPressed)
return;
}
else
{
if (gInputBoxIndex)
{
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
return; return;
} }
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
} }
else {
if (gInputBoxIndex || state!=BUTTON_EVENT_HELD)
return;
}
if (gAskToSave) if (gAskToSave) {
{
gRequestDisplayScreen = DISPLAY_FM; gRequestDisplayScreen = DISPLAY_FM;
gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19);
return; return;
} }
if (gFM_ScanState != FM_SCAN_OFF) if (gFM_ScanState != FM_SCAN_OFF) {
{ if (gFM_AutoScan) {
if (gFM_AutoScan)
{
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
return; return;
} }
@@ -519,8 +520,7 @@ static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step)
return; return;
} }
if (gEeprom.FM_IsMrMode) if (gEeprom.FM_IsMrMode) {
{
const uint8_t Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel + Step, Step); const uint8_t Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel + Step, Step);
if (Channel == 0xFF || gEeprom.FM_SelectedChannel == Channel) if (Channel == 0xFF || gEeprom.FM_SelectedChannel == Channel)
goto Bail; goto Bail;
@@ -528,8 +528,7 @@ static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step)
gEeprom.FM_SelectedChannel = Channel; gEeprom.FM_SelectedChannel = Channel;
gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel];
} }
else else {
{
uint16_t Frequency = gEeprom.FM_SelectedFrequency + Step; uint16_t Frequency = gEeprom.FM_SelectedFrequency + Step;
if (Frequency < gEeprom.FM_LowerLimit) if (Frequency < gEeprom.FM_LowerLimit)
Frequency = gEeprom.FM_UpperLimit; Frequency = gEeprom.FM_UpperLimit;
@@ -551,6 +550,10 @@ Bail:
void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
{ {
uint8_t state = bKeyPressed + 2 * bKeyHeld;
switch (Key) switch (Key)
{ {
case KEY_0: case KEY_0:
@@ -563,19 +566,22 @@ void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
case KEY_7: case KEY_7:
case KEY_8: case KEY_8:
case KEY_9: case KEY_9:
FM_Key_DIGITS(Key, bKeyPressed, bKeyHeld); Key_DIGITS(Key, state);
break;
case KEY_STAR:
Key_FUNC(Key, state);
break; break;
case KEY_MENU: case KEY_MENU:
FM_Key_MENU(bKeyPressed, bKeyHeld); Key_MENU(state);
return; return;
case KEY_UP: case KEY_UP:
FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); Key_UP_DOWN(state, 1);
break; break;
case KEY_DOWN: case KEY_DOWN:
FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); Key_UP_DOWN(state, -1);
break;; break;;
case KEY_EXIT: case KEY_EXIT:
FM_Key_EXIT(bKeyPressed, bKeyHeld); Key_EXIT(state);
break; break;
case KEY_F: case KEY_F:
GENERIC_Key_F(bKeyPressed, bKeyHeld); GENERIC_Key_F(bKeyPressed, bKeyHeld);