Skip to content

Commit 2b155be

Browse files
committed
Map side buttons to VFO selection
Closes #15
1 parent cddd955 commit 2b155be

File tree

2 files changed

+50
-120
lines changed

2 files changed

+50
-120
lines changed

app/action.c

Lines changed: 41 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,6 @@
3232
#include "ui/inputbox.h"
3333
#include "ui/ui.h"
3434

35-
static void ACTION_FlashLight(void)
36-
{
37-
switch (gFlashLightState) {
38-
case 0:
39-
gFlashLightState++;
40-
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT);
41-
break;
42-
case 1:
43-
gFlashLightState++;
44-
break;
45-
default:
46-
gFlashLightState = 0;
47-
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT);
48-
}
49-
}
50-
5135
void ACTION_Power(void)
5236
{
5337
if (++gTxVfo->OUTPUT_POWER > OUTPUT_POWER_HIGH) {
@@ -59,43 +43,6 @@ void ACTION_Power(void)
5943
gRequestDisplayScreen = gScreenToDisplay;
6044
}
6145

62-
static void ACTION_Monitor(void)
63-
{
64-
if (gCurrentFunction != FUNCTION_MONITOR) {
65-
RADIO_SelectVfos();
66-
#if defined(ENABLE_NOAA)
67-
if (gRxVfo->CHANNEL_SAVE >= NOAA_CHANNEL_FIRST && gIsNoaaMode) {
68-
gNoaaChannel = gRxVfo->CHANNEL_SAVE - NOAA_CHANNEL_FIRST;
69-
}
70-
#endif
71-
RADIO_SetupRegisters(true);
72-
APP_StartListening(FUNCTION_MONITOR);
73-
return;
74-
}
75-
if (gScanState != SCAN_OFF) {
76-
ScanPauseDelayIn10msec = 500;
77-
gScheduleScanListen = false;
78-
gScanPauseMode = true;
79-
}
80-
#if defined(ENABLE_NOAA)
81-
if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF && gIsNoaaMode) {
82-
gNOAA_Countdown = 500;
83-
gScheduleNOAA = false;
84-
}
85-
#endif
86-
RADIO_SetupRegisters(true);
87-
#if defined(ENABLE_FMRADIO)
88-
if (gFmRadioMode) {
89-
FM_Start();
90-
gRequestDisplayScreen = DISPLAY_FM;
91-
} else {
92-
#endif
93-
gRequestDisplayScreen = gScreenToDisplay;
94-
#if defined(ENABLE_FMRADIO)
95-
}
96-
#endif
97-
}
98-
9946
void ACTION_Scan(bool bRestart)
10047
{
10148
#if defined(ENABLE_FMRADIO)
@@ -150,27 +97,44 @@ void ACTION_Vox(void)
15097
gUpdateStatus = true;
15198
}
15299

153-
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
154-
static void ACTION_AlarmOr1750(bool b1750)
100+
static void ACTION_SelectVfo(uint8_t Target)
155101
{
156-
gInputBoxIndex = 0;
157-
#if defined(ENABLE_ALARM) && defined(ENABLE_TX1750)
158-
if (b1750) {
159-
gAlarmState = ALARM_STATE_TX1750;
160-
} else {
161-
gAlarmState = ALARM_STATE_TXALARM;
102+
if (Target > 1) {
103+
return;
162104
}
163-
gAlarmRunningCounter = 0;
164-
#elif defined(ENABLE_ALARM)
165-
gAlarmState = ALARM_STATE_TXALARM;
166-
gAlarmRunningCounter = 0;
167-
#else
168-
gAlarmState = ALARM_STATE_TX1750;
169-
#endif
170-
gFlagPrepareTX = true;
105+
106+
if (gScanState != SCAN_OFF) {
107+
SCANNER_Stop();
108+
gAnotherVoiceID = VOICE_ID_SCANNING_STOP;
109+
}
110+
111+
gWasFKeyPressed = false;
112+
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
113+
gEeprom.DUAL_WATCH = DUAL_WATCH_OFF;
114+
115+
if (gEeprom.TX_VFO == Target && gEeprom.RX_VFO == Target) {
116+
gRequestDisplayScreen = DISPLAY_MAIN;
117+
gUpdateStatus = true;
118+
return;
119+
}
120+
121+
gEeprom.TX_VFO = Target;
122+
gEeprom.RX_VFO = Target;
123+
gTxVfo = &gEeprom.VfoInfo[Target];
124+
gRxVfo = &gEeprom.VfoInfo[Target];
125+
126+
gRequestSaveVFO = true;
127+
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
128+
gFlagResetVfos = true;
129+
gFlagReconfigureVfos = true;
130+
gUpdateStatus = true;
171131
gRequestDisplayScreen = DISPLAY_MAIN;
132+
if (IS_MR_CHANNEL(gEeprom.ScreenChannel[Target])) {
133+
AUDIO_SetVoiceID(0, VOICE_ID_CHANNEL_MODE);
134+
AUDIO_SetDigitVoice(1, gEeprom.ScreenChannel[Target] + 1);
135+
gAnotherVoiceID = (VOICE_ID_t)0xFE;
136+
}
172137
}
173-
#endif
174138

175139
#if defined(ENABLE_FMRADIO)
176140
void ACTION_FM(void)
@@ -195,8 +159,7 @@ void ACTION_FM(void)
195159

196160
void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
197161
{
198-
uint8_t Short;
199-
uint8_t Long;
162+
uint8_t Target;
200163

201164
if (gScreenToDisplay == DISPLAY_MAIN && gDTMF_InputMode) {
202165
if (Key == KEY_SIDE1 && !bKeyHeld && bKeyPressed) {
@@ -218,57 +181,15 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
218181
return;
219182
}
220183

221-
if (Key == KEY_SIDE1) {
222-
Short = gEeprom.KEY_1_SHORT_PRESS_ACTION;
223-
Long = gEeprom.KEY_1_LONG_PRESS_ACTION;
224-
} else {
225-
Short = gEeprom.KEY_2_SHORT_PRESS_ACTION;
226-
Long = gEeprom.KEY_2_LONG_PRESS_ACTION;
227-
}
228-
if (!bKeyHeld && bKeyPressed) {
229-
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
230-
return;
231-
}
232-
if (bKeyHeld || bKeyPressed) {
233-
if (!bKeyHeld) {
184+
if (Key == KEY_SIDE1 || Key == KEY_SIDE2) {
185+
Target = (Key == KEY_SIDE1) ? 0 : 1;
186+
if (!bKeyHeld && bKeyPressed) {
187+
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
234188
return;
235189
}
236-
Short = Long;
237190
if (!bKeyPressed) {
238-
return;
191+
ACTION_SelectVfo(Target);
239192
}
240-
}
241-
switch (Short) {
242-
case 1:
243-
ACTION_FlashLight();
244-
break;
245-
case 2:
246-
ACTION_Power();
247-
break;
248-
case 3:
249-
ACTION_Monitor();
250-
break;
251-
case 4:
252-
ACTION_Scan(true);
253-
break;
254-
case 5:
255-
ACTION_Vox();
256-
break;
257-
case 6:
258-
#if defined(ENABLE_ALARM)
259-
ACTION_AlarmOr1750(false);
260-
#endif
261-
break;
262-
case 7:
263-
#if defined(ENABLE_FMRADIO)
264-
ACTION_FM();
265-
#endif
266-
break;
267-
case 8:
268-
#if defined(ENABLE_TX1750)
269-
ACTION_AlarmOr1750(true);
270-
#endif
271-
break;
193+
return;
272194
}
273195
}
274-

docs/releases/LNR24A5.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
## Loaner Firmware Alpha 5 – LNR24A5
2+
3+
- Map the upper and lower side buttons directly to VFO A and VFO B selection, replacing the old configurable actions.
4+
- Reset dual watch/cross-band overrides when switching so each press reliably focuses the requested channel and announces it via voice prompts.
5+
6+
Artifacts generated via `./compile-with-docker.sh`:
7+
8+
- `compiled-firmware/loaner-firmware-LNR24A5.bin`
9+
- `compiled-firmware/loaner-firmware-LNR24A5.packed.bin`

0 commit comments

Comments
 (0)