From 54711a5971781ed21b7eaec4f8d91d55daaf5483 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Thu, 14 Sep 2023 09:56:30 +0100 Subject: [PATCH] Tidy ups and makefile update --- Makefile | 135 +++++++++++++++----- README.md | 29 +++-- app/action.c | 161 ++++++++++++----------- app/action.h | 6 +- app/aircopy.c | 6 +- app/aircopy.h | 2 +- app/app.c | 304 ++++++++++++++++++++++++++------------------ app/dtmf.c | 17 ++- app/fm.c | 16 ++- app/fm.h | 4 + app/generic.c | 57 ++++++--- app/main.c | 82 +++++++----- app/menu.c | 56 ++++---- app/scanner.c | 18 +-- app/uart.c | 22 +++- audio.c | 54 +++++--- audio.h | 2 +- bitmaps.c | 38 +++--- bitmaps.h | 8 +- board.c | 56 ++++---- driver/bk4819.c | 168 +++++++++++++++++++----- driver/bk4819.h | 2 +- firmware | Bin 171484 -> 164324 bytes firmware.bin | Bin 51640 -> 47396 bytes firmware.packed.bin | Bin 51658 -> 47414 bytes frequencies.c | 8 +- frequencies.h | 2 +- functions.c | 66 +++++----- helper/battery.c | 2 +- helper/battery.h | 24 ++-- helper/boot.c | 12 +- helper/boot.h | 2 +- main.c | 16 ++- misc.c | 24 ++-- misc.h | 28 ++-- radio.c | 42 ++++-- radio.h | 2 +- scheduler.c | 16 ++- settings.c | 62 ++++----- settings.h | 32 +++-- ui/aircopy.c | 2 +- ui/aircopy.h | 2 +- ui/fmradio.c | 5 + ui/fmradio.h | 4 +- ui/main.c | 14 +- ui/menu.c | 22 ++-- ui/menu.h | 6 +- ui/status.c | 90 ++++++------- ui/status.h | 2 +- ui/ui.c | 26 ++-- ui/ui.h | 4 +- ui/welcome.c | 19 ++- version.c | 2 +- 53 files changed, 1092 insertions(+), 687 deletions(-) diff --git a/Makefile b/Makefile index 3909a88..e6fa110 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,20 @@ TARGET = firmware +ENABLE_AIRCOPY := 0 +ENABLE_FMRADIO := 0 +ENABLE_OVERLAY := 1 +ENABLE_UART := 1 +ENABLE_NOAA := 0 +ENABLE_VOICE := 0 +ENABLE_ALARM := 0 +ENABLE_BIG_FREQ := 0 +ENABLE_KEEP_MEM_NAME := 1 +ENABLE_CHAN_NAME_FREQ := 1 +ENABLE_WIDE_RX := 1 +ENABLE_TX_WHEN_AM := 0 +#ENABLE_SINGLE_VFO_CHAN := 1 +#ENABLE_BAND_SCOPE := 1 + BSP_DEFINITIONS := $(wildcard hardware/*/*.def) BSP_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS)) BSP_HEADERS := $(patsubst %.def,%.h,$(BSP_HEADERS)) @@ -8,18 +23,28 @@ OBJS = # Startup files OBJS += start.o OBJS += init.o -OBJS += sram-overlay.o +ifeq ($(ENABLE_OVERLAY),1) + OBJS += sram-overlay.o +endif OBJS += external/printf/printf.o # Drivers OBJS += driver/adc.o -OBJS += driver/aes.o +ifeq ($(ENABLE_UART),1) + OBJS += driver/aes.o +endif OBJS += driver/backlight.o -OBJS += driver/bk1080.o +ifeq ($(ENABLE_FMRADIO),1) + OBJS += driver/bk1080.o +endif OBJS += driver/bk4819.o -OBJS += driver/crc.o +ifeq ($(filter $(ENABLE_AIRCOPY) $(ENABLE_UART),1),1) + OBJS += driver/crc.o +endif OBJS += driver/eeprom.o + ifeq ($(ENABLE_OVERLAY),1) OBJS += driver/flash.o +endif OBJS += driver/gpio.o OBJS += driver/i2c.o OBJS += driver/keyboard.o @@ -27,19 +52,27 @@ OBJS += driver/spi.o OBJS += driver/st7565.o OBJS += driver/system.o OBJS += driver/systick.o -OBJS += driver/uart.o +ifeq ($(ENABLE_UART),1) + OBJS += driver/uart.o +endif # Main OBJS += app/action.o -OBJS += app/aircopy.o +ifeq ($(ENABLE_AIRCOPY),1) + OBJS += app/aircopy.o +endif OBJS += app/app.o OBJS += app/dtmf.o -OBJS += app/fm.o +ifeq ($(ENABLE_FMRADIO),1) + OBJS += app/fm.o +endif OBJS += app/generic.o OBJS += app/main.o OBJS += app/menu.o OBJS += app/scanner.o -OBJS += app/uart.o +ifeq ($(ENABLE_UART),1) + OBJS += app/uart.o +endif OBJS += audio.o OBJS += bitmaps.o OBJS += board.o @@ -53,9 +86,13 @@ OBJS += misc.o OBJS += radio.o OBJS += scheduler.o OBJS += settings.o -OBJS += ui/aircopy.o +ifeq ($(ENABLE_AIRCOPY),1) + OBJS += ui/aircopy.o +endif OBJS += ui/battery.o -OBJS += ui/fmradio.o +ifeq ($(ENABLE_FMRADIO),1) + OBJS += ui/fmradio.o +endif OBJS += ui/helper.o OBJS += ui/inputbox.o OBJS += ui/lock.o @@ -76,38 +113,69 @@ else TOP := $(shell pwd) endif -AS = arm-none-eabi-as -CC = arm-none-eabi-gcc -LD = arm-none-eabi-gcc +AS = arm-none-eabi-gcc +CC = arm-none-eabi-gcc +LD = arm-none-eabi-gcc OBJCOPY = arm-none-eabi-objcopy -SIZE = arm-none-eabi-size +SIZE = arm-none-eabi-size -#GIT_HASH := $(shell git rev-parse --short HEAD) +GIT_HASH := $(shell git rev-parse --short HEAD) -ASFLAGS = -mcpu=cortex-m0 -CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=c11 -MMD -fdata-sections -ffunction-sections +ASFLAGS = -c -mcpu=cortex-m0 +ifeq ($(ENABLE_OVERLAY),1) + ASFLAGS += -DENABLE_OVERLAY +endif +CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=c11 -MMD CFLAGS += -DPRINTF_INCLUDE_CONFIG_H -#CFLAGS += -DGIT_HASH=\"$(GIT_HASH)\" +CFLAGS += -DGIT_HASH=\"$(GIT_HASH)\" +ifeq ($(ENABLE_AIRCOPY),1) + CFLAGS += -DENABLE_AIRCOPY +endif +ifeq ($(ENABLE_FMRADIO),1) + CFLAGS += -DENABLE_FMRADIO +endif +ifeq ($(ENABLE_OVERLAY),1) + CFLAGS += -DENABLE_OVERLAY +endif +ifeq ($(ENABLE_UART),1) + CFLAGS += -DENABLE_UART +endif +ifeq ($(ENABLE_BIG_FREQ),1) + CFLAGS += -DENABLE_BIG_FREQ +endif +ifeq ($(ENABLE_NOAA),1) + CFLAGS += -DENABLE_NOAA +endif +ifeq ($(ENABLE_VOICE),1) + CFLAGS += -DENABLE_VOICE +endif +ifeq ($(ENABLE_ALARM),1) + CFLAGS += -DENABLE_ALARM +endif +ifeq ($(ENABLE_KEEP_MEM_NAME),1) + CFLAGS += -DKEEP_MEM_NAME +endif +ifeq ($(ENABLE_CHAN_NAME_FREQ),1) + CFLAGS += -DENABLE_CHAN_NAME_FREQ +endif +ifeq ($(ENABLE_WIDE_RX),1) + CFLAGS += -DENABLE_WIDE_RX +endif +ifeq ($(ENABLE_TX_WHEN_AM),1) + CFLAGS += -DENABLE_TX_WHEN_AM +endif +ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) + CFLAGS += -DENABLE_SINGLE_VFO_CHAN +endif +ifeq ($(ENABLE_BAND_SCOPE),1) + CFLAGS += -DENABLE_BAND_SCOPE +endif LDFLAGS = -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld -#LDFLAGS = -mcpu=cortex-m0 -nostartfiles -Wl,-gc-sections,-T,firmware.ld - -# compilation options -CFLAGS += -DDISABLE_BIG_FREQ -CFLAGS += -DDISABLE_NOAA -CFLAGS += -DDISABLE_VOICE -CFLAGS += -DDISABLE_AIRCOPY -CFLAGS += -DDISABLE_ALARM -CFLAGS += -DKEEP_MEM_NAME -CFLAGS += -DCHAN_NAME_FREQ -CFLAGS += -DRX_ANY_FREQ -#CFLAGS += -DENABLE_TX_WHEN_AM -#CFLAGS += -DSINGLE_VFO_CHAN -#CFLAGS += -DBAND_SCOPE ifeq ($(DEBUG),1) ASFLAGS += -g - CFLAGS += -g + CFLAGS += -g LDFLAGS += -g endif @@ -151,4 +219,3 @@ bsp/dp32g030/%.h: hardware/dp32g030/%.def clean: rm -f $(TARGET).bin $(TARGET) $(OBJS) $(DEPS) - diff --git a/README.md b/README.md index cfe5e8f..86fae6e 100644 --- a/README.md +++ b/README.md @@ -9,21 +9,24 @@ Am amazing achievement if you ask me ! # User customization This version you can customize at compile time by making various changes to the makefile. -You can edit those changes by (currently) editing the MakeFile, look for these lines .. +You can edit those changes by (currently) editing the MakeFile, look for these lines near the top of the file .. -* CFLAGS += -DDISABLE_BIG_FREQ .. show frequencies using smaller font -* CFLAGS += -DDISABLE_NOAA .. remove NOAA channels option from the firmware -* CFLAGS += -DDISABLE_VOICE .. remove spoken VOICES option from the firmware -* CFLAGS += -DDISABLE_AIRCOPY .. remove AIRCOPY option -* CFLAGS += -DDISABLE_ALARM .. remove the ALARM transmit option from the firmware -* CFLAGS += -DKEEP_MEM_NAME .. keep the memory channels name when re-saving a channel -* CFLAGS += -DCHAN_NAME_FREQ .. show the channel frequency (as well as channel number/name) -* CFLAGS += -DRX_ANY_FREQ .. allow RX on any frequency from 18MHz to 1300MHz -* #CFLAGS += -DENABLE_TX_WHEN_AM .. enable TX when radio set to AM (radio does NOT do AM, the adverts are false) -* #CFLAGS += -DSINGLE_VFO_CHAN .. (not yet implemented) show a single VFO/CHANNEL if dual-watch/cross-band are disabled -* #CFLAGS += -DBAND_SCOPE .. (not yet implemented) add a band scope/spectrum/panadapter option +* ENABLE_AIRCOPY := 0 aircopy +* ENABLE_FMRADIO := 0 FM band 2 radio +* ENABLE_OVERLAY := 1 +* ENABLE_UART := 1 serial port +* ENABLE_NOAA := 0 NOAA channels +* ENABLE_VOICE := 0 voices +* ENABLE_ALARM := 0 TX alarms +* ENABLE_BIG_FREQ := 0 big font for the frequencies +* ENABLE_KEEP_MEM_NAME := 1 maintain the channels name when saving over it +* ENABLE_CHAN_NAME_FREQ := 1 show the channels frequency below the channels name/number +* ENABLE_WIDE_RX := 1 enable the RX in the full 18MHz to 1300MHz range +* ENABLE_TX_WHEN_AM := 0 allow TX when RX set to AM +* #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented +* #ENABLE_BAND_SCOPE := 1 not yet implemented -To enable the custom option just uncomment the line by removing the starting '#'. +To enable the custom option, set the above option to '1' # Other changes made diff --git a/app/action.c b/app/action.c index e2a7788..accdc7c 100644 --- a/app/action.c +++ b/app/action.c @@ -17,11 +17,15 @@ #include "app/action.h" #include "app/app.h" #include "app/dtmf.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/scanner.h" #include "audio.h" #include "bsp/dp32g030/gpio.h" -#include "driver/bk1080.h" +#ifdef ENABLE_FMRADIO + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/gpio.h" #include "functions.h" @@ -54,7 +58,7 @@ void ACTION_Power(void) gRequestSaveChannel = 1; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_POWER; #endif @@ -67,7 +71,7 @@ static void ACTION_Monitor(void) { RADIO_SelectVfos(); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gRxVfo->CHANNEL_SAVE >= NOAA_CHANNEL_FIRST && gIsNoaaMode) gNoaaChannel = gRxVfo->CHANNEL_SAVE - NOAA_CHANNEL_FIRST; #endif @@ -85,7 +89,7 @@ static void ACTION_Monitor(void) gScanPauseMode = true; } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF && gIsNoaaMode) { gNOAA_Countdown = 500; @@ -95,64 +99,69 @@ static void ACTION_Monitor(void) RADIO_SetupRegisters(true); - if (gFmRadioMode) - { - FM_Start(); - gRequestDisplayScreen = DISPLAY_FM; - } - else + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + { + FM_Start(); + gRequestDisplayScreen = DISPLAY_FM; + } + else + #endif gRequestDisplayScreen = gScreenToDisplay; } void ACTION_Scan(bool bRestart) { - if (gFmRadioMode) - { - if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) { - GUI_SelectNextDisplay(DISPLAY_FM); - - if (gFM_ScanState != FM_SCAN_OFF) + if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) { - FM_PlayAndUpdate(); - - #ifndef DISABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; - #endif - } - else - { - uint16_t Frequency; - - if (bRestart) + GUI_SelectNextDisplay(DISPLAY_FM); + + if (gFM_ScanState != FM_SCAN_OFF) { - gFM_AutoScan = true; - gFM_ChannelPosition = 0; - FM_EraseChannels(); - Frequency = gEeprom.FM_LowerLimit; + FM_PlayAndUpdate(); + + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; + #endif } else { - gFM_AutoScan = false; - gFM_ChannelPosition = 0; - Frequency = gEeprom.FM_FrequencyPlaying; + uint16_t Frequency; + + if (bRestart) + { + gFM_AutoScan = true; + gFM_ChannelPosition = 0; + FM_EraseChannels(); + Frequency = gEeprom.FM_LowerLimit; + } + else + { + gFM_AutoScan = false; + gFM_ChannelPosition = 0; + Frequency = gEeprom.FM_FrequencyPlaying; + } + + BK1080_GetFrequencyDeviation(Frequency); + FM_Tune(Frequency, 1, bRestart); + + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_BEGIN; + #endif } - - BK1080_GetFrequencyDeviation(Frequency); - FM_Tune(Frequency, 1, bRestart); - - #ifndef DISABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_BEGIN; - #endif } + return; } - } - else + #endif + if (gScreenToDisplay != DISPLAY_SCANNER) { RADIO_SelectVfos(); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) #endif { @@ -162,7 +171,7 @@ void ACTION_Scan(bool bRestart) { SCANNER_Stop(); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif } @@ -170,7 +179,7 @@ void ACTION_Scan(bool bRestart) { CHANNEL_Next(true, 1); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_PlaySingleVoice(true); #endif @@ -184,13 +193,13 @@ void ACTION_Vox(void) gEeprom.VOX_SWITCH = !gEeprom.VOX_SWITCH; gRequestSaveSettings = true; gFlagReconfigureVfos = true; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_VOX; #endif gUpdateStatus = true; } -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM static void ACTION_AlarmOr1750(bool b1750) { gInputBoxIndex = 0; @@ -201,30 +210,32 @@ void ACTION_Vox(void) } #endif -void ACTION_FM(void) -{ - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR) +#ifdef ENABLE_FMRADIO + void ACTION_FM(void) { - if (gFmRadioMode) + if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR) { - FM_TurnOff(); - + if (gFmRadioMode) + { + FM_TurnOff(); + + gInputBoxIndex = 0; + gVoxResumeCountdown = 80; + gFlagReconfigureVfos = true; + gRequestDisplayScreen = DISPLAY_MAIN; + return; + } + + RADIO_SelectVfos(); + RADIO_SetupRegisters(true); + + FM_Start(); + gInputBoxIndex = 0; - gVoxResumeCountdown = 80; - gFlagReconfigureVfos = true; - gRequestDisplayScreen = DISPLAY_MAIN; - return; + gRequestDisplayScreen = DISPLAY_FM; } - - RADIO_SelectVfos(); - RADIO_SetupRegisters(true); - - FM_Start(); - - gInputBoxIndex = 0; - gRequestDisplayScreen = DISPLAY_FM; } -} +#endif void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { @@ -247,7 +258,7 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif @@ -309,15 +320,17 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) ACTION_Vox(); break; case ACTION_OPT_ALARM: - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM ACTION_AlarmOr1750(false); #endif break; - case ACTION_OPT_FM: - ACTION_FM(); - break; + #ifdef ENABLE_FMRADIO + case ACTION_OPT_FM: + ACTION_FM(); + break; + #endif case ACTION_OPT_1750: - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM ACTION_AlarmOr1750(true); #endif break; diff --git a/app/action.h b/app/action.h index bf1dc0c..49b5e47 100644 --- a/app/action.h +++ b/app/action.h @@ -24,10 +24,12 @@ void ACTION_Power(void); //static void ACTION_Monitor(void) void ACTION_Scan(bool bFlag); void ACTION_Vox(void); -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM //static void ACTION_AlarmOr1750(bool b1750) #endif -void ACTION_FM(void); +#ifdef ENABLE_FMRADIO + void ACTION_FM(void); +#endif void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld); diff --git a/app/aircopy.c b/app/aircopy.c index e293ebf..190a3b6 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -14,7 +14,7 @@ * limitations under the License. */ -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include "app/aircopy.h" #include "audio.h" @@ -124,7 +124,7 @@ static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gRequestDisplayScreen = DISPLAY_AIRCOPY; if (gInputBoxIndex < 6) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif return; @@ -138,7 +138,7 @@ static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { if (Frequency >= LowerLimitFrequencyBandTable[i] && Frequency <= UpperLimitFrequencyBandTable[i]) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gRxVfo->Band = i; diff --git a/app/aircopy.h b/app/aircopy.h index 9eb9b05..d951290 100644 --- a/app/aircopy.h +++ b/app/aircopy.h @@ -17,7 +17,7 @@ #ifndef APP_AIRCOPY_H #define APP_AIRCOPY_H -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include "driver/keyboard.h" diff --git a/app/app.c b/app/app.c index df9f4fa..4d14c83 100644 --- a/app/app.c +++ b/app/app.c @@ -17,12 +17,14 @@ #include #include "app/action.h" -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include "app/aircopy.h" #endif #include "app/app.h" #include "app/dtmf.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/generic.h" #include "app/main.h" #include "app/menu.h" @@ -33,7 +35,9 @@ #include "board.h" #include "bsp/dp32g030/gpio.h" #include "driver/backlight.h" -#include "driver/bk1080.h" +#ifdef ENABLE_FMRADIO + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/keyboard.h" @@ -73,7 +77,7 @@ static void APP_CheckForIncoming(void) if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gIsNoaaMode) { gNOAA_Countdown = 20; @@ -124,7 +128,7 @@ static void APP_HandleIncoming(void) bFlag = (gScanState == SCAN_OFF && gCurrentCodeType == CODE_TYPE_OFF); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && gSystickCountdown2) { bFlag = true; @@ -221,7 +225,7 @@ static void APP_HandleReceive(void) if (g_SquelchLost) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (!gEndOfRxDetectedMaybe && IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) #else if (!gEndOfRxDetectedMaybe) @@ -306,7 +310,7 @@ Skip: case END_OF_RX_MODE_END: RADIO_SetupRegisters(true); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) gSystickCountdown2 = 300; #endif @@ -380,9 +384,11 @@ void APP_StartListening(FUNCTION_Type_t Function) { if (!gSetting_KILLED) { - if (gFmRadioMode) - BK1080_Init(0, false); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Init(0, false); + #endif + gVFO_RSSI_Level[gEeprom.RX_CHANNEL == 0] = 0; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); @@ -414,7 +420,7 @@ void APP_StartListening(FUNCTION_Type_t Function) bScanKeepFrequency = true; } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && gIsNoaaMode) { gRxVfo->CHANNEL_SAVE = gNoaaChannel + NOAA_CHANNEL_FIRST; @@ -445,14 +451,18 @@ void APP_StartListening(FUNCTION_Type_t Function) else BK4819_WriteRegister(BK4819_REG_48, 0xB000 | (gEeprom.VOLUME_GAIN << 4) | (gEeprom.DAC_GAIN << 0)); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gVoiceWriteIndex == 0) #endif BK4819_SetAF(gRxVfo->IsAM ? BK4819_AF_AM : BK4819_AF_OPEN); FUNCTION_Select(Function); - if (Function == FUNCTION_MONITOR || gFmRadioMode) + #ifdef ENABLE_FMRADIO + if (Function == FUNCTION_MONITOR || gFmRadioMode) + #else + if (Function == FUNCTION_MONITOR) + #endif { GUI_SelectNextDisplay(DISPLAY_MAIN); return; @@ -548,7 +558,7 @@ Skip: gCurrentScanList = 0; } -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA static void NOAA_IncreaseChannel(void) { if (++gNoaaChannel > 9) @@ -558,7 +568,7 @@ Skip: static void DUALWATCH_Alternate(void) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gIsNoaaMode) { if (IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[0]) || IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[1])) @@ -580,7 +590,7 @@ static void DUALWATCH_Alternate(void) RADIO_SetupRegisters(false); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA gDualWatchCountdown = gIsNoaaMode ? dual_watch_count_noaa : dual_watch_count_toggle; #else gDualWatchCountdown = dual_watch_count_toggle; @@ -679,7 +689,7 @@ void APP_CheckRadioInterrupts(void) BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false); } - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (interrupt_status_bits & BK4819_REG_02_FSK_FIFO_ALMOST_FULL && gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && @@ -737,8 +747,11 @@ static void APP_HandleVox(void) if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gScanState == SCAN_OFF && - gCssScanMode == CSS_SCAN_MODE_OFF && - !gFmRadioMode) + gCssScanMode == CSS_SCAN_MODE_OFF + #ifdef ENABLE_FMRADIO + && !gFmRadioMode + #endif + ) { if (gVOX_NoiseDetected) { @@ -793,7 +806,7 @@ static void APP_HandleVox(void) void APP_Update(void) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gFlagPlayQueuedVoice) { AUDIO_PlayQueuedVoice(); @@ -821,10 +834,12 @@ void APP_Update(void) if (gCurrentFunction != FUNCTION_TRANSMIT) APP_HandleFunction(); - if (gFmRadioCountdown) - return; + #ifdef ENABLE_FMRADIO + if (gFmRadioCountdown) + return; + #endif - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gScreenToDisplay != DISPLAY_SCANNER && gScanState != SCAN_OFF && gScheduleScanListen && !gPttIsPressed && gVoiceWriteIndex == 0) #else if (gScreenToDisplay != DISPLAY_SCANNER && gScanState != SCAN_OFF && gScheduleScanListen && !gPttIsPressed) @@ -850,7 +865,7 @@ void APP_Update(void) gScheduleScanListen = false; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gCssScanMode == CSS_SCAN_MODE_SCANNING && gScheduleScanListen && gVoiceWriteIndex == 0) #else if (gCssScanMode == CSS_SCAN_MODE_SCANNING && gScheduleScanListen) @@ -860,8 +875,8 @@ void APP_Update(void) gScheduleScanListen = false; } - #ifndef DISABLE_NOAA - #ifndef DISABLE_VOICE + #ifdef ENABLE_NOAA + #ifdef ENABLE_VOICE if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF && gIsNoaaMode && gScheduleNOAA && gVoiceWriteIndex == 0) #else if (gEeprom.DUAL_WATCH == DUAL_WATCH_OFF && gIsNoaaMode && gScheduleNOAA) @@ -877,7 +892,7 @@ void APP_Update(void) if (gScreenToDisplay != DISPLAY_SCANNER && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gScheduleDualWatch && gVoiceWriteIndex == 0) #else if (gScheduleDualWatch) @@ -885,7 +900,11 @@ void APP_Update(void) { if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) { - if (!gPttIsPressed && !gFmRadioMode && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE) + #ifdef ENABLE_FMRADIO + if (!gPttIsPressed && !gFmRadioMode && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE) + #else + if (!gPttIsPressed && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE) + #endif { gScheduleDualWatch = false; @@ -902,24 +921,29 @@ void APP_Update(void) } } - if (gScheduleFM && - gFM_ScanState != FM_SCAN_OFF && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_TRANSMIT) - { - FM_Play(); - gScheduleFM = false; - } - + #ifdef ENABLE_FMRADIO + if (gScheduleFM && + gFM_ScanState != FM_SCAN_OFF && + gCurrentFunction != FUNCTION_MONITOR && + gCurrentFunction != FUNCTION_RECEIVE && + gCurrentFunction != FUNCTION_TRANSMIT) + { + FM_Play(); + gScheduleFM = false; + } + #endif + if (gEeprom.VOX_SWITCH) APP_HandleVox(); if (gSchedulePowerSave) { - #ifndef DISABLE_NOAA - if (gFmRadioMode || - gPttIsPressed || + #ifdef ENABLE_NOAA + if ( + #ifdef ENABLE_FMRADIO + gFmRadioMode || + #endif + gPttIsPressed || gKeyBeingHeld || gEeprom.BATTERY_SAVE == 0 || gScanState != SCAN_OFF || @@ -933,8 +957,11 @@ void APP_Update(void) else gBatterySaveCountdown = battery_save_count; #else - if (gFmRadioMode || - gPttIsPressed || + if ( + #ifdef ENABLE_FMRADIO + gFmRadioMode || + #endif + gPttIsPressed || gKeyBeingHeld || gEeprom.BATTERY_SAVE == 0 || gScanState != SCAN_OFF || @@ -949,7 +976,7 @@ void APP_Update(void) gSchedulePowerSave = false; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gBatterySaveCountdownExpired && gCurrentFunction == FUNCTION_POWER_SAVE && gVoiceWriteIndex == 0) #else if (gBatterySaveCountdownExpired && gCurrentFunction == FUNCTION_POWER_SAVE) @@ -1007,7 +1034,7 @@ void APP_CheckKeys(void) const uint16_t key_repeat_delay = 60; // 600ms KEY_Code_t Key; - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (gSetting_KILLED || (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY)) return; #else @@ -1148,7 +1175,7 @@ void APP_TimeSlice10ms(void) { if (gUpdateStatus) { - UI_DisplayStatus(); + UI_DisplayStatus(false); gUpdateStatus = false; } @@ -1161,21 +1188,23 @@ void APP_TimeSlice10ms(void) // Skipping authentic device checks - if (gFmRadioCountdown) - return; - + #ifdef ENABLE_FMRADIO + if (gFmRadioCountdown > 0) + return; + #endif + if (gFlashLightState == FLASHLIGHT_BLINK && (gFlashLightBlinkCounter & 15u) == 0) GPIO_FlipBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); - if (gVoxResumeCountdown) + if (gVoxResumeCountdown > 0) gVoxResumeCountdown--; - if (gVoxPauseCountdown) + if (gVoxPauseCountdown > 0) gVoxPauseCountdown--; if (gCurrentFunction == FUNCTION_TRANSMIT) { - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_TXALARM || gAlarmState == ALARM_STATE_ALARM) { uint16_t Tone; @@ -1233,15 +1262,17 @@ void APP_TimeSlice10ms(void) } } - if (gFmRadioMode && gFM_RestoreCountdown) - { - if (--gFM_RestoreCountdown == 0) + #ifdef ENABLE_FMRADIO + if (gFmRadioMode && gFM_RestoreCountdown > 0) { - FM_Start(); - GUI_SelectNextDisplay(DISPLAY_FM); + if (--gFM_RestoreCountdown == 0) + { + FM_Start(); + GUI_SelectNextDisplay(DISPLAY_FM); + } } - } - + #endif + if (gScreenToDisplay == DISPLAY_SCANNER) { uint32_t Result; @@ -1311,10 +1342,10 @@ void APP_TimeSlice10ms(void) const uint8_t Code = DCS_GetCdcssCode(Result); if (Code != 0xFF) { - gScanCssResultCode = Code; - gScanCssResultType = CODE_TYPE_DIGITAL; - gScanCssState = SCAN_CSS_STATE_FOUND; - gScanUseCssResult = true; + gScanCssResultCode = Code; + gScanCssResultType = CODE_TYPE_DIGITAL; + gScanCssState = SCAN_CSS_STATE_FOUND; + gScanUseCssResult = true; } } else @@ -1354,10 +1385,10 @@ void APP_TimeSlice10ms(void) } } - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 1) { - if (gAircopySendCountdown) + if (gAircopySendCountdown > 0) { if (--gAircopySendCountdown == 0) { @@ -1382,12 +1413,14 @@ void APP_TimeSlice500ms(void) // Skipped authentic device check - if (gFmRadioCountdown > 0) - { - gFmRadioCountdown--; - return; - } - + #ifdef ENABLE_FMRADIO + if (gFmRadioCountdown > 0) + { + gFmRadioCountdown--; + return; + } + #endif + if (gReducedService) { BOARD_ADC_GetBatteryInfo(&gBatteryCurrentVoltage, &gBatteryCurrent); @@ -1418,7 +1451,11 @@ void APP_TimeSlice500ms(void) UI_UpdateRSSI(gCurrentRSSI); } - if ((gFM_ScanState == FM_SCAN_OFF || gAskToSave) && gCssScanMode == CSS_SCAN_MODE_OFF) + #ifdef ENABLE_FMRADIO + if ((gFM_ScanState == FM_SCAN_OFF || gAskToSave) && gCssScanMode == CSS_SCAN_MODE_OFF) + #else + if (gAskToSave && gCssScanMode == CSS_SCAN_MODE_OFF) + #endif { if (gBacklightCountdown > 0) @@ -1426,7 +1463,7 @@ void APP_TimeSlice500ms(void) if (gEeprom.BACKLIGHT < 5) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn backlight off - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (gScanState == SCAN_OFF && gScreenToDisplay != DISPLAY_AIRCOPY && (gScreenToDisplay != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) #else if (gScanState == SCAN_OFF && (gScreenToDisplay != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND)) @@ -1465,9 +1502,11 @@ void APP_TimeSlice500ms(void) gAskToSave = false; gAskToDelete = false; - if (gFmRadioMode && gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) - GUI_SelectNextDisplay(DISPLAY_FM); + #ifdef ENABLE_FMRADIO + if (gFmRadioMode && gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) + GUI_SelectNextDisplay(DISPLAY_FM); else + #endif GUI_SelectNextDisplay(DISPLAY_MAIN); } } @@ -1476,19 +1515,21 @@ void APP_TimeSlice500ms(void) } - if (!gPttIsPressed && gFM_ResumeCountdown) - { - if (--gFM_ResumeCountdown == 0) + #ifdef ENABLE_FMRADIO + if (!gPttIsPressed && gFM_ResumeCountdown > 0) { - RADIO_SetVfoState(VFO_STATE_NORMAL); - if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR && gFmRadioMode) + if (--gFM_ResumeCountdown == 0) { - FM_Start(); - GUI_SelectNextDisplay(DISPLAY_FM); + RADIO_SetVfoState(VFO_STATE_NORMAL); + if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR && gFmRadioMode) + { + FM_Start(); + GUI_SelectNextDisplay(DISPLAY_FM); + } } } - } - + #endif + if (gLowBattery) { gLowBatteryBlink = ++gLowBatteryCountdown & 1; @@ -1510,24 +1551,26 @@ void APP_TimeSlice500ms(void) { AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_LOW_VOLTAGE); #endif if (gBatteryDisplayLevel == 0) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_PlaySingleVoice(true); #endif gReducedService = true; + FUNCTION_Select(FUNCTION_POWER_SAVE); + ST7565_Configure_GPIO_B11(); //if (gEeprom.BACKLIGHT < 5) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE else AUDIO_PlaySingleVoice(false); #endif @@ -1550,7 +1593,7 @@ void APP_TimeSlice500ms(void) if (gDTMF_CallState != DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) { - if (gDTMF_AUTO_RESET_TIME) + if (gDTMF_AUTO_RESET_TIME > 0) { if (--gDTMF_AUTO_RESET_TIME == 0) { @@ -1559,7 +1602,7 @@ void APP_TimeSlice500ms(void) } } - if (gDTMF_DecodeRing && gDTMF_DecodeRingCountdown) + if (gDTMF_DecodeRing && gDTMF_DecodeRingCountdown > 0) { if ((--gDTMF_DecodeRingCountdown % 3) == 0) AUDIO_PlayBeep(BEEP_440HZ_500MS); @@ -1569,7 +1612,7 @@ void APP_TimeSlice500ms(void) } } - if (gDTMF_IsTx && gDTMF_TxStopCountdown) + if (gDTMF_IsTx && gDTMF_TxStopCountdown > 0) { if (--gDTMF_TxStopCountdown == 0) { @@ -1578,7 +1621,7 @@ void APP_TimeSlice500ms(void) } } - if (gDTMF_RecvTimeout) + if (gDTMF_RecvTimeout > 0) { if (--gDTMF_RecvTimeout == 0) { @@ -1588,7 +1631,7 @@ void APP_TimeSlice500ms(void) } } -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM static void ALARM_Off(void) { gAlarmState = ALARM_STATE_OFF; @@ -1664,12 +1707,14 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gFlagSaveSettings = false; } - if (gFlagSaveFM) - { - SETTINGS_SaveFM(); - gFlagSaveFM = false; - } - + #ifdef ENABLE_FMRADIO + if (gFlagSaveFM) + { + SETTINGS_SaveFM(); + gFlagSaveFM = false; + } + #endif + if (gFlagSaveChannel) { SETTINGS_SaveChannel(gTxVfo->CHANNEL_SAVE, gEeprom.TX_CHANNEL, gTxVfo, gFlagSaveChannel); @@ -1711,7 +1756,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { // keypad is locked, tell the user AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - gKeypadLocked = 4; + gKeypadLocked = 4; // 2 seconds gUpdateDisplay = true; return; } @@ -1724,7 +1769,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) // keypad is locked, tell the user AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - gKeypadLocked = 4; + gKeypadLocked = 4; // 2 seconds gUpdateDisplay = true; return; } @@ -1735,7 +1780,8 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) Key != KEY_UP && Key != KEY_DOWN && Key != KEY_EXIT && - Key != KEY_STAR) || + Key != KEY_STAR) + || (gCssScanMode != CSS_SCAN_MODE_OFF && Key != KEY_PTT && Key != KEY_UP && @@ -1787,8 +1833,9 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (!bFlag) { if (gCurrentFunction == FUNCTION_TRANSMIT) - { - #ifndef DISABLE_ALARM + { // transmitting + + #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_OFF) #endif { @@ -1811,7 +1858,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) goto Skip; } - if (bKeyHeld || !bKeyPressed) + if (!bKeyPressed || bKeyHeld) { if (!bKeyPressed) { @@ -1844,7 +1891,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } } - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM else if (!bKeyHeld && bKeyPressed) { @@ -1870,31 +1917,36 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) case DISPLAY_MAIN: MAIN_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; - case DISPLAY_FM: - FM_ProcessKeys(Key, bKeyPressed, bKeyHeld); - break; + #ifdef ENABLE_FMRADIO + case DISPLAY_FM: + FM_ProcessKeys(Key, bKeyPressed, bKeyHeld); + break; + #endif case DISPLAY_MENU: MENU_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; case DISPLAY_SCANNER: SCANNER_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY case DISPLAY_AIRCOPY: AIRCOPY_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; #endif + case DISPLAY_INVALID: default: break; } } else - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (gScreenToDisplay != DISPLAY_SCANNER && gScreenToDisplay != DISPLAY_AIRCOPY) #else if (gScreenToDisplay != DISPLAY_SCANNER) #endif + { ACTION_Handle(Key, bKeyPressed, bKeyHeld); + } else if (!bKeyHeld && bKeyPressed) gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; @@ -1926,21 +1978,21 @@ Skip: SETTINGS_SaveSettings(); else gFlagSaveSettings = 1; - gRequestSaveSettings = false; gUpdateStatus = true; } - if (gRequestSaveFM) - { - if (!bKeyHeld) - SETTINGS_SaveFM(); - else - gFlagSaveFM = true; - - gRequestSaveFM = false; - } - + #ifdef ENABLE_FMRADIO + if (gRequestSaveFM) + { + if (!bKeyHeld) + SETTINGS_SaveFM(); + else + gFlagSaveFM = true; + gRequestSaveFM = false; + } + #endif + if (gRequestSaveVFO) { if (!bKeyHeld) @@ -1977,9 +2029,7 @@ Skip: RADIO_ConfigureChannel(1, gVfoConfigureMode); } else - { RADIO_ConfigureChannel(gEeprom.TX_CHANNEL, gVfoConfigureMode); - } if (gRequestDisplayScreen == DISPLAY_INVALID) gRequestDisplayScreen = DISPLAY_MAIN; @@ -1992,9 +2042,11 @@ Skip: if (gFlagReconfigureVfos) { RADIO_SelectVfos(); - #ifndef DISABLE_NOAA + + #ifdef ENABLE_NOAA RADIO_ConfigureNOAA(); #endif + RADIO_SetupRegisters(true); gDTMF_AUTO_RESET_TIME = 0; @@ -2016,7 +2068,7 @@ Skip: if (gFlagStartScan) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_PlaySingleVoice(true); #endif @@ -2033,7 +2085,7 @@ Skip: gFlagPrepareTX = false; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gAnotherVoiceID != VOICE_ID_INVALID) { if (gAnotherVoiceID < 76) diff --git a/app/dtmf.c b/app/dtmf.c index 6ea401d..8aba4f4 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -16,7 +16,9 @@ #include -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/scanner.h" #include "bsp/dp32g030/gpio.h" #include "driver/bk4819.h" @@ -213,11 +215,14 @@ void DTMF_HandleRequest(void) gSetting_KILLED = true; SETTINGS_SaveSettings(); gDTMF_ReplyState = DTMF_REPLY_AB; - if (gFmRadioMode) - { - FM_TurnOff(); - GUI_SelectNextDisplay(DISPLAY_MAIN); - } + + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + { + FM_TurnOff(); + GUI_SelectNextDisplay(DISPLAY_MAIN); + } + #endif } else { diff --git a/app/fm.c b/app/fm.c index f2446b6..56eb4ba 100644 --- a/app/fm.c +++ b/app/fm.c @@ -14,6 +14,8 @@ * limitations under the License. */ +#ifdef ENABLE_FMRADIO + #include #include "app/action.h" @@ -284,7 +286,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gEeprom.FM_SelectedFrequency = (uint16_t)Frequency; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif @@ -306,7 +308,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { if (FM_CheckValidChannel(Channel)) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gEeprom.FM_SelectedChannel = Channel; @@ -319,7 +321,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) else if (Channel < 20) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gRequestDisplayScreen = DISPLAY_FM; @@ -332,7 +334,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif @@ -422,14 +424,14 @@ static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) gInputBoxIndex = 0; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif } else { FM_PlayAndUpdate(); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif } @@ -660,3 +662,5 @@ void FM_Start(void) gEnableSpeaker = true; gUpdateStatus = true; } + +#endif diff --git a/app/fm.h b/app/fm.h index 1c0b9e8..eef7b6f 100644 --- a/app/fm.h +++ b/app/fm.h @@ -17,6 +17,8 @@ #ifndef APP_FM_H #define APP_FM_H +#ifdef ENABLE_FMRADIO + #include "driver/keyboard.h" #define FM_CHANNEL_UP 0x01 @@ -57,3 +59,5 @@ void FM_Start(void); #endif +#endif + diff --git a/app/generic.c b/app/generic.c index 98e0248..78f5646 100644 --- a/app/generic.c +++ b/app/generic.c @@ -17,7 +17,9 @@ #include #include "app/app.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/generic.h" #include "app/menu.h" #include "app/scanner.h" @@ -50,7 +52,7 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) if (!bKeyPressed) return; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = gEeprom.KEY_LOCK ? VOICE_ID_UNLOCK : VOICE_ID_LOCK; #endif @@ -59,12 +61,17 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) } else { - if ((gFmRadioMode || gScreenToDisplay != DISPLAY_MAIN) && gScreenToDisplay != DISPLAY_FM) - return; + #ifdef ENABLE_FMRADIO + if ((gFmRadioMode || gScreenToDisplay != DISPLAY_MAIN) && gScreenToDisplay != DISPLAY_FM) + return; + #else + if (gScreenToDisplay != DISPLAY_MAIN) + return; + #endif gWasFKeyPressed = !gWasFKeyPressed; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (!gWasFKeyPressed) gAnotherVoiceID = VOICE_ID_CANCEL; #endif @@ -79,12 +86,14 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; return; } - - if (gFM_ScanState == FM_SCAN_OFF) - { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - return; - } + + #ifdef ENABLE_FMRADIO + if (gFM_ScanState == FM_SCAN_OFF) + { + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + return; + } + #endif gBeepToPlay = BEEP_440HZ_500MS; gPttWasReleased = true; @@ -139,11 +148,17 @@ void GENERIC_Key_PTT(bool bKeyPressed) return; } - if (gFM_ScanState == FM_SCAN_OFF) + #ifdef ENABLE_FMRADIO + if (gFM_ScanState == FM_SCAN_OFF) + #endif { if (gCssScanMode == CSS_SCAN_MODE_OFF) { - if (gScreenToDisplay == DISPLAY_MENU || gScreenToDisplay == DISPLAY_FM) + #ifdef ENABLE_FMRADIO + if (gScreenToDisplay == DISPLAY_MENU || gScreenToDisplay == DISPLAY_FM) + #else + if (gScreenToDisplay == DISPLAY_MENU) + #endif { gRequestDisplayScreen = DISPLAY_MAIN; gInputBoxIndex = 0; @@ -210,13 +225,15 @@ void GENERIC_Key_PTT(bool bKeyPressed) gRequestDisplayScreen = DISPLAY_MENU; } } - else - { - FM_PlayAndUpdate(); - gRequestDisplayScreen = DISPLAY_FM; - } - - #ifndef DISABLE_VOICE + #ifdef ENABLE_FMRADIO + else + { + FM_PlayAndUpdate(); + gRequestDisplayScreen = DISPLAY_FM; + } + #endif + + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif diff --git a/app/main.c b/app/main.c index 94e5ed3..830b711 100644 --- a/app/main.c +++ b/app/main.c @@ -18,7 +18,9 @@ #include "app/action.h" #include "app/app.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/generic.h" #include "app/main.h" #include "app/scanner.h" @@ -31,6 +33,10 @@ #include "ui/inputbox.h" #include "ui/ui.h" +//#ifndef ARRAY_SIZE +// #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +//#endif + static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { uint8_t Band; @@ -55,7 +61,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gInputBoxIndex != 3) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gRequestDisplayScreen = DISPLAY_MAIN; @@ -71,7 +77,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gEeprom.MrChannel[Vfo] = (uint8_t)Channel; @@ -81,7 +87,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) #endif { @@ -89,7 +95,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gInputBoxIndex < 6) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif return; @@ -106,7 +112,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { if (Frequency >= LowerLimitFrequencyBandTable[i] && Frequency <= UpperLimitFrequencyBandTable[i]) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif @@ -132,14 +138,14 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA else { uint8_t Channel; if (gInputBoxIndex != 2) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gRequestDisplayScreen = DISPLAY_MAIN; @@ -152,7 +158,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (Channel >= 1 && Channel <= 10) { Channel += NOAA_CHANNEL_FIRST; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gEeprom.NoaaChannel[Vfo] = Channel; @@ -175,7 +181,9 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) switch (Key) { case KEY_0: - ACTION_FM(); + #ifdef ENABLE_FMRADIO + ACTION_FM(); + #endif break; case KEY_1: @@ -227,7 +235,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) break; case KEY_3: - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gEeprom.VFO_OPEN && IS_NOT_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) #else if (gEeprom.VFO_OPEN) @@ -238,7 +246,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE)) { gEeprom.ScreenChannel[Vfo] = gEeprom.FreqChannel[gEeprom.TX_CHANNEL]; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_FREQUENCY_MODE; #endif gRequestSaveVFO = true; @@ -250,7 +258,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (Channel != 0xFF) { gEeprom.ScreenChannel[Vfo] = Channel; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_CHANNEL_MODE); AUDIO_SetDigitVoice(1, Channel + 1); gAnotherVoiceID = (VOICE_ID_t)0xFE; @@ -276,7 +284,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) case KEY_5: // TODO: something wrong here !! - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) { gEeprom.ScreenChannel[Vfo] = gEeprom.NoaaChannel[gEeprom.TX_CHANNEL]; @@ -284,14 +292,14 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) else { gEeprom.ScreenChannel[Vfo] = gEeprom.FreqChannel[gEeprom.TX_CHANNEL]; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_FREQUENCY_MODE; #endif } #else //gEeprom.ScreenChannel[Vfo] = gEeprom.NoaaChannel[gEeprom.TX_CHANNEL]; gEeprom.ScreenChannel[Vfo] = gEeprom.FreqChannel[gEeprom.TX_CHANNEL]; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_FREQUENCY_MODE; #endif #endif @@ -318,7 +326,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { gEeprom.MrChannel[Vfo] = gEeprom.CHAN_1_CALL; gEeprom.ScreenChannel[Vfo] = gEeprom.CHAN_1_CALL; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_CHANNEL_MODE); AUDIO_SetDigitVoice(1, gEeprom.CHAN_1_CALL + 1); gAnotherVoiceID = (VOICE_ID_t)0xFE; @@ -345,7 +353,9 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) { gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - if (!gFmRadioMode) + #ifdef ENABLE_FMRADIO + if (!gFmRadioMode) + #endif { if (gScanState == SCAN_OFF) { @@ -353,7 +363,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) return; gInputBox[--gInputBoxIndex] = 10; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gInputBoxIndex == 0) gAnotherVoiceID = VOICE_ID_CANCEL; #endif @@ -362,7 +372,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) { SCANNER_Stop(); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif } @@ -371,7 +381,9 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) return; } - ACTION_FM(); + #ifdef ENABLE_FMRADIO + ACTION_FM(); + #endif } } @@ -388,7 +400,7 @@ static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld) { gFlagRefreshSetting = true; gRequestDisplayScreen = DISPLAY_MENU; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_MENU; #endif } @@ -422,7 +434,7 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld) return; } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gScanState == SCAN_OFF && IS_NOT_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) #else if (gScanState == SCAN_OFF) @@ -447,7 +459,7 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld) gWasFKeyPressed = false; gUpdateStatus = true; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) { gFlagStartScan = true; @@ -487,7 +499,7 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (IS_FREQ_CHANNEL(Channel)) return; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetDigitVoice(0, gTxVfo->CHANNEL_SAVE + 1); gAnotherVoiceID = (VOICE_ID_t)0xFE; #endif @@ -507,7 +519,7 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (gScanState == SCAN_OFF) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) #endif { @@ -532,13 +544,13 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) if (!bKeyHeld) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetDigitVoice(0, Next + 1); gAnotherVoiceID = (VOICE_ID_t)0xFE; #endif } } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA else { Channel = NOAA_CHANNEL_FIRST + NUMBER_AddWithWraparound(gEeprom.ScreenChannel[gEeprom.TX_CHANNEL] - NOAA_CHANNEL_FIRST, Direction, 0, 9); @@ -559,12 +571,14 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { - if (gFmRadioMode && Key != KEY_PTT && Key != KEY_EXIT) - { - if (!bKeyHeld && bKeyPressed) - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - return; - } + #ifdef ENABLE_FMRADIO + if (gFmRadioMode && Key != KEY_PTT && Key != KEY_EXIT) + { + if (!bKeyHeld && bKeyPressed) + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + return; + } + #endif if (gDTMF_InputMode && !bKeyHeld && bKeyPressed) { diff --git a/app/menu.c b/app/menu.c index cd613ae..655bbcd 100644 --- a/app/menu.c +++ b/app/menu.c @@ -34,7 +34,7 @@ #include "ui/menu.h" #include "ui/ui.h" -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE static const VOICE_ID_t MenuVoices[] = { VOICE_ID_SQUELCH, @@ -57,7 +57,7 @@ VOICE_ID_INVALID, VOICE_ID_BEEP_PROMPT, VOICE_ID_TRANSMIT_OVER_TIME, -// #ifndef DISABLE_VOICE +// #ifdef ENABLE_VOICE VOICE_ID_VOICE_PROMPT, // #endif VOICE_ID_INVALID, @@ -72,7 +72,7 @@ VOICE_ID_INVALID, VOICE_ID_INVALID, VOICE_ID_INVALID, - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM VOICE_ID_INVALID, #endif VOICE_ID_ANI_CODE, @@ -89,7 +89,7 @@ VOICE_ID_INVALID, VOICE_ID_INVALID, VOICE_ID_INVALID, - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA VOICE_ID_INVALID, #endif VOICE_ID_DELETE_CHANNEL, @@ -149,7 +149,7 @@ int MENU_GetLimits(uint8_t Cursor, uint8_t *pMin, uint8_t *pMax) break; case MENU_MDF: - #ifdef CHAN_NAME_FREQ + #ifdef ENABLE_CHAN_NAME_FREQ *pMin = 0; *pMax = 3; break; @@ -161,7 +161,7 @@ int MENU_GetLimits(uint8_t Cursor, uint8_t *pMin, uint8_t *pMax) case MENU_SFT_D: case MENU_TDR: case MENU_XB: - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE case MENU_VOICE: #endif case MENU_SC_REV: @@ -190,13 +190,13 @@ int MENU_GetLimits(uint8_t Cursor, uint8_t *pMin, uint8_t *pMax) case MENU_S_ADD1: case MENU_S_ADD2: case MENU_STE: - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM case MENU_AL_MOD: #endif case MENU_D_ST: case MENU_D_DCD: case MENU_AM: - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA case MENU_NOAA_S: #endif case MENU_RESET: @@ -420,7 +420,7 @@ void MENU_AcceptSetting(void) return; case MENU_XB: - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(gEeprom.ScreenChannel[0])) return; if (IS_NOAA_CHANNEL(gEeprom.ScreenChannel[1])) @@ -441,7 +441,7 @@ void MENU_AcceptSetting(void) gEeprom.TX_TIMEOUT_TIMER = gSubMenuSelection; break; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE case MENU_VOICE: gEeprom.VOICE_PROMPT = gSubMenuSelection; gRequestSaveSettings = true; @@ -499,7 +499,7 @@ void MENU_AcceptSetting(void) gEeprom.SCAN_LIST_DEFAULT = gSubMenuSelection - 1; break; - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM case MENU_AL_MOD: gEeprom.ALARM_MODE = gSubMenuSelection; break; @@ -556,7 +556,7 @@ void MENU_AcceptSetting(void) gRequestSaveChannel = 2; return; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA case MENU_NOAA_S: gEeprom.NOAA_AUTO_SCAN = gSubMenuSelection; gRequestSaveSettings = true; @@ -779,7 +779,7 @@ void MENU_ShowCurrentSetting(void) gSubMenuSelection = gEeprom.TX_TIMEOUT_TIMER; break; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE case MENU_VOICE: gSubMenuSelection = gEeprom.VOICE_PROMPT; break; @@ -833,7 +833,7 @@ void MENU_ShowCurrentSetting(void) gSubMenuSelection = RADIO_FindNextChannel(0, 1, true, 1); break; - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM case MENU_AL_MOD: gSubMenuSelection = gEeprom.ALARM_MODE; break; @@ -879,7 +879,7 @@ void MENU_ShowCurrentSetting(void) gSubMenuSelection = gTxVfo->AM_CHANNEL_MODE; break; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA case MENU_NOAA_S: gSubMenuSelection = gEeprom.NOAA_AUTO_SCAN; break; @@ -971,7 +971,7 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gInputBoxIndex < 6) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif return; @@ -980,7 +980,7 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gInputBoxIndex = 0; NUMBER_Get(gInputBox, &Frequency); Frequency += 75; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gSubMenuSelection = FREQUENCY_FloorToStep(Frequency, gTxVfo->StepFrequency, 0); @@ -991,7 +991,7 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { if (gInputBoxIndex < 3) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gRequestDisplayScreen = DISPLAY_MENU; @@ -1004,7 +1004,7 @@ static void MENU_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (IS_MR_CHANNEL(Value)) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gSubMenuSelection = Value; @@ -1066,7 +1066,7 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) gIsInSubMenu = false; gInputBoxIndex = 0; gFlagRefreshSetting = true; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif } @@ -1077,7 +1077,7 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) return; } - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif gRequestDisplayScreen = DISPLAY_MAIN; @@ -1085,7 +1085,7 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld) else { MENU_StopCssScan(); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif gRequestDisplayScreen = DISPLAY_MENU; @@ -1104,7 +1104,7 @@ static void MENU_Key_MENU(bool bKeyPressed, bool bKeyHeld) if (!gIsInSubMenu) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gMenuCursor != MENU_SCR) gAnotherVoiceID = MenuVoices[gMenuCursor]; #endif @@ -1128,7 +1128,7 @@ static void MENU_Key_MENU(bool bKeyPressed, bool bKeyHeld) if (gMenuCursor == MENU_RESET) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_CONFIRM); AUDIO_PlaySingleVoice(true); #endif @@ -1149,7 +1149,7 @@ static void MENU_Key_MENU(bool bKeyPressed, bool bKeyHeld) gCssScanMode = CSS_SCAN_MODE_OFF; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE if (gMenuCursor == MENU_SCR) gAnotherVoiceID = (gSubMenuSelection == 0) ? VOICE_ID_SCRAMBLER_OFF : VOICE_ID_SCRAMBLER_ON; else @@ -1169,7 +1169,7 @@ static void MENU_Key_STAR(bool bKeyPressed, bool bKeyHeld) RADIO_SelectVfos(); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && !gRxVfo->IsAM) #else if (!gRxVfo->IsAM) @@ -1181,7 +1181,7 @@ static void MENU_Key_STAR(bool bKeyPressed, bool bKeyHeld) { MENU_StartCssScan(1); gRequestDisplayScreen = DISPLAY_MENU; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_PlaySingleVoice(1); #endif @@ -1190,7 +1190,7 @@ static void MENU_Key_STAR(bool bKeyPressed, bool bKeyHeld) { MENU_StopCssScan(); gRequestDisplayScreen = DISPLAY_MENU; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif } diff --git a/app/scanner.c b/app/scanner.c index e77b380..299cc26 100644 --- a/app/scanner.c +++ b/app/scanner.c @@ -57,7 +57,7 @@ static void SCANNER_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gInputBoxIndex < 3) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif return; @@ -68,7 +68,7 @@ static void SCANNER_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (IS_MR_CHANNEL(Channel)) { - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif gShowChPrefix = RADIO_CheckValidChannel(Channel, false, 0); @@ -96,7 +96,7 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld) gFlagStopScan = true; gVfoConfigureMode = VFO_CONFIGURE_RELOAD; gFlagResetVfos = true; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif break; @@ -113,7 +113,7 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld) case 2: gScannerEditState = 0; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif gRequestDisplayScreen = DISPLAY_SCANNER; @@ -203,7 +203,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) } gScanCssState = SCAN_CSS_STATE_FOUND; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_MEMORY_CHANNEL; #endif gRequestDisplayScreen = DISPLAY_SCANNER; @@ -256,7 +256,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) gTxVfo->CHANNEL_SAVE = Channel; gEeprom.ScreenChannel[gEeprom.TX_CHANNEL] = Channel; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CONFIRM; #endif gRequestDisplayScreen = DISPLAY_SCANNER; @@ -356,9 +356,9 @@ void SCANNER_Start(void) RADIO_SelectVfos(); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) - gRxVfo->CHANNEL_SAVE = FREQ_CHANNEL_FIRST + 5; + gRxVfo->CHANNEL_SAVE = FREQ_CHANNEL_FIRST + BAND6_400MHz; #endif BackupStep = gRxVfo->STEP_SETTING; @@ -371,7 +371,7 @@ void SCANNER_Start(void) RADIO_SetupRegisters(true); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA gIsNoaaMode = false; #endif diff --git a/app/uart.c b/app/uart.c index eed9b04..60dbd38 100644 --- a/app/uart.c +++ b/app/uart.c @@ -16,7 +16,9 @@ #include -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/uart.h" #include "board.h" #include "bsp/dp32g030/dma.h" @@ -215,7 +217,9 @@ static void CMD_0514(const uint8_t *pBuffer) const CMD_0514_t *pCmd = (const CMD_0514_t *)pBuffer; Timestamp = pCmd->Timestamp; - gFmRadioCountdown = 4; + #ifdef ENABLE_FMRADIO + gFmRadioCountdown = 4; + #endif GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); SendVersion(); } @@ -230,7 +234,9 @@ static void CMD_051B(const uint8_t *pBuffer) return; } - gFmRadioCountdown = 4; + #ifdef ENABLE_FMRADIO + gFmRadioCountdown = 4; + #endif memset(&Reply, 0, sizeof(Reply)); Reply.Header.ID = 0x051C; Reply.Header.Size = pCmd->Size + 4; @@ -261,7 +267,9 @@ static void CMD_051D(const uint8_t *pBuffer) bReloadEeprom = false; - gFmRadioCountdown = 4; + #ifdef ENABLE_FMRADIO + gFmRadioCountdown = 4; + #endif Reply.Header.ID = 0x051E; Reply.Header.Size = sizeof(Reply.Data); Reply.Data.Offset = pCmd->Offset; @@ -326,7 +334,9 @@ static void CMD_052D(const uint8_t *pBuffer) REPLY_052D_t Reply; bool bIsLocked; - gFmRadioCountdown = 4; + #ifdef ENABLE_FMRADIO + gFmRadioCountdown = 4; + #endif Reply.Header.ID = 0x052E; Reply.Header.Size = sizeof(Reply.Data); @@ -369,7 +379,7 @@ static void CMD_052F(const uint8_t *pBuffer) gEeprom.VfoInfo[0].DTMF_PTT_ID_TX_MODE = PTT_ID_OFF; gEeprom.VfoInfo[0].DTMF_DECODING_ENABLE = false; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA gIsNoaaMode = false; #endif diff --git a/audio.c b/audio.c index fae8e95..1b8c0e4 100644 --- a/audio.c +++ b/audio.c @@ -14,10 +14,14 @@ * limitations under the License. */ -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "audio.h" #include "bsp/dp32g030/gpio.h" -#include "driver/bk1080.h" +#ifdef ENABLE_FMRADIO + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/system.h" @@ -27,7 +31,7 @@ #include "settings.h" #include "ui/ui.h" -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE static const uint8_t VoiceClipLengthChinese[58] = { @@ -75,7 +79,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (Beep != BEEP_500HZ_60MS_DOUBLE_BEEP && Beep != BEEP_440HZ_500MS && !gEeprom.BEEP_CONTROL) return; - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (gScreenToDisplay == DISPLAY_AIRCOPY) return; #endif @@ -93,9 +97,11 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (gCurrentFunction == FUNCTION_POWER_SAVE && gRxIdleMode) BK4819_RX_TurnOn(); - if (gFmRadioMode) - BK1080_Mute(true); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Mute(true); + #endif + SYSTEM_DelayMs(20); switch (Beep) @@ -155,14 +161,16 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (gEnableSpeaker) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - if (gFmRadioMode) - BK1080_Mute(false); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Mute(false); + #endif + if (gCurrentFunction == FUNCTION_POWER_SAVE && gRxIdleMode) BK4819_Sleep(); } -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE void AUDIO_PlayVoice(uint8_t VoiceID) { @@ -217,9 +225,11 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR) BK4819_SetAF(BK4819_AF_MUTE); - if (gFmRadioMode) - BK1080_Mute(true); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Mute(true); + #endif + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); gVoxResumeCountdown = 2000; SYSTEM_DelayMs(5); @@ -240,9 +250,11 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) BK4819_SetAF(BK4819_AF_OPEN); } - if (gFmRadioMode) - BK1080_Mute(false); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Mute(false); + #endif + if (!gEnableSpeaker) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); @@ -375,9 +387,11 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) BK4819_SetAF(BK4819_AF_OPEN); } - if (gFmRadioMode) - BK1080_Mute(false); - + #ifdef ENABLE_FMRADIO + if (gFmRadioMode) + BK1080_Mute(false); + #endif + if (!gEnableSpeaker) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); diff --git a/audio.h b/audio.h index 98f70b2..5c4b3ba 100644 --- a/audio.h +++ b/audio.h @@ -35,7 +35,7 @@ extern BEEP_Type_t gBeepToPlay; void AUDIO_PlayBeep(BEEP_Type_t Beep); -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE enum { diff --git a/bitmaps.c b/bitmaps.c index d0bec09..8f3c633 100644 --- a/bitmaps.c +++ b/bitmaps.c @@ -244,7 +244,7 @@ const uint8_t BITMAP_TDR[] = 0b01111111 }; -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE const uint8_t BITMAP_VoicePrompt[] = { 0b00000000, @@ -259,24 +259,26 @@ const uint8_t BITMAP_TDR[] = }; #endif -const uint8_t BITMAP_FM[] = -{ - 0b00000000, - 0b01111111, - 0b00001001, - 0b00001001, - 0b00001001, - 0b00000001, +#ifdef ENABLE_FMRADIO + const uint8_t BITMAP_FM[] = + { + 0b00000000, + 0b01111111, + 0b00001001, + 0b00001001, + 0b00001001, + 0b00000001, + + 0b00000000, + 0b01111111, + 0b00000010, + 0b00001100, + 0b00000010, + 0b01111111 + }; +#endif - 0b00000000, - 0b01111111, - 0b00000010, - 0b00001100, - 0b00000010, - 0b01111111 -}; - -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA const uint8_t BITMAP_NOAA[] = { 0b00000000, diff --git a/bitmaps.h b/bitmaps.h index c94c76a..6c3a282 100644 --- a/bitmaps.h +++ b/bitmaps.h @@ -28,13 +28,15 @@ extern const uint8_t BITMAP_VOX[18]; extern const uint8_t BITMAP_TDR[12]; -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE extern const uint8_t BITMAP_VoicePrompt[9]; #endif -extern const uint8_t BITMAP_FM[12]; +#ifdef ENABLE_FMRADIO + extern const uint8_t BITMAP_FM[12]; +#endif -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA extern const uint8_t BITMAP_NOAA[12]; #endif diff --git a/board.c b/board.c index e57dbde..6c89d70 100644 --- a/board.c +++ b/board.c @@ -18,14 +18,18 @@ #include #include "app/dtmf.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "board.h" #include "bsp/dp32g030/gpio.h" #include "bsp/dp32g030/portcon.h" #include "bsp/dp32g030/saradc.h" #include "bsp/dp32g030/syscon.h" #include "driver/adc.h" -#include "driver/bk1080.h" +#ifdef ENABLE_FMRADIO + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/crc.h" #include "driver/eeprom.h" @@ -300,9 +304,7 @@ void BOARD_ADC_Init(void) void BOARD_ADC_GetBatteryInfo(uint16_t *pVoltage, uint16_t *pCurrent) { ADC_Start(); - while (!ADC_CheckEndOfConversion(ADC_CH9)) {} - *pVoltage = ADC_GetValue(ADC_CH4); *pCurrent = ADC_GetValue(ADC_CH9); } @@ -313,7 +315,9 @@ void BOARD_Init(void) BOARD_GPIO_Init(); BOARD_ADC_Init(); ST7565_Init(); - BK1080_Init(0, false); + #ifdef ENABLE_FMRADIO + BK1080_Init(0, false); + #endif CRC_Init(); } @@ -329,7 +333,7 @@ void BOARD_EEPROM_Init(void) gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST; gEeprom.SQUELCH_LEVEL = (Data[1] < 10) ? Data[1] : 1; gEeprom.TX_TIMEOUT_TIMER = (Data[2] < 11) ? Data[2] : 1; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA gEeprom.NOAA_AUTO_SCAN = (Data[3] < 2) ? Data[3] : false; #endif gEeprom.KEY_LOCK = (Data[4] < 2) ? Data[4] : false; @@ -339,7 +343,7 @@ void BOARD_EEPROM_Init(void) // 0E78..0E7F EEPROM_ReadBuffer(0x0E78, Data, 8); - #ifndef CHAN_NAME_FREQ + #ifndef ENABLE_CHAN_NAME_FREQ gEeprom.CHANNEL_DISPLAY_MODE = (Data[1] < 3) ? Data[1] : MDF_FREQUENCY; #else gEeprom.CHANNEL_DISPLAY_MODE = (Data[1] < 4) ? Data[1] : MDF_FREQUENCY; @@ -353,17 +357,18 @@ void BOARD_EEPROM_Init(void) // 0E80..0E87 EEPROM_ReadBuffer(0x0E80, Data, 8); - gEeprom.ScreenChannel[0] = IS_VALID_CHANNEL(Data[0]) ? Data[0] : (FREQ_CHANNEL_FIRST + 5); - gEeprom.ScreenChannel[1] = IS_VALID_CHANNEL(Data[3]) ? Data[3] : (FREQ_CHANNEL_FIRST + 5); + gEeprom.ScreenChannel[0] = IS_VALID_CHANNEL(Data[0]) ? Data[0] : (FREQ_CHANNEL_FIRST + BAND6_400MHz); + gEeprom.ScreenChannel[1] = IS_VALID_CHANNEL(Data[3]) ? Data[3] : (FREQ_CHANNEL_FIRST + BAND6_400MHz); gEeprom.MrChannel[0] = IS_MR_CHANNEL(Data[1]) ? Data[1] : MR_CHANNEL_FIRST; gEeprom.MrChannel[1] = IS_MR_CHANNEL(Data[4]) ? Data[4] : MR_CHANNEL_FIRST; - gEeprom.FreqChannel[0] = IS_FREQ_CHANNEL(Data[2]) ? Data[2] : (FREQ_CHANNEL_FIRST + 5); - gEeprom.FreqChannel[1] = IS_FREQ_CHANNEL(Data[5]) ? Data[5] : (FREQ_CHANNEL_FIRST + 5); - #ifndef DISABLE_NOAA + gEeprom.FreqChannel[0] = IS_FREQ_CHANNEL(Data[2]) ? Data[2] : (FREQ_CHANNEL_FIRST + BAND6_400MHz); + gEeprom.FreqChannel[1] = IS_FREQ_CHANNEL(Data[5]) ? Data[5] : (FREQ_CHANNEL_FIRST + BAND6_400MHz); + #ifdef ENABLE_NOAA gEeprom.NoaaChannel[0] = IS_NOAA_CHANNEL(Data[6]) ? Data[6] : NOAA_CHANNEL_FIRST; gEeprom.NoaaChannel[1] = IS_NOAA_CHANNEL(Data[7]) ? Data[7] : NOAA_CHANNEL_FIRST; #endif +#ifdef ENABLE_FMRADIO { // 0E88..0E8F struct { @@ -388,31 +393,35 @@ void BOARD_EEPROM_Init(void) // 0E40..0E67 EEPROM_ReadBuffer(0x0E40, gFM_Channels, sizeof(gFM_Channels)); FM_ConfigureChannelState(); +#endif // 0E90..0E97 EEPROM_ReadBuffer(0x0E90, Data, 8); - gEeprom.BEEP_CONTROL = (Data[0] < 2) ? Data[0] : true; - gEeprom.KEY_1_SHORT_PRESS_ACTION = (Data[1] < ACTION_OPT_LEN) ? Data[1] : ACTION_OPT_MONITOR; - gEeprom.KEY_1_LONG_PRESS_ACTION = (Data[2] < ACTION_OPT_LEN) ? Data[2] : ACTION_OPT_FLASHLIGHT; - gEeprom.KEY_2_SHORT_PRESS_ACTION = (Data[3] < ACTION_OPT_LEN) ? Data[3] : ACTION_OPT_SCAN; - gEeprom.KEY_2_LONG_PRESS_ACTION = (Data[4] < ACTION_OPT_LEN) ? Data[4] : ACTION_OPT_FM; - gEeprom.SCAN_RESUME_MODE = (Data[5] < 3) ? Data[5] : SCAN_RESUME_CO; - gEeprom.AUTO_KEYPAD_LOCK = (Data[6] < 2) ? Data[6] : false; - gEeprom.POWER_ON_DISPLAY_MODE = (Data[7] < 3) ? Data[7] : POWER_ON_DISPLAY_MODE_VOLTAGE; + gEeprom.BEEP_CONTROL = (Data[0] < 2) ? Data[0] : true; + gEeprom.KEY_1_SHORT_PRESS_ACTION = (Data[1] < ACTION_OPT_LEN) ? Data[1] : ACTION_OPT_MONITOR; + gEeprom.KEY_1_LONG_PRESS_ACTION = (Data[2] < ACTION_OPT_LEN) ? Data[2] : ACTION_OPT_FLASHLIGHT; + gEeprom.KEY_2_SHORT_PRESS_ACTION = (Data[3] < ACTION_OPT_LEN) ? Data[3] : ACTION_OPT_SCAN; + #ifdef ENABLE_FMRADIO + gEeprom.KEY_2_LONG_PRESS_ACTION = (Data[4] < ACTION_OPT_LEN) ? Data[4] : ACTION_OPT_NONE; + #else + gEeprom.SCAN_RESUME_MODE = (Data[5] < 3) ? Data[5] : SCAN_RESUME_CO; + #endif + gEeprom.AUTO_KEYPAD_LOCK = (Data[6] < 2) ? Data[6] : false; + gEeprom.POWER_ON_DISPLAY_MODE = (Data[7] < 3) ? Data[7] : POWER_ON_DISPLAY_MODE_VOLTAGE; // 0E98..0E9F EEPROM_ReadBuffer(0x0E98, Data, 8); memcpy(&gEeprom.POWER_ON_PASSWORD, Data, 4); // 0EA0..0EA7 - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE EEPROM_ReadBuffer(0x0EA0, Data, 8); gEeprom.VOICE_PROMPT = (Data[0] < 3) ? Data[0] : VOICE_PROMPT_ENGLISH; #endif // 0EA8..0EAF EEPROM_ReadBuffer(0x0EA8, Data, 8); - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM gEeprom.ALARM_MODE = (Data[0] < 2) ? Data[0] : true; #endif gEeprom.ROGER = (Data[1] < 3) ? Data[1] : ROGER_MODE_OFF; @@ -588,7 +597,8 @@ void BOARD_FactoryReset(bool bIsAll) !(i >= 0x0F18 && i < 0x0F30) && // Scan List !(i >= 0x0F50 && i < 0x1C00) && // MR Channel Names !(i >= 0x0E40 && i < 0x0E70) && // FM Channels - !(i >= 0x0E88 && i < 0x0E90))) // FM settings + !(i >= 0x0E88 && i < 0x0E90) // FM settings + )) ) { EEPROM_WriteBuffer(i, Template); } diff --git a/driver/bk4819.c b/driver/bk4819.c index 01f9767..acfd00c 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -231,6 +231,16 @@ void BK4819_ToggleGpioOut(BK4819_GPIO_PIN_t Pin, bool bSet) void BK4819_SetCDCSSCodeWord(uint32_t CodeWord) { + // REG_51 <15> 0 1 = Enable TxCTCSS/CDCSS 0 = Disable + // REG_51 <14> 0 1 = GPIO0Input for CDCSS 0 = Normal Mode.(for BK4819v3) + // REG_51 <13> 0 1 = Transmit negative CDCSS code 0 = Transmit positive CDCSScode + // REG_51 <12> 0 CTCSS/CDCSS mode selection 1 = CTCSS 0 = CDCSS + // REG_51 <11> 0 CDCSS 24/23bit selection 1 = 24bit 0 = 23bit + // REG_51 <10> 0 1050HzDetectionMode 1 = 1050/4 Detect Enable, CTC1 should be set to 1050/4 Hz + // REG_51 <9> 0 Auto CDCSS Bw Mode 1 = Disable 0 = Enable. + // REG_51 <8> 0 Auto CTCSS Bw Mode 0 = Enable 1 = Disable + // REG_51 <6:0> 0 CTCSS/CDCSS Tx Gain1 Tuning 0 = min 127 = max + // Enable CDCSS // Transmit positive CDCSS code // CDCSS Mode @@ -238,6 +248,7 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord) // Enable Auto CDCSS Bw Mode // Enable Auto CTCSS Bw Mode // CTCSS/CDCSS Tx Gain1 Tuning = 51 + // BK4819_WriteRegister(BK4819_REG_51, BK4819_REG_51_ENABLE_CxCSS | BK4819_REG_51_GPIO6_PIN2_NORMAL @@ -249,18 +260,35 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord) | BK4819_REG_51_AUTO_CTCSS_BW_ENABLE | (51u << BK4819_REG_51_SHIFT_CxCSS_TX_GAIN1)); - // CTC1 Frequency Control Word = 2775 - BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | (2775u << BK4819_REG_07_SHIFT_FREQUENCY)); + // REG_07 <15:0> + // + // When <13> = 0 for CTC1 + // <12:0> = CTC1 frequency control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // + // When <13> = 1 for CTC2 (Tail 55Hz Rx detection) + // <12:0> = CTC2 (should below 100Hz) frequency control word = + // 25391 / freq(Hz) for XTAL 13M/26M or + // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M + // + // When <13> = 2 for CDCSS 134.4Hz + // <12:0> = CDCSS baud rate frequency (134.4Hz) control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M - // Set the code word - BK4819_WriteRegister(BK4819_REG_08, 0x0000 | ((CodeWord >> 0) & 0x0FFF)); - BK4819_WriteRegister(BK4819_REG_08, 0x8000 | ((CodeWord >> 12) & 0x0FFF)); + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | 2775u); + + // REG_08 <15:0> <15> = 1 for CDCSS high 12bit + // <15> = 0 for CDCSS low 12bit + // <11:0> = CDCSShigh/low 12bit code + + BK4819_WriteRegister(BK4819_REG_08, (0u << 15) | ((CodeWord >> 0) & 0x0FFF)); // LS 12-bits + BK4819_WriteRegister(BK4819_REG_08, (1u << 15) | ((CodeWord >> 12) & 0x0FFF)); // MS 12-bits } void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) { - uint16_t Config; - // REG_51 <15> 0 1 = Enable TxCTCSS/CDCSS 0 = Disable // REG_51 <14> 0 1 = GPIO0Input for CDCSS 0 = Normal Mode.(for BK4819v3) // REG_51 <13> 0 1 = Transmit negative CDCSS code 0 = Transmit positive CDCSScode @@ -271,6 +299,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) // REG_51 <8> 0 Auto CTCSS Bw Mode 0 = Enable 1 = Disable // REG_51 <6:0> 0 CTCSS/CDCSS Tx Gain1 Tuning 0 = min 127 = max + uint16_t Config; if (FreqControlWord == 2625) { // Enables 1050Hz detection mode // Enable TxCTCSS @@ -279,6 +308,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) // Enable Auto CDCSS Bw Mode // Enable Auto CTCSS Bw Mode // CTCSS/CDCSS Tx Gain1 Tuning = 74 + // Config = 0x944A; // 1 0 0 1 0 1 0 0 0 1001010 } else @@ -287,6 +317,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) // Enable Auto CDCSS Bw Mode // Enable Auto CTCSS Bw Mode // CTCSS/CDCSS Tx Gain1 Tuning = 74 + // Config = 0x904A; // 1 0 0 1 0 0 0 0 0 1001010 } BK4819_WriteRegister(BK4819_REG_51, Config); @@ -294,16 +325,21 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) // REG_07 <15:0> // // When <13> = 0 for CTC1 - // <12:0> = CTC1 frequencycontrolword = freq(Hz)*20.64888 for XTAL 13M/26M or = freq(Hz)*20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // <12:0> = CTC1 frequency control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // - // When <13> = 1 for CTC2(Tail 55Hz Rx detection) - // <12:0> = CTC2 (should below 100Hz) frequencycontrolword = 25391/freq(Hz) for XTAL 13M/26M or = 25000/freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M + // When <13> = 1 for CTC2 (Tail 55Hz Rx detection) + // <12:0> = CTC2 (should below 100Hz) frequency control word = + // 25391 / freq(Hz) for XTAL 13M/26M or + // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M // // When <13> = 2 for CDCSS 134.4Hz - // <12:0> = CDCSS baud rate frequency (134.4Hz) controlword = freq(Hz)*20.64888 for XTAL 13M/26M or = freq(Hz)*20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // <12:0> = CDCSS baud rate frequency (134.4Hz) control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M - // CTC1 Frequency Control Word - BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | ((FreqControlWord * 2065) / 1000) << BK4819_REG_07_SHIFT_FREQUENCY); + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | ((FreqControlWord * 2065u) / 1000u)); } void BK4819_Set55HzTailDetection(void) @@ -311,17 +347,23 @@ void BK4819_Set55HzTailDetection(void) // REG_07 <15:0> // // When <13> = 0 for CTC1 - // <12:0> = CTC1 frequencycontrolword = freq(Hz)*20.64888 for XTAL 13M/26M or = freq(Hz)*20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // <12:0> = CTC1 frequency control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // - // When <13> = 1 for CTC2(Tail 55Hz Rx detection) - // <12:0> = CTC2 (should below 100Hz) frequencycontrolword = 25391/freq(Hz) for XTAL 13M/26M or = 25000/freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M + // When <13> = 1 for CTC2 (Tail 55Hz Rx detection) + // <12:0> = CTC2 (should below 100Hz) frequency control word = + // 25391 / freq(Hz) for XTAL 13M/26M or + // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M // // When <13> = 2 for CDCSS 134.4Hz - // <12:0> = CDCSS baud rate frequency (134.4Hz) controlword = freq(Hz)*20.64888 for XTAL 13M/26M or = freq(Hz)*20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // <12:0> = CDCSS baud rate frequency (134.4Hz) control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // CTC2 Frequency Control Word = round_nearest(25391 / 55) = 462 const unsigned int ctcss_Hz = 55; - BK4819_WriteRegister(BK4819_REG_07, (1u << 13) | ((25391 + (ctcss_Hz / 2)) / ctcss_Hz)); // with rounding + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC2 | ((25391 + (ctcss_Hz / 2)) / ctcss_Hz)); // with rounding } void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) @@ -554,7 +596,7 @@ void BK4819_TurnsOffTones_TurnsOnRX(void) | BK4819_REG_30_ENABLE_RX_DSP); } -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY void BK4819_SetupAircopy(void) { BK4819_WriteRegister(BK4819_REG_70, 0x00E0); // Enable Tone2, tuning gain 48 @@ -778,36 +820,98 @@ void BK4819_TransmitTone(bool bLocalLoopback, uint32_t Frequency) void BK4819_GenTail(uint8_t Tail) { + // REG_52 <15> 0 Enable 120/180/240 degree shift CTCSS or 134.4Hz Tail when CDCSS mode + // 0 = Normal + // 1 = Enable + // REG_52 <14:13> 0 CTCSS tail mode selection (only valid when REG_52 <15> = 1) + // 00 = for 134.4Hz CTCSS Tail when CDCSS mode + // 01 = CTCSS0 120° phase shift + // 10 = CTCSS0 180° phase shift + // 11 = CTCSS0 240° phase shift + // REG_52 <12> 0 CTCSSDetectionThreshold Mode + // 1 = ~0.1% + // 0 = 0.1 Hz + // REG_52 <11:6> 0x0A CTCSS found detect threshold + // REG_52 <5:0> 0x0F CTCSS lost detect threshold + + // REG_07 <15:0> + // + // When <13> = 0 for CTC1 + // <12:0> = CTC1 frequency control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + // + // When <13> = 1 for CTC2 (Tail 55Hz Rx detection) + // <12:0> = CTC2 (should below 100Hz) frequency control word = + // 25391 / freq(Hz) for XTAL 13M/26M or + // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M + // + // When <13> = 2 for CDCSS 134.4Hz + // <12:0> = CDCSS baud rate frequency (134.4Hz) control word = + // freq(Hz) * 20.64888 for XTAL 13M/26M or + // freq(Hz)*20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M + switch (Tail) { - case 0: // CTC134 - BK4819_WriteRegister(BK4819_REG_52, 0x828F); + case 0: // 134.4Hz CTCSS Tail + BK4819_WriteRegister(BK4819_REG_52, 0x828F); // 1 00 0 001010 001111 break; - case 1: // CTC120 - BK4819_WriteRegister(BK4819_REG_52, 0xA28F); + case 1: // 120° phase shift + BK4819_WriteRegister(BK4819_REG_52, 0xA28F); // 1 01 0 001010 001111 break; - case 2: // CTC180 - BK4819_WriteRegister(BK4819_REG_52, 0xC28F); + case 2: // 180° phase shift + BK4819_WriteRegister(BK4819_REG_52, 0xC28F); // 1 10 0 001010 001111 break; - case 3: // CTC240 - BK4819_WriteRegister(BK4819_REG_52, 0xE28F); + case 3: // 240° phase shift + BK4819_WriteRegister(BK4819_REG_52, 0xE28F); // 1 11 0 001010 001111 break; - case 4: // CTC55 - BK4819_WriteRegister(BK4819_REG_07, 0x046f); + case 4: // 55Hz tone freq + BK4819_WriteRegister(BK4819_REG_07, 0x046f); // 0 00 0 010001 101111 break; } } void BK4819_EnableCDCSS(void) { - BK4819_GenTail(0); // CTC134 + BK4819_GenTail(0); // CTC134 BK4819_WriteRegister(BK4819_REG_51, 0x804A); } void BK4819_EnableCTCSS(void) { - BK4819_GenTail(4); // CTC55 - BK4819_WriteRegister(BK4819_REG_51, 0x904A); +// BK4819_GenTail(1); // 120° phase shift + BK4819_GenTail(2); // 180° phase shift +// BK4819_GenTail(3); // 240° phase shift +// BK4819_GenTail(4); // 55Hz tone freq + + // REG_51 <15> 0 + // 1 = Enable TxCTCSS/CDCSS + // 0 = Disable + // REG_51 <14> 0 + // 1 = GPIO0Input for CDCSS + // 0 = Normal Mode (for BK4819 v3) + // REG_51 <13> 0 + // 1 = Transmit negative CDCSS code + // 0 = Transmit positive CDCSS code + // REG_51 <12> 0 CTCSS/CDCSS mode selection + // 1 = CTCSS + // 0 = CDCSS + // REG_51 <11> 0 CDCSS 24/23bit selection + // 1 = 24bit + // 0 = 23bit + // REG_51 <10> 0 1050HzDetectionMode + // 1 = 1050/4 Detect Enable, CTC1 should be set to 1050/4 Hz + // REG_51 <9> 0 Auto CDCSS Bw Mode + // 1 = Disable + // 0 = Enable + // REG_51 <8> 0 Auto CTCSS Bw Mode + // 0 = Enable + // 1 = Disable + // REG_51 <6:0> 0 CTCSS/CDCSS Tx Gain1 Tuning + // 0 = min + // 127 = max + + BK4819_WriteRegister(BK4819_REG_51, 0x904A); // 1 0 0 1 0 0 0 0 0 1001010 } uint16_t BK4819_GetRSSI(void) diff --git a/driver/bk4819.h b/driver/bk4819.h index 0bfadd6..603fba3 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -92,7 +92,7 @@ void BK4819_EnterTxMute(void); void BK4819_ExitTxMute(void); void BK4819_Sleep(void); void BK4819_TurnsOffTones_TurnsOnRX(void); -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY void BK4819_SetupAircopy(void); #endif void BK4819_ResetFSK(void); diff --git a/firmware b/firmware index 0ae34d7dc4f50d083da1e77ce66df699bdf2fa7a..fc1c0326fccbf213c814c471121e0513b20aca80 100644 GIT binary patch delta 46911 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 I;PtWp0Qi^s9smFU delta 31836 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 diff --git a/firmware.packed.bin b/firmware.packed.bin index 3ed45461079a3efb471f2b80ecc41a431b70ebef..d38ebb5dcbd5fdd654ee68527a01e83032048c78 100644 GIT binary patch literal 47414 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

L1-=QR>Y^3tb@A?vf`4<89|M3_i{B+>|<1fCT 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 G_5L5$(fkPj literal 51658 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

<`W!%i<{3Bw`oR8A1O9iF_Hepnb0*`Sf5St^ zNBn)P{C~wzEs9p;6)ywh5E#sD^*OdSQ%I_kS`QsUY#$j~#= z`g@Z6ww3qJXPYVH4_fRKS55!Zf75e`|Mq{J(UU24kpJ0ZV+U^l|KsH%_2_7gzdW@_ z=I8~b5{E`-eXGOe2o#>s(dY;8$2!c7BY^#R(D(SO@ru((%zL+E((kFa;Ca7M*;^nmvd zU0Et{tvB$u&IfI>G_E;SkzLomyuov;Z5_aW*kLk&{Gq5F!)guef5ae9KlRILLAXZ! z`7zt?Yt!cY{G~LJ?%n!rbfe;kx5T)8i_9^Gqg{~t`Y$|QwwoMqe|H5LCW$WG?>`qo zjl{~PDX1_FJss13{MY&w6OgHqy>0`8J+TexG4gPF1&_iAsB3I(xZB&zN?^E?hwYBKH1-{)D$)fw5 z;YQel|M{<{v1*@6h-@xIK>qRy-AwHue`y<9Iiys2= zv}TB_uqqnRzw>LsD}Uhs8RD4#sfuanA%iSq0srJoll{_sM7jhfOZc8QVQDT7j+Unx z{2y0u;Z@c5eSy-Qf^g|BX;50ayBq07x&)MvlJ4%3khpY6OA87}cSx&r3cP*&etvJf z@&1A{_Bm^)|&D|gA@{tXa3$NB{J|G$9v?*Z{& z1>#=~+`p6{|C;_N8xI5g2k#F<&o-?71O6F?|6zgqpBvym>978W|80W&XBrSGc>(g@ z8Sp=E0RQ6!@_z%||BaykmCmIUa0UJM4={gP1N^ZD|CQh2OxHpGkr|)m*yxOg8M?l?KTV-sP>?w};>1a@ z_SnWTPNd6d&C;@2QrKPq>R;SA$<`-iLWsl(v;|LdqbwfupW0ylY=rS&!td)eznVKz zd z*~b*8;X3SfPO{Z*o&d4PwfnqE>Og=iNt<0h>a*VxZpSqgJa@Q7f;Vc)h-ru!CSBpb z!Yjc3h5HoVj?&yYRyN=tx<>SX{yQ&P9^-qI$vatTSM~fumrdhW`q!)hPw`MPoHk#X zboWolRru>I6ij2!ALtWuaBoTOH=Rf(Z2qzNJ~Yzr@nzwsI!8BlK|5adknyhN;pD4x zQwf${-fkJMSNb)izOCI_H<>rnWX6Nn-X#|5V)Aa>voQUacj)WX&1+_l8ScbrxpXmi z%>XIo3bSlB9!gp7De>iCp&iZxgGp@Hnqwk{{fLkHcFR}fr$S^LVcvB(36m`v(t&^7 zn)k;okAVJ(&c&g+@R}=TX~m7AT{yop2;Z=xu5rB-FG}rIW4Gyb;+bUZMCiR9*j;gQ z=X&I>#X}lf1NGMqe19IxtezqK#b+j-{j*I_fnN6e<(H7_LB8`kXi*0`ys|P69M3gcfA4aNT9kFL^#tZ$2LC#Xtm z;0k->icM)g4&vGrLkAkK;tlHTq=$?JGzz>97=kbKea38Z?# zg!lfOKioct68kaSK9c{scyYshA`Z?^o}WabN*M)t_1I{cl^JBOUF#DtX?K~-E3-&!!U(6= z!K=$O3+9g~h9}Ya|M<@>ftYsV30t>Xxh1GjdHCZbGBE=QIDgdT0CvoH!-l^A7rCX7 zF{35?QCS!@-KsltlDkZ0yud@vdzINcH)_6|aIRfrx!ZS{B2PI!K0fmh6cy@sb){0Z zvdJ;ORV&v4{fAyFYYNktI6BLV&%+us7QUhF#gveRbd6n>?~GbwdF}dxR&U7x{zm(+ z{t0)9z!%7OpD)iauC!=H>LJlpq-FkxfAWC&10Br n^0QDyb-2agx=U6!){+{MA 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 diff --git a/frequencies.c b/frequencies.c index f89b283..cbba886 100644 --- a/frequencies.c +++ b/frequencies.c @@ -23,7 +23,7 @@ const uint32_t bx_max_Hz = 130000000; // 1300MHz const uint32_t LowerLimitFrequencyBandTable[7] = { - #ifndef RX_ANY_FREQ + #ifndef ENABLE_WIDE_RX 5000000, #else 1800000, @@ -55,14 +55,14 @@ const uint32_t UpperLimitFrequencyBandTable[7] = 34999990, 39999990, 46999990, - #ifndef RX_ANY_FREQ + #ifndef ENABLE_WIDE_RX 60000000 #else 130000000 #endif }; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA const uint32_t NoaaFrequencyTable[10] = { 16255000, @@ -154,7 +154,7 @@ int FREQUENCY_Check(VFO_Info_t *pInfo) { const uint32_t Frequency = pInfo->pTX->Frequency; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (pInfo->CHANNEL_SAVE >= NOAA_CHANNEL_FIRST) return -1; #endif diff --git a/frequencies.h b/frequencies.h index 1d64099..3f02b8d 100644 --- a/frequencies.h +++ b/frequencies.h @@ -41,7 +41,7 @@ extern const uint32_t LowerLimitFrequencyBandTable[7]; extern const uint32_t MiddleFrequencyBandTable[7]; extern const uint32_t UpperLimitFrequencyBandTable[7]; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA extern const uint32_t NoaaFrequencyTable[10]; #endif diff --git a/functions.c b/functions.c index 0853767..d93c738 100644 --- a/functions.c +++ b/functions.c @@ -17,10 +17,14 @@ #include #include "app/dtmf.h" -#include "app/fm.h" +#if defined(ENABLE_FMRADIO) + #include "app/fm.h" +#endif #include "bsp/dp32g030/gpio.h" #include "dcs.h" -#include "driver/bk1080.h" +#if defined(ENABLE_FMRADIO) + #include "driver/bk1080.h" +#endif #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/system.h" @@ -36,7 +40,7 @@ FUNCTION_Type_t gCurrentFunction; void FUNCTION_Init(void) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) #endif { @@ -44,11 +48,11 @@ void FUNCTION_Init(void) if (gCssScanMode == CSS_SCAN_MODE_OFF) gCurrentCodeType = gRxVfo->IsAM ? CODE_TYPE_OFF : gRxVfo->pRX->CodeType; } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA else gCurrentCodeType = CODE_TYPE_CONTINUOUS_TONE; #endif - + gDTMF_RequestPending = false; gDTMF_WriteIndex = 0; @@ -73,7 +77,6 @@ void FUNCTION_Select(FUNCTION_Type_t Function) { FUNCTION_Type_t PreviousFunction; bool bWasPowerSave; - uint16_t Countdown = 0; PreviousFunction = gCurrentFunction; bWasPowerSave = (PreviousFunction == FUNCTION_POWER_SAVE); @@ -85,7 +88,7 @@ void FUNCTION_Select(FUNCTION_Type_t Function) { BK4819_Conditional_RX_TurnOn_and_GPIO6_Enable(); gRxIdleMode = false; - UI_DisplayStatus(); + UI_DisplayStatus(false); } } @@ -94,21 +97,23 @@ void FUNCTION_Select(FUNCTION_Type_t Function) case FUNCTION_FOREGROUND: if (gDTMF_ReplyState != DTMF_REPLY_NONE) RADIO_PrepareCssTX(); - + if (PreviousFunction == FUNCTION_TRANSMIT) { gVFO_RSSI_Level[0] = 0; gVFO_RSSI_Level[1] = 0; } else - if (PreviousFunction == FUNCTION_RECEIVE) - { + if (PreviousFunction != FUNCTION_RECEIVE) + break; + + #if defined(ENABLE_FMRADIO) if (gFmRadioMode) - Countdown = 500; - - if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) - gDTMF_AUTO_RESET_TIME = 1 + (gEeprom.DTMF_AUTO_RESET_TIME * 2); - } + gFM_RestoreCountdown = 500; + #endif + + if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) + gDTMF_AUTO_RESET_TIME = 1 + (gEeprom.DTMF_AUTO_RESET_TIME * 2); return; @@ -120,22 +125,21 @@ void FUNCTION_Select(FUNCTION_Type_t Function) case FUNCTION_POWER_SAVE: gBatterySave = gEeprom.BATTERY_SAVE * 10; gRxIdleMode = true; - BK4819_DisableVox(); BK4819_Sleep(); BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); - gBatterySaveCountdownExpired = false; - gUpdateStatus = true; - + gUpdateStatus = true; GUI_SelectNextDisplay(DISPLAY_MAIN); return; case FUNCTION_TRANSMIT: - if (gFmRadioMode) - BK1080_Init(0, false); - - #ifndef DISABLE_ALARM + #if defined(ENABLE_FMRADIO) + if (gFmRadioMode) + BK1080_Init(0, false); + #endif + + #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_TXALARM && gEeprom.ALARM_MODE != ALARM_MODE_TONE) { gAlarmState = ALARM_STATE_ALARM; @@ -154,22 +158,17 @@ void FUNCTION_Select(FUNCTION_Type_t Function) #endif GUI_DisplayScreen(); - RADIO_SetTxParameters(); - BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_RED, true); DTMF_Reply(); - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM if (gAlarmState != ALARM_STATE_OFF) { BK4819_TransmitTone(true, (gAlarmState == ALARM_STATE_TX1750) ? 1750 : 500); - SYSTEM_DelayMs(2); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gAlarmToneCounter = 0; gEnableSpeaker = true; break; @@ -180,12 +179,13 @@ void FUNCTION_Select(FUNCTION_Type_t Function) BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1U); else BK4819_DisableScramble(); - + break; } - + gBatterySaveCountdown = battery_save_count; gSchedulePowerSave = false; - - gFM_RestoreCountdown = Countdown; + #if defined(ENABLE_FMRADIO) + gFM_RestoreCountdown = 0; + #endif } diff --git a/helper/battery.c b/helper/battery.c index 8f25c6b..fd89cd0 100644 --- a/helper/battery.c +++ b/helper/battery.c @@ -30,8 +30,8 @@ uint8_t gBatteryDisplayLevel; bool gChargingWithTypeC; bool gLowBattery; bool gLowBatteryBlink; -volatile uint16_t gBatterySave; uint16_t gBatteryCheckCounter; +volatile uint16_t gBatterySave; void BATTERY_GetReadings(bool bDisplayBatteryLevel) { diff --git a/helper/battery.h b/helper/battery.h index 74a1cf6..f7f12dd 100644 --- a/helper/battery.h +++ b/helper/battery.h @@ -20,22 +20,18 @@ #include #include -extern uint16_t gBatteryCalibration[6]; -extern uint16_t gBatteryCurrentVoltage; -extern uint16_t gBatteryCurrent; -extern uint16_t gBatteryVoltages[4]; -extern uint16_t gBatteryVoltageAverage; - -extern uint8_t gBatteryDisplayLevel; - -extern bool gChargingWithTypeC; -extern bool gLowBattery; -extern bool gLowBatteryBlink; - +extern uint16_t gBatteryCalibration[6]; +extern uint16_t gBatteryCurrentVoltage; +extern uint16_t gBatteryCurrent; +extern uint16_t gBatteryVoltages[4]; +extern uint16_t gBatteryVoltageAverage; +extern uint8_t gBatteryDisplayLevel; +extern bool gChargingWithTypeC; +extern bool gLowBattery; +extern bool gLowBatteryBlink; +extern uint16_t gBatteryCheckCounter; extern volatile uint16_t gBatterySave; -extern uint16_t gBatteryCheckCounter; - void BATTERY_GetReadings(bool bDisplayBatteryLevel); #endif diff --git a/helper/boot.c b/helper/boot.c index f755bf0..386a07d 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -14,7 +14,7 @@ * limitations under the License. */ -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include "app/aircopy.h" #endif #include "bsp/dp32g030/gpio.h" @@ -53,7 +53,7 @@ BOOT_Mode_t BOOT_GetMode(void) if (Keys[0] == KEY_SIDE1) return BOOT_MODE_F_LOCK; - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY if (Keys[0] == KEY_SIDE2) return BOOT_MODE_AIRCOPY; #endif @@ -71,17 +71,17 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) GUI_SelectNextDisplay(DISPLAY_MENU); gF_LOCK = true; gMenuListCount = 57; - #ifdef DISABLE_VOICE + #ifndef ENABLE_VOICE gMenuListCount--; #endif - #ifdef DISABLE_ALARM + #ifndef ENABLE_ALARM gMenuListCount--; #endif - #ifdef DISABLE_NOAA + #ifndef ENABLE_NOAA gMenuListCount--; #endif } - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY else if (Mode == BOOT_MODE_AIRCOPY) { diff --git a/helper/boot.h b/helper/boot.h index 1c1b034..fd6c96e 100644 --- a/helper/boot.h +++ b/helper/boot.h @@ -24,7 +24,7 @@ enum BOOT_Mode_t { BOOT_MODE_NORMAL = 0, BOOT_MODE_F_LOCK, - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY BOOT_MODE_AIRCOPY #endif }; diff --git a/main.c b/main.c index 73414ad..9814867 100644 --- a/main.c +++ b/main.c @@ -37,6 +37,10 @@ #include "ui/welcome.h" #include "version.h" +#ifndef ARRAY_SIZE + #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#endif + void _putchar(char c) { UART_Send((uint8_t *)&c, 1); @@ -85,7 +89,7 @@ void Main(void) { unsigned int i; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_SIZE(gBatteryVoltages); i++) BOARD_ADC_GetBatteryInfo(&gBatteryVoltages[i], &gBatteryCurrent); } @@ -113,13 +117,13 @@ void Main(void) SYSTEM_DelayMs(2000); gMenuListCount = 51; - #ifdef DISABLE_ALARM + #ifndef ENABLE_ALARM gMenuListCount--; #endif - #ifdef DISABLE_VOICE + #ifndef ENABLE_VOICE gMenuListCount--; #endif - #ifdef DISABLE_NOAA + #ifndef ENABLE_NOAA gMenuListCount--; #endif @@ -138,7 +142,7 @@ void Main(void) gUpdateStatus = true; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE { uint8_t Channel; @@ -158,7 +162,7 @@ void Main(void) } #endif - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA RADIO_ConfigureNOAA(); #endif } diff --git a/misc.c b/misc.c index 7f3d79d..cb58590 100644 --- a/misc.c +++ b/misc.c @@ -71,7 +71,7 @@ volatile uint16_t gBatterySaveCountdown = battery_save_count; volatile uint16_t gDualWatchCountdown; volatile uint16_t gTxTimerCountdown; volatile uint16_t gTailNoteEliminationCountdown; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA volatile uint16_t gNOAA_Countdown; #endif @@ -88,7 +88,7 @@ uint8_t gReducedService; uint8_t gBatteryVoltageIndex; CssScanMode_t gCssScanMode; bool gUpdateRSSI; -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM AlarmState_t gAlarmState; #endif uint8_t gVoltageMenuCountdown; @@ -101,14 +101,18 @@ bool gFlagResetVfos; bool gRequestSaveVFO; uint8_t gRequestSaveChannel; bool gRequestSaveSettings; -bool gRequestSaveFM; +#ifdef ENABLE_FMRADIO + bool gRequestSaveFM; +#endif bool gFlagPrepareTX; bool gFlagAcceptSetting; bool gFlagRefreshSetting; bool gFlagSaveVfo; bool gFlagSaveSettings; bool gFlagSaveChannel; -bool gFlagSaveFM; +#ifdef ENABLE_FMRADIO + bool gFlagSaveFM; +#endif uint8_t gDTMF_RequestPending; bool g_CDCSS_Lost; uint8_t gCDCSSCodeType; @@ -130,7 +134,7 @@ uint8_t gCurrentScanList; uint8_t gPreviousMrChannel; uint32_t gRestoreFrequency; uint8_t gRxVfoIsActive; -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM uint8_t gAlarmToneCounter; uint16_t gAlarmRunningCounter; #endif @@ -140,13 +144,13 @@ uint8_t gPttDebounceCounter; uint8_t gMenuListCount; uint8_t gBackupCROSS_BAND_RX_TX; uint8_t gScanDelay; -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY uint8_t gAircopySendCountdown; #endif uint8_t gFSKWriteIndex; uint8_t gNeverUsed; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA bool gIsNoaaMode; uint8_t gNoaaChannel; #endif @@ -165,11 +169,13 @@ volatile bool gNextTimeslice40ms; volatile bool gSchedulePowerSave; volatile bool gBatterySaveCountdownExpired; volatile bool gScheduleDualWatch = true; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA volatile bool gScheduleNOAA = true; #endif volatile bool gFlagTteComplete; -volatile bool gScheduleFM; +#ifdef ENABLE_FMRADIO + volatile bool gScheduleFM; +#endif uint16_t gCurrentRSSI; diff --git a/misc.h b/misc.h index c98764e..fa9d21f 100644 --- a/misc.h +++ b/misc.h @@ -124,8 +124,10 @@ extern volatile uint16_t gBatterySaveCountdown; extern volatile uint16_t gDualWatchCountdown; extern volatile uint16_t gTxTimerCountdown; extern volatile uint16_t gTailNoteEliminationCountdown; -extern volatile uint16_t gFmPlayCountdown; -#ifndef DISABLE_NOAA +#ifdef ENABLE_FMRADIO + extern volatile uint16_t gFmPlayCountdown; +#endif +#ifdef ENABLE_NOAA extern volatile uint16_t gNOAA_Countdown; #endif extern bool gEnableSpeaker; @@ -151,7 +153,9 @@ extern bool gFlagResetVfos; extern bool gRequestSaveVFO; extern uint8_t gRequestSaveChannel; extern bool gRequestSaveSettings; -extern bool gRequestSaveFM; +#ifdef ENABLE_FMRADIO + extern bool gRequestSaveFM; +#endif extern uint8_t gKeypadLocked; extern bool gFlagPrepareTX; extern bool gFlagAcceptSetting; @@ -159,7 +163,9 @@ extern bool gFlagRefreshSetting; extern bool gFlagSaveVfo; extern bool gFlagSaveSettings; extern bool gFlagSaveChannel; -extern bool gFlagSaveFM; +#ifdef ENABLE_FMRADIO + extern bool gFlagSaveFM; +#endif extern uint8_t gDTMF_RequestPending; extern bool g_CDCSS_Lost; extern uint8_t gCDCSSCodeType; @@ -189,18 +195,20 @@ extern uint8_t gPttDebounceCounter; extern uint8_t gMenuListCount; extern uint8_t gBackupCROSS_BAND_RX_TX; extern uint8_t gScanDelay; -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY extern uint8_t gAircopySendCountdown; #endif extern uint8_t gFSKWriteIndex; extern uint8_t gNeverUsed; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA extern bool gIsNoaaMode; extern uint8_t gNoaaChannel; #endif extern volatile bool gNextTimeslice; extern bool gUpdateDisplay; -extern uint8_t gFM_ChannelPosition; +#ifdef ENABLE_FMRADIO + extern uint8_t gFM_ChannelPosition; +#endif extern bool gF_LOCK; extern uint8_t gShowChPrefix; extern volatile uint16_t gSystickCountdown2; @@ -212,11 +220,13 @@ extern volatile bool gNextTimeslice40ms; extern volatile bool gSchedulePowerSave; extern volatile bool gBatterySaveCountdownExpired; extern volatile bool gScheduleDualWatch; -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA extern volatile bool gScheduleNOAA; #endif extern volatile bool gFlagTteComplete; -extern volatile bool gScheduleFM; +#ifdef ENABLE_FMRADIO + extern volatile bool gScheduleFM; +#endif extern uint16_t gCurrentRSSI; extern uint8_t gIsLocked; diff --git a/radio.c b/radio.c index d7b0b02..ce2e317 100644 --- a/radio.c +++ b/radio.c @@ -17,7 +17,9 @@ #include #include "app/dtmf.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "audio.h" #include "bsp/dp32g030/gpio.h" #include "dcs.h" @@ -160,7 +162,7 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg) if (IS_VALID_CHANNEL(Channel)) { - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (Channel >= NOAA_CHANNEL_FIRST) { RADIO_InitInfo(pRadio, gEeprom.ScreenChannel[VFO], 2, NoaaFrequencyTable[Channel - NOAA_CHANNEL_FIRST]); @@ -546,7 +548,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) // mic gain 0.5dB/step 0 to 31 BK4819_WriteRegister(BK4819_REG_7D, 0xE940 | (gEeprom.MIC_SENSITIVITY_TUNING & 0x1f)); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) || !gIsNoaaMode) Frequency = gRxVfo->pRX->Frequency; else @@ -573,7 +575,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) InterruptMask = 0 | BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_LOST; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) #endif { @@ -628,7 +630,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) BK4819_EnableScramble(gRxVfo->SCRAMBLING_TYPE - 1); } } - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA else { BK4819_SetCTCSSFrequency(2625); @@ -640,10 +642,18 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) } #endif - #ifndef DISABLE_NOAA - if (gEeprom.VOX_SWITCH && !gFmRadioMode && IS_NOT_NOAA_CHANNEL(gCurrentVfo->CHANNEL_SAVE) && !gCurrentVfo->IsAM) + #ifdef ENABLE_NOAA + #ifdef ENABLE_FMRADIO + if (gEeprom.VOX_SWITCH && !gFmRadioMode && IS_NOT_NOAA_CHANNEL(gCurrentVfo->CHANNEL_SAVE) && !gCurrentVfo->IsAM) + #else + if (gEeprom.VOX_SWITCH && IS_NOT_NOAA_CHANNEL(gCurrentVfo->CHANNEL_SAVE) && !gCurrentVfo->IsAM) + #endif #else - if (gEeprom.VOX_SWITCH && !gFmRadioMode && !gCurrentVfo->IsAM) + #ifdef ENABLE_FMRADIO + if (gEeprom.VOX_SWITCH && !gFmRadioMode && !gCurrentVfo->IsAM) + #else + if (gEeprom.VOX_SWITCH && !gCurrentVfo->IsAM) + #endif #endif { BK4819_EnableVox(gEeprom.VOX1_THRESHOLD, gEeprom.VOX0_THRESHOLD); @@ -671,7 +681,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) FUNCTION_Select(FUNCTION_FOREGROUND); } -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA void RADIO_ConfigureNOAA(void) { uint8_t ChanAB; @@ -774,7 +784,9 @@ void RADIO_SetVfoState(VfoState_t State) VfoState[0] = VFO_STATE_NORMAL; VfoState[1] = VFO_STATE_NORMAL; - gFM_ResumeCountdown = 0; + #ifdef ENABLE_FMRADIO + gFM_ResumeCountdown = 0; + #endif } else { @@ -789,7 +801,9 @@ void RADIO_SetVfoState(VfoState_t State) VfoState[Channel] = State; } - gFM_ResumeCountdown = 5; + #ifdef ENABLE_FMRADIO + gFM_ResumeCountdown = 5; + #endif } gUpdateDisplay = true; @@ -812,7 +826,7 @@ void RADIO_PrepareTX(void) RADIO_SelectCurrentVfo(); - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_OFF || gAlarmState == ALARM_STATE_TX1750 || (gAlarmState == ALARM_STATE_ALARM && gEeprom.ALARM_MODE == ALARM_MODE_TONE)) #endif { @@ -843,7 +857,7 @@ void RADIO_PrepareTX(void) RADIO_SetVfoState(State); - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM gAlarmState = ALARM_STATE_OFF; #endif @@ -872,7 +886,7 @@ Skip: FUNCTION_Select(FUNCTION_TRANSMIT); - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM gTxTimerCountdown = (gAlarmState == ALARM_STATE_OFF) ? gEeprom.TX_TIMEOUT_TIMER * 120 : 0; #else gTxTimerCountdown = gEeprom.TX_TIMEOUT_TIMER * 120; diff --git a/radio.h b/radio.h index e309239..3e995fa 100644 --- a/radio.h +++ b/radio.h @@ -147,7 +147,7 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo); void RADIO_ApplyOffset(VFO_Info_t *pInfo); void RADIO_SelectVfos(void); void RADIO_SetupRegisters(bool bSwitchToFunction0); -#ifndef DISABLE_NOAA +#ifdef ENABLE_NOAA void RADIO_ConfigureNOAA(void); #endif void RADIO_SetTxParameters(void); diff --git a/scheduler.c b/scheduler.c index bb28bc4..4fd40d1 100644 --- a/scheduler.c +++ b/scheduler.c @@ -14,7 +14,9 @@ * limitations under the License. */ -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/scanner.h" #include "audio.h" #include "functions.h" @@ -74,7 +76,7 @@ void SystickHandler(void) if (gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) DECREMENT_AND_TRIGGER(gDualWatchCountdown, gScheduleDualWatch); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF && gEeprom.DUAL_WATCH == DUAL_WATCH_OFF) if (gIsNoaaMode && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) if (gCurrentFunction != FUNCTION_RECEIVE) @@ -87,13 +89,15 @@ void SystickHandler(void) DECREMENT_AND_TRIGGER(gTailNoteEliminationCountdown, gFlagTteComplete); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE DECREMENT_AND_TRIGGER(gCountdownToPlayNextVoice, gFlagPlayQueuedVoice); #endif - if (gFM_ScanState != FM_SCAN_OFF && gCurrentFunction != FUNCTION_MONITOR) - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) - DECREMENT_AND_TRIGGER(gFmPlayCountdown, gScheduleFM); + #ifdef ENABLE_FMRADIO + if (gFM_ScanState != FM_SCAN_OFF && gCurrentFunction != FUNCTION_MONITOR) + if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) + DECREMENT_AND_TRIGGER(gFmPlayCountdown, gScheduleFM); + #endif if (gVoxStopCountdown) gVoxStopCountdown--; diff --git a/settings.c b/settings.c index 901b26d..9deb469 100644 --- a/settings.c +++ b/settings.c @@ -16,7 +16,9 @@ #include -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "driver/eeprom.h" #include "driver/uart.h" #include "misc.h" @@ -24,29 +26,31 @@ EEPROM_Config_t gEeprom; -void SETTINGS_SaveFM(void) -{ - unsigned int i; - - struct +#ifdef ENABLE_FMRADIO + void SETTINGS_SaveFM(void) { - uint16_t Frequency; - uint8_t Channel; - bool IsChannelSelected; - uint8_t Padding[4]; - } State; - - UART_LogSend("sFm\r\n", 5); - - memset(&State, 0xFF, sizeof(State)); - State.Channel = gEeprom.FM_SelectedChannel; - State.Frequency = gEeprom.FM_SelectedFrequency; - State.IsChannelSelected = gEeprom.FM_IsMrMode; - - EEPROM_WriteBuffer(0x0E88, &State); - for (i = 0; i < 5; i++) - EEPROM_WriteBuffer(0x0E40 + (i * 8), &gFM_Channels[i * 4]); -} + unsigned int i; + + struct + { + uint16_t Frequency; + uint8_t Channel; + bool IsChannelSelected; + uint8_t Padding[4]; + } State; + + UART_LogSend("sFm\r\n", 5); + + memset(&State, 0xFF, sizeof(State)); + State.Channel = gEeprom.FM_SelectedChannel; + State.Frequency = gEeprom.FM_SelectedFrequency; + State.IsChannelSelected = gEeprom.FM_IsMrMode; + + EEPROM_WriteBuffer(0x0E88, &State); + for (i = 0; i < 5; i++) + EEPROM_WriteBuffer(0x0E40 + (i * 8), &gFM_Channels[i * 4]); + } +#endif void SETTINGS_SaveVfoIndices(void) { @@ -60,7 +64,7 @@ void SETTINGS_SaveVfoIndices(void) State[3] = gEeprom.ScreenChannel[1]; State[4] = gEeprom.MrChannel[1]; State[5] = gEeprom.FreqChannel[1]; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA State[6] = gEeprom.NoaaChannel[0]; State[7] = gEeprom.NoaaChannel[1]; #else @@ -81,7 +85,7 @@ void SETTINGS_SaveSettings(void) State[0] = gEeprom.CHAN_1_CALL; State[1] = gEeprom.SQUELCH_LEVEL; State[2] = gEeprom.TX_TIMEOUT_TIMER; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA State[3] = gEeprom.NOAA_AUTO_SCAN; #else State[3] = false; @@ -116,13 +120,13 @@ void SETTINGS_SaveSettings(void) Password[0] = gEeprom.POWER_ON_PASSWORD; EEPROM_WriteBuffer(0x0E98, State); - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE memset(State, 0xFF, sizeof(State)); State[0] = gEeprom.VOICE_PROMPT; EEPROM_WriteBuffer(0x0EA0, State); #endif - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM State[0] = gEeprom.ALARM_MODE; #else State[0] = false; @@ -173,7 +177,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, { UART_LogSend("schn\r\n", 6); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) #endif { @@ -227,7 +231,7 @@ void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool bUpdat { UART_LogSend("svalid\r\n", 8); - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA if (IS_NOT_NOAA_CHANNEL(Channel)) #endif { diff --git a/settings.h b/settings.h index 692b175..8c57639 100644 --- a/settings.h +++ b/settings.h @@ -82,7 +82,7 @@ enum { ACTION_OPT_LEN }; -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE enum VOICE_Prompt_t { VOICE_PROMPT_OFF = 0, @@ -121,7 +121,7 @@ typedef struct { uint8_t ScreenChannel[2]; uint8_t FreqChannel[2]; uint8_t MrChannel[2]; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA uint8_t NoaaChannel[2]; #endif uint8_t RX_CHANNEL; @@ -136,7 +136,7 @@ typedef struct { bool KEY_LOCK; bool VOX_SWITCH; uint8_t VOX_LEVEL; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE VOICE_Prompt_t VOICE_PROMPT; #endif bool BEEP_CONTROL; @@ -158,18 +158,24 @@ typedef struct { uint16_t VOX1_THRESHOLD; uint16_t VOX0_THRESHOLD; - uint16_t FM_SelectedFrequency; - uint8_t FM_SelectedChannel; - bool FM_IsMrMode; - uint16_t FM_FrequencyPlaying; + #ifdef ENABLE_FMRADIO + uint16_t FM_SelectedFrequency; + uint8_t FM_SelectedChannel; + bool FM_IsMrMode; + uint16_t FM_FrequencyPlaying; + #endif + uint8_t field37_0x32; uint8_t field38_0x33; - uint16_t FM_LowerLimit; - uint16_t FM_UpperLimit; + #ifdef ENABLE_FMRADIO + uint16_t FM_LowerLimit; + uint16_t FM_UpperLimit; + #endif + bool AUTO_KEYPAD_LOCK; - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM ALARM_Mode_t ALARM_MODE; #endif POWER_OnDisplayMode_t POWER_ON_DISPLAY_MODE; @@ -207,7 +213,7 @@ typedef struct { bool DTMF_SIDE_TONE; bool PERMIT_REMOTE_KILL; int16_t BK4819_XTAL_FREQ_LOW; - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA bool NOAA_AUTO_SCAN; #endif uint8_t VOLUME_GAIN; @@ -222,7 +228,9 @@ typedef struct { extern EEPROM_Config_t gEeprom; -void SETTINGS_SaveFM(void); +#ifdef ENABLE_FMRADIO + void SETTINGS_SaveFM(void); +#endif void SETTINGS_SaveVfoIndices(void); void SETTINGS_SaveSettings(void); void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode); diff --git a/ui/aircopy.c b/ui/aircopy.c index bf44063..85be7b4 100644 --- a/ui/aircopy.c +++ b/ui/aircopy.c @@ -14,7 +14,7 @@ * limitations under the License. */ -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include diff --git a/ui/aircopy.h b/ui/aircopy.h index 7c15b9d..2c78aec 100644 --- a/ui/aircopy.h +++ b/ui/aircopy.h @@ -17,7 +17,7 @@ #ifndef UI_AIRCOPY_H #define UI_AIRCOPY_H -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY void UI_DisplayAircopy(void); #endif diff --git a/ui/fmradio.c b/ui/fmradio.c index 4928b25..4eafa5a 100644 --- a/ui/fmradio.c +++ b/ui/fmradio.c @@ -14,7 +14,10 @@ * limitations under the License. */ +#ifdef ENABLE_FMRADIO + #include + #include "app/fm.h" #include "driver/st7565.h" #include "external/printf/printf.h" @@ -104,3 +107,5 @@ void UI_DisplayFM(void) ST7565_BlitFullScreen(); } + +#endif diff --git a/ui/fmradio.h b/ui/fmradio.h index 8309e9e..9aee109 100644 --- a/ui/fmradio.h +++ b/ui/fmradio.h @@ -17,7 +17,9 @@ #ifndef UI_FM_H #define UI_FM_H -void UI_DisplayFM(void); +#ifdef ENABLE_FMRADIO + void UI_DisplayFM(void); +#endif #endif diff --git a/ui/main.c b/ui/main.c index 5211962..01920ee 100644 --- a/ui/main.c +++ b/ui/main.c @@ -28,6 +28,10 @@ #include "ui/inputbox.h" #include "ui/main.h" +//#ifndef ARRAY_SIZE +// #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +//#endif + void UI_DisplayMain(void) { const unsigned int display_width = 128; @@ -135,7 +139,7 @@ void UI_DisplayMain(void) if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_ALARM) { SomeValue = 2; @@ -204,7 +208,7 @@ void UI_DisplayMain(void) uint8_t State = VfoState[vfo_num]; - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM if (gCurrentFunction == FUNCTION_TRANSMIT && gAlarmState == ALARM_STATE_ALARM) { Channel = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_CHANNEL : gEeprom.TX_CHANNEL; @@ -282,7 +286,7 @@ void UI_DisplayMain(void) switch (gEeprom.CHANNEL_DISPLAY_MODE) { case MDF_FREQUENCY: // show the channel frequency - #ifndef DISABLE_BIG_FREQ + #ifdef ENABLE_BIG_FREQ NUMBER_ToDigits(frequency_Hz, String); // show the main large frequency digits UI_DisplayFrequency(String, 31, Line, false, false); @@ -313,7 +317,7 @@ void UI_DisplayMain(void) } break; - #ifdef CHAN_NAME_FREQ + #ifdef ENABLE_CHAN_NAME_FREQ case MDF_NAME_FREQ: // show the channel name and frequency if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) { // no channel name, show channel number instead @@ -343,7 +347,7 @@ void UI_DisplayMain(void) else { // frequency mode - #ifndef DISABLE_BIG_FREQ + #ifdef ENABLE_BIG_FREQ NUMBER_ToDigits(frequency_Hz, String); // 8 digits // show the main large frequency digits UI_DisplayFrequency(String, 31, Line, false, false); diff --git a/ui/menu.c b/ui/menu.c index edea275..c8034be 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -52,7 +52,7 @@ static const char MenuList[][7] = "TxVFO", // was "WX" "Beep", "TxTOut", // was "TOT" - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE "Voice", #endif "SC-Rev", @@ -67,7 +67,7 @@ static const char MenuList[][7] = "S-List", "SList1", "SList2", - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM "AL-Mod", #endif "ANI-ID", @@ -84,7 +84,7 @@ static const char MenuList[][7] = "Roger", "BatVol", // was "VOL" "Mode", // was "AM" - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA "NOAA_S", #endif "MemDel", // was "Del-CH" @@ -167,7 +167,7 @@ static const char gSubMenu_CHAN[3][7] = "CHAN_B", }; -#ifndef DISABLE_VOICE +#ifdef ENABLE_VOICE static const char gSubMenu_VOICE[3][4] = { "OFF", @@ -183,7 +183,7 @@ static const char gSubMenu_SC_REV[3][3] = "SE", }; -#ifndef CHAN_NAME_FREQ +#ifndef ENABLE_CHAN_NAME_FREQ static const char gSubMenu_MDF[3][5] = { "FREQ", @@ -200,7 +200,7 @@ static const char gSubMenu_SC_REV[3][3] = }; #endif -#ifndef DISABLE_ALARM +#ifdef ENABLE_ALARM static const char gSubMenu_AL_MOD[2][5] = { "SITE", @@ -414,7 +414,7 @@ void UI_DisplayMenu(void) case MENU_STE: case MENU_D_ST: case MENU_D_DCD: - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA case MENU_NOAA_S: #endif case MENU_350TX: @@ -450,7 +450,7 @@ void UI_DisplayMenu(void) sprintf(String, "%umin", gSubMenuSelection); break; - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE case MENU_VOICE: strcpy(String, gSubMenu_VOICE[gSubMenuSelection]); break; @@ -475,7 +475,7 @@ void UI_DisplayMenu(void) sprintf(String, "LIST%u", gSubMenuSelection); break; - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM case MENU_AL_MOD: sprintf(String, gSubMenu_AL_MOD[gSubMenuSelection]); break; @@ -556,6 +556,10 @@ void UI_DisplayMenu(void) gBatteryVoltageAverage; sprintf(String, "%u%%", (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); UI_PrintString(String, 50, 127, 3, 8); + #if 0 + sprintf(String, "Curr %u", gBatteryCurrent); // needs scaling into mA + UI_PrintString(String, 50, 127, 5, 8); + #endif } else if (gMenuCursor == MENU_OFFSET) diff --git a/ui/menu.h b/ui/menu.h index 626115a..d872370 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -42,7 +42,7 @@ enum MENU_XB, MENU_BEEP, MENU_TOT, - #ifndef DISABLE_VOICE + #ifdef ENABLE_VOICE MENU_VOICE, #endif MENU_SC_REV, @@ -57,7 +57,7 @@ enum MENU_S_LIST, MENU_SLIST1, MENU_SLIST2, - #ifndef DISABLE_ALARM + #ifdef ENABLE_ALARM MENU_AL_MOD, #endif MENU_ANI_ID, @@ -74,7 +74,7 @@ enum MENU_ROGER, MENU_VOL, MENU_AM, - #ifndef DISABLE_NOAA + #ifdef ENABLE_NOAA MENU_NOAA_S, #endif MENU_DEL_CH, diff --git a/ui/status.c b/ui/status.c index 2e91bf3..bf6aa6f 100644 --- a/ui/status.c +++ b/ui/status.c @@ -16,7 +16,9 @@ #include -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "bitmaps.h" #include "driver/keyboard.h" #include "driver/st7565.h" @@ -26,65 +28,63 @@ #include "settings.h" #include "ui/status.h" -void UI_DisplayStatus(void) +void UI_DisplayStatus(const bool test_display) { memset(gStatusLine, 0, sizeof(gStatusLine)); - if (gCurrentFunction == FUNCTION_POWER_SAVE) + if (gCurrentFunction == FUNCTION_POWER_SAVE || test_display) memcpy(gStatusLine, BITMAP_PowerSave, sizeof(BITMAP_PowerSave)); - if (gBatteryDisplayLevel < 2) - { - if (gLowBatteryBlink == 1) - memcpy(gStatusLine + 110, BITMAP_BatteryLevel1, sizeof(BITMAP_BatteryLevel1)); - } - else - { - if (gBatteryDisplayLevel == 2) - memcpy(gStatusLine + 110, BITMAP_BatteryLevel2, sizeof(BITMAP_BatteryLevel2)); + #ifdef ENABLE_NOAA + if (gIsNoaaMode || test_display) + memcpy(gStatusLine + 7, BITMAP_NOAA, sizeof(BITMAP_NOAA)); + #endif + + if (gSetting_KILLED || test_display) + memset(gStatusLine + 21, 0xFF, 10); + #ifdef ENABLE_FMRADIO else - if (gBatteryDisplayLevel == 3) - memcpy(gStatusLine + 110, BITMAP_BatteryLevel3, sizeof(BITMAP_BatteryLevel3)); - else - if (gBatteryDisplayLevel == 4) - memcpy(gStatusLine + 110, BITMAP_BatteryLevel4, sizeof(BITMAP_BatteryLevel4)); - else - memcpy(gStatusLine + 110, BITMAP_BatteryLevel5, sizeof(BITMAP_BatteryLevel5)); - } + if (gFmRadioMode || test_display) + memcpy(gStatusLine + 21, BITMAP_FM, sizeof(BITMAP_FM)); + #endif - if (gChargingWithTypeC) - memcpy(gStatusLine + 100, BITMAP_USB_C, sizeof(BITMAP_USB_C)); + #ifdef ENABLE_VOICE + if (gEeprom.VOICE_PROMPT != VOICE_PROMPT_OFF || test_display) + memcpy(gStatusLine + 34, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt)); + #endif + + if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF || test_display) + memcpy(gStatusLine + 45, BITMAP_TDR, sizeof(BITMAP_TDR)); - if (gEeprom.KEY_LOCK) + if (gEeprom.CROSS_BAND_RX_TX != CROSS_BAND_OFF || test_display) + memcpy(gStatusLine + 58, BITMAP_XB, sizeof(BITMAP_XB)); + + if (gEeprom.VOX_SWITCH || test_display) + memcpy(gStatusLine + 71, BITMAP_VOX, sizeof(BITMAP_VOX)); + + if (gEeprom.KEY_LOCK || test_display) memcpy(gStatusLine + 90, BITMAP_KeyLock, sizeof(BITMAP_KeyLock)); else if (gWasFKeyPressed) memcpy(gStatusLine + 90, BITMAP_F_Key, sizeof(BITMAP_F_Key)); - if (gEeprom.VOX_SWITCH) - memcpy(gStatusLine + 71, BITMAP_VOX, sizeof(BITMAP_VOX)); + if (gChargingWithTypeC || test_display) + memcpy(gStatusLine + 100, BITMAP_USB_C, sizeof(BITMAP_USB_C)); - if (gEeprom.CROSS_BAND_RX_TX != CROSS_BAND_OFF) - memcpy(gStatusLine + 58, BITMAP_XB, sizeof(BITMAP_XB)); - - if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) - memcpy(gStatusLine + 45, BITMAP_TDR, sizeof(BITMAP_TDR)); - - #ifndef DISABLE_VOICE - if (gEeprom.VOICE_PROMPT != VOICE_PROMPT_OFF) - memcpy(gStatusLine + 34, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt)); - #endif - - if (gSetting_KILLED) - memset(gStatusLine + 21, 0xFF, 10); + if (gBatteryDisplayLevel >= 5 || test_display) + memcpy(gStatusLine + 110, BITMAP_BatteryLevel5, sizeof(BITMAP_BatteryLevel5)); else - if (gFmRadioMode) - memcpy(gStatusLine + 21, BITMAP_FM, sizeof(BITMAP_FM)); + if (gBatteryDisplayLevel >= 4) + memcpy(gStatusLine + 110, BITMAP_BatteryLevel4, sizeof(BITMAP_BatteryLevel4)); + else + if (gBatteryDisplayLevel >= 3) + memcpy(gStatusLine + 110, BITMAP_BatteryLevel3, sizeof(BITMAP_BatteryLevel3)); + else + if (gBatteryDisplayLevel >= 2) + memcpy(gStatusLine + 110, BITMAP_BatteryLevel2, sizeof(BITMAP_BatteryLevel2)); + else + if (gLowBatteryBlink == 1) + memcpy(gStatusLine + 110, BITMAP_BatteryLevel1, sizeof(BITMAP_BatteryLevel1)); - #ifndef DISABLE_NOAA - if (gIsNoaaMode) - memcpy(gStatusLine + 7, BITMAP_NOAA, sizeof(BITMAP_NOAA)); - #endif - ST7565_BlitStatusLine(); } diff --git a/ui/status.h b/ui/status.h index cfa32a5..2a98c21 100644 --- a/ui/status.h +++ b/ui/status.h @@ -17,7 +17,7 @@ #ifndef UI_STATUS_H #define UI_STATUS_H -void UI_DisplayStatus(void); +void UI_DisplayStatus(const bool test_display); #endif diff --git a/ui/ui.c b/ui/ui.c index 43956a4..efa9ca1 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -17,14 +17,18 @@ #include #include "app/dtmf.h" -#include "app/fm.h" +#ifdef ENABLE_FMRADIO + #include "app/fm.h" +#endif #include "app/scanner.h" #include "driver/keyboard.h" #include "misc.h" -#ifndef DISABLE_AIRCOPY +#ifdef ENABLE_AIRCOPY #include "ui/aircopy.h" #endif -#include "ui/fmradio.h" +#ifdef ENABLE_FMRADIO + #include "ui/fmradio.h" +#endif #include "ui/inputbox.h" #include "ui/main.h" #include "ui/menu.h" @@ -46,10 +50,12 @@ void GUI_DisplayScreen(void) UI_DisplayMain(); break; - case DISPLAY_FM: - UI_DisplayFM(); - break; - + #ifdef ENABLE_FMRADIO + case DISPLAY_FM: + UI_DisplayFM(); + break; + #endif + case DISPLAY_MENU: UI_DisplayMenu(); break; @@ -58,7 +64,7 @@ void GUI_DisplayScreen(void) UI_DisplayScanner(); break; - #ifndef DISABLE_AIRCOPY + #ifdef ENABLE_AIRCOPY case DISPLAY_AIRCOPY: UI_DisplayAircopy(); break; @@ -79,7 +85,9 @@ void GUI_SelectNextDisplay(GUI_DisplayType_t Display) gIsInSubMenu = false; gCssScanMode = CSS_SCAN_MODE_OFF; gScanState = SCAN_OFF; - gFM_ScanState = FM_SCAN_OFF; + #ifdef ENABLE_FMRADIO + gFM_ScanState = FM_SCAN_OFF; + #endif gAskForConfirmation = 0; gDTMF_InputMode = false; gDTMF_InputIndex = 0; diff --git a/ui/ui.h b/ui/ui.h index 9476505..8a107d9 100644 --- a/ui/ui.h +++ b/ui/ui.h @@ -26,9 +26,7 @@ enum GUI_DisplayType_t DISPLAY_FM, DISPLAY_MENU, DISPLAY_SCANNER, - #ifndef DISABLE_AIRCOPY - DISPLAY_AIRCOPY, - #endif + DISPLAY_AIRCOPY, DISPLAY_INVALID = 0xFFu }; diff --git a/ui/welcome.c b/ui/welcome.c index a2c4152..94393b6 100644 --- a/ui/welcome.c +++ b/ui/welcome.c @@ -24,13 +24,15 @@ #include "misc.h" #include "ui/helper.h" #include "ui/welcome.h" +#include "ui/status.h" #include "version.h" void UI_DisplayWelcome(void) { char WelcomeString0[16]; char WelcomeString1[16]; - + char WelcomeString2[16]; + memset(gStatusLine, 0, sizeof(gStatusLine)); memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); @@ -42,6 +44,7 @@ void UI_DisplayWelcome(void) { memset(WelcomeString0, 0, sizeof(WelcomeString0)); memset(WelcomeString1, 0, sizeof(WelcomeString1)); + memset(WelcomeString2, 0, sizeof(WelcomeString2)); if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE) { @@ -54,6 +57,10 @@ void UI_DisplayWelcome(void) gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100, (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); + + #if 0 + sprintf(WelcomeString2, "Current %u", gBatteryCurrent); // needs scaling into mA + #endif } else { @@ -63,9 +70,17 @@ void UI_DisplayWelcome(void) UI_PrintString(WelcomeString0, 0, 127, 0, 10); UI_PrintString(WelcomeString1, 0, 127, 2, 10); + #if 0 + UI_PrintStringSmall(WelcomeString2, 0, 127, 4); + #endif UI_PrintString(Version, 0, 127, 5, 10); - ST7565_BlitStatusLine(); + #if 1 + ST7565_BlitStatusLine(); // blank status line + #else + UI_DisplayStatus(true); // show all status line symbols (test) + #endif + ST7565_BlitFullScreen(); } } diff --git a/version.c b/version.c index 2aae6f2..685160d 100644 --- a/version.c +++ b/version.c @@ -2,7 +2,7 @@ #ifdef GIT_HASH #define VER GIT_HASH #else - #define VER "230913" + #define VER "230914" #endif const char Version[] = "OEFW-"VER;