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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�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 PGAXeht7l?J0qX|<&G6)P delta 58045 zcmaFT%ynls*8~M7l{piYl2f2NmxQ|%Zp32pw#@L}ms_7A&%aDU+a@$dNu`|W=78SR)w85Ehl znY|`EFxjsZ}H)m#S zWn}sPebb-q2Ur+w7@1bGZ2!l~Siq=qz>R;4{8mOKwv`+wgPfQrGE8LlU|RYA`-8u% z8#wl`Y>;rzW}7~Vol%WxA)!+VtdWEX1lR4%$2>_!0_Sae~_+aKN1)Y zY-0Sd=!bR(lVbEP4F>H7#t+6n89w~}Z@#x+D+>dIrqu<0MMV#W4?F)W_?gyMFzD)D zl=seJc(LhX6r<_??^pjT>3+NTOM&r&*&j&-DbN4k&-|BEko5fj{ltG81;!8Be;AdG z3s@CIJ^z2-|6kObS>cJql1+*X|G)3}&!xclLHbXFA}15Gf}->P@9X~;>}68m_5A;R z)&Hl@nH0D^|9@ZlpI?#DgW*H>{}0a@IO^FP)R-9*Zfs#-uvx*tuxAAWLp&D)1IOS0 z{~4JW7#x`x7@Xy1I0|fK_HJZ8DZ!-h|9k6yfxRF(4sU_22P9fHDKaoC{Qq7Bw*2mI zgyn_*1@?l>VeuB&D$&5M@c(!85LO=ggqEO82{%` zV^mGv#H7gY!JsX1o8g1je+>r44{v^JGH`n^d@up?p8nQkVE177AoD+kL4$$Oj`72t z-%mC%=smhvu$SS3()9n_jH2S={}~k(7#Kb<{by8Q{BYzq1DN-Fx;77^qW=2d0?Le& znG_{F7(TrEm&>qrlO+SIv#1Bdhj;%h7#Kgy|82=2=)v&e8kjd@dNmKDV*TZRAd^~t zGb*xpFnl=kk4cfqgWF{>XkKM zUM$orQ~trc67qWq+$*#GJ$-(_4P$-uk^kTKGB9v^3v8X?#BqaBkwxMEcc%XgilEf-@1MY421REX#*3^5pPz$d zzW!rW{P_HU+kd;&i~?H?75;yh_{*d`!?|%2h&}7Cz+RADEDRtX_g^MuX6Kn;nclyR ziYFNooteE06;4WYZu0(%v9GcXiv4<{wF)dICdx}I^AZJbeN+o&2&bDW5$ZR4h5z4w|H)8{RQUh>`yV+4#t&>i{(pb-9}8C6+zZ9{`>!Z`#*ub zTFeXz0$W)a{(rCc`45s<{EtBqpIITrNx|X&_u792U@z7G`Tzate}TQ1FEcPGTL^4b z)R4OI@4Ma~CrL1H0F%=-MHr=(Gre1cF`n_x^w%Pcvi1D`|9_wT&w_#B1J{2>lLya1#W*j+|L+t3Jy0xA z;AHy${mpMK&$XK}oeLE_c_40m{2S)Z8-M?QclmFm!0_SqzyIHt|0~!lyG(>ZU@MCT z$BlpAJAX5CaPjaluz3b4{QrL9x4>Rj&!5j(J-Ct;s5u4znHyMSY#YnoJ|rm7z*|taARQj&t9;Vl_67skKzCKcfVK|m|3{5WGVdr z{^A#pw+b`EbX74%L5VxRm>C!pq*%URxxvEfeSjyznZ@(p_uapz`-w5i)O-B~Su3#B z2poUTzXkTXGJ%}+|GW0z1B!tPoeclKTm1h2-3pv;|9{u{2TDf&zu)`+|GOHP&8_hN z`}|)FtPK1h86JiI-)H=4;6AVk#+&$yfwh5O09=uZC@_3b{@0*r4~_wz-;wnS5}yCR zbNp6ifMf;c-yWul9q|fGCjY79u78mV{GR{6fBAJ%g;AB!=E)`o9nOmk zilCb9)i02WpMU>JKaxt^W1@yWl@iO4;$3ADkQ){Q{L*0SXKs*8lzg-TE&#SakZY|KC&pf<%}6{r}zI zFC*V?O=-|2^U_C^Y~70o95HEPwxh-!WZVl5xM(tUm>N z1-5d2c=QXDvN%6HgVL9NO=po}bkJV2D4-Ms*|KYj!RL)4Bs{}d^kRxQHD{U zfBkPRMRAY+-@pF@1<#7<_A-pBj8mtl$}mPUW=!8N!zjrZJ^iK(V<4l^bZuEiT}J8Y zk+O`Q{NH|YDf)W+|8DmWDJyeC!5~Oy5 z3Zq8-0&WI{1a1a}+dK>kGRzDLO5O!qWh+=17<4r+D0oX(uxRsKV6xV=CH5fRoKJ5O*>kVozFkN8zu=>Zf=ZuOR z42&PD{$6~3z-==JgTiG_28Hz;3<~ue3U%lDHWZ^0^ok z8n_u03bul50J&J;CZ9LIuUrMc4}%`}1*Q*qKLQjPlzF_g3j`Z@y!eDiws)g7a24~FEFZjd3*cG6c|@{c`|5oUC>o$w7$K`xWHq2yegw?y`#4TgN*@0 zg{`q{1%p=1MF!2d3l`ptMp6YYo-?RwFo*_zn?QI{QrLM-}LAIzZ?Fa^8EjIr~eb5YcMcqGFX7iGkU{DZFVEu65 zAB(qC2aC5<11Lv;lEn;e28C${85p#t?^I(nXJP%|^LzRiHAXEi)(^pdKt8PbH(f)W z(Ts)lgXr(+N$QL`^{gL^fB)CGeL(39kfeZ@eW>65}Vo-?WW>Bc(hB#~+ z2ZI90kw3O>^k!j@uHa=5V_?;0y2zlw`a$^TT5qY2wcb( z^qx?EvyxGn?E~xY+1`wb@&!}8Z&b2=IPe?fp_hLx7&ty`_|fk@yM{sA_(IooUkye{ zQM&pE_UiE#s*o!9_g(Er7dTPfzQCZws329q@}c;rsLquO zZPRCKFiMIxfNf{J0Mew)z-`T}&3U6{`biB&S#y>To+802&Y5`HP+5zXroa>E{f3;ujfo-eom^D~0fHZ)bd^LZzJp-lY&CeKg87^*k#-yz7C0wxP8KaV#w^YH|XN*d!-ckkE zpD}_<(tFPsm6W}u3Y07UYcpJU{|uD2-aM1=zESz>nKmdzTwr=G<6RFb9zX?b%YO!C zNiX37Nnem8>jmZy;(wTxmBEQg6fDMkf%Sv$Ur^#ws9^sv>EC~4mr}jg5f;6jh*t7M3(KMKvBG%gFzvWi$OtP`cxf8W2VY~(@*Iz8r8#+ zM<%qC0~NoZ60i?cjB+t3NHa4i{MhQ~&B_3ZGVhD_;3#9dz{v3TJL^AN9|pC>m5l09 zPQi}WUMz~&LaaRgeLwxz%3HqR@At)jExn~GHaT%zNUq=Pq<4YQdbgALO-4l%Z^;4^ zZ^;SOiEG(Mt;T_#^9LNz2Ko>;Q9Bv$bSYUeQ&7(;|z8Mhz!F;Hj97XnSN?8 zuzX>qCY{jpaCY~=ZiztogG${5%hlsx1M7z>U+m-m)ykoT4= zIP_eZVUqD=6X^=Y3TZ}3=MBozO!XcLlFom>-~D&$Iir%ew^YIH=L}lgFDBP9Xm7c| zs3`0$Ss?5!*&*yL*&yt_>Ul9Yq+$Yv5Gd_~Dlbq(fI<;eKY%hCs1jPSnSmjM8&Z+M zDm73&lEuxS(1R4R+|y(A7!{LQK1}+<%%Gf5u(#Ri_f27jpU)KzGBBhZWME)W6xhn+ z&Fd2xrjYUf`>p>98LS^%e<)GGy+xVtlm-upxO}RAdo{q zmVz9xZTdq!MoEsKe@qI0zaRfQok^e3NS5ojaRuXKMq}dw#t$t&7-#d#t7%wt@ zcsV^#pHZ0U=dbB$`iwpGO8=GFS+6oEN_w*?NEZD4F7=;B;qQ0nzZy;q7Yd)}KR@6G zN_!ey3<|Xz3<_Bs3<^=urduD#%iIhKe>fQwdbt@CCU7$-v_aD>Xh`S>xY}aIlQGaqBEs6Dna8(Y~HtP8MGNMuzpzm8&tB+`w8+YC=-C<%qxW=t3R1w&lB6>n&Nq zsL6G)#*?F?#*?F=#*?dn$!O1W2JJf+B_4uCLHGO>c~}9~#dk3SOeta)zA8qQ7Oh-s=go=B7E`NgKY2U`pHfV7w0@+(q_2u?g8_M%|Bm1 z2m#lx#usMEF={d22nW}|Ru_G}68u1Qap47{3I;9Ki;UX#7YuJQSu<*T-88O<@@LRa zy8vp9FzTGRz@)=);rN4KaPTu+JoJD?G1%kZcZ=U5N8Qa~FKU^r?#s%I03e1(sgI1&g11dVP8B=q+8tpnc|oJJ{hTE-)y$dNZj=6&!x9 z|_w0&DLSBdLPt&(*voE7ZLiGzBiGdU94UYVur^Dln@D zx1N?=`1jraCn$cIR6wqt_Z-x2{%{f0vexxZHhT4(QDw?=2AydaK~1sA7ZkyM>A%1S zYAstcYIoiE_g()dqek1sp66SXl%UOHMelddKyA}%ZU%*1E(V2oZUzNV+63jQ$=s0U zU_B^N*K#o^^gt7NHK>r~Vo(5OKTvrAsxLvMYZo+egG$sgE(Qfq8xxdnGr1TP!a?&+ z0&ETy+zbk!@}!Q7L7|3=K>?I`K-m{mDz5^E7VE{8V4Cs5|L+NZmP4BK3>PjvSmtkC z!K^KRVJTQz`oa=$qelF~VlZF$;v#rLVz{~gfp!J6Hp7J-4?xMT`45BgY%k>k;ey#- z!UePaj4K$m*)L83>u0{e^r80`s3NnjnCiouw1aHV9;Q^$o`@57lU$(mvBK1 z6gPq8`7ShqX|4;}6)f89;Laz@O~wyazZsOPyo3uL*Dz>vU#JADVZT^W?pd$CoWXn{vA15K_wV=1 ze?Y;)aly@7roy;F#+muz|L>VUqP%4aSUw#7$)&8_07{e$%E4a31wZ!w|33AP+w)+s zgP1RZqvE3V^Z(!Tepo;E_Y`j6F8HggRWVUc(uv{X^yh}q5M{V9@wquz55t9?=dRw8 z6|SHnt6sz4f{O=(ru2mrMaBk3Erttq&(*;hkKsb)b5L7@;X>(iP-B%roBslX0?UWn zKN*!QL0uDYwoHG{*wL|xLG$57iGusj|9{u}tIS|+49Yz(E^sLaI~#Zj7d(3oYS;!n zXH=9dVAW#0$ns(5Pi;_}{i4V7dIlv8Z>a*-4^BTItswj7tO_h2R{o5A4l3S3*<}+4 z19*4=R4IW{ax^z2^@F;3pqv4!H9q*;$)EtLLqN@1P@V+UFU{Nx3SH1V3(Bi;pe8Q|g90RygrITHd{F@0P#3xI z_xrYgeBKfbY#$!|<5GHD7woLv0BY9%{eJAv-|sSi85B7f{(kTIE&u%A_xk^!8COnY z?FNbGAP)tCEEeKoP;mDy*eX}Spcj47&6ibCyTaAS&4WSP;KIM}>whq4XkJjRU^KqH zNx6VYo9CtxgCT>c!oTl7|J!-%6-Zb7*JirFsAL0f+6qorG-s4I`1k$Ze+Fff0__I1 z2cZ1-^!dN{ z3`(FGLY;zt-`D(~zQUYQfpPZqlje+y^?xvzyCko3zWYZFECmQH>4u5bt)KjcrGS_vVsQ31yJ8XqJTkz z`69~)(;s2pG6gYUQ+Y2$gY|G;V6?8Ey-B!%L7U|w;|G(Uj0$WY{{9aI_vN@Rf~rae zZRQJ%)}Y#q`9UC9Gt-6t-|znWzSqxJr-DI8_5!2Mw~N_s^JOd<7+3uL-u9PG?%jpI z-%tK!(sR7XID`2^`M>`fkr!ON^$H{koW11=oV{fVm=)MQocw?5Ipd1I_1{DPGH6`A zVDHa3%R0j<;j+{%@!1kKe!&jO+Dvy$Di}?kY%(bT8Ejm^q|I{U@AuBXX5P{jTc2BG z{Qchj_rJ2P7qfzJfiAcQtm9=|AY7miu6(r%*gj1E|Kd5Lp43H)4(1Pu|Nd);UQqH> z_2RBj^l5eyzo=Hhs8=s?Q5c*Sg$o$9nQt;FYZpj+%M~yxa}+2SfTCjM4GC|FjKAN* z{vLkLpe$VQ@p%Qb@&i?dpj-_aXai*|P|k)8;=pn!D6@fb@fv8Z&*o-OIK{!Bu!n;| zVHXF3!fwz&-boGyg##Q63P(UAJqH;Wj&Xpx86x0X1ytnU-XvVWpv`oVQAq&Qq6LdH zf#Sa4$6m;Aq5K6NUtS+g22l5H&(B}VS{>00vz%CNaC+bBQ0|!J^y(7(hnAo4UNHxx z_I||4piuvWlR@DMCxgOHuU$UE9lQKMX`XEGv1j3Y;xP;n`B)BFl%H^?yKGxWN@W$ISw;QkDx09}542GNaYMJg|t= zgQM_Fd>^CQa z0w~G9;bc$%)lr~v^jka(3ZNPnw8jZk>w=~cKouD%e>QM2D1b(6LHQdrhy)q{2Mrp9 zaxf^|k%x|4ct*#~8$<{%^XNJ);84@9(jHr(4-G zS}-m9z2imV=I?03xi$-gC5UC4u5_nT}2B9whsdT z_7!VaM9F9sFne7IVSK=+_x5#B9U%;qIS@n<^!km2^GWK3xC9 zsHosASs?A*Xe?d9q|I|d)2p6YoApAslki310ud!OZ`KEb1tQ=a(~u#*@r zMm=Xx;s=Gyb6#(;0=a@u&p~4zpfm}}QlNASYOI1%_h)Vf1$7<^F?EC6CaRoxGorb8-qiNVUiMq5jeDpe=x5B z4I}FK>icOk=re$ZRa?v%v~4b0bo~AP;h#1`J!mxb&v(!Nnhe?uS`0mgoE;s;ZAQ`^ zLLFVEj1x6G6c`vLGAjQ0zT!WNqP)l7@1DOH6buUfd>8mH@<7~M8fu}a*Rki4;ILx9 z$fP9UEuCRtEL}0#nNged0>}ZNq$upO^SQ9k_UF7FEQ)`>oBaZ{r>*NdBxJ0$8E)7p zG;G@T{D2!Mm_Q)`3I$NG!GbXZI%Nb3Ay5GW8vOx<95W9CXo;(Wur}8XR z2P76KH*AV#nBmmm=-^b~-o(M6!14G0{~udLRQVY687vuof8YQ6%qGxCZ~epn3>vH# zmq;?&KG?*d`|;v`6$OSLdl?vhY~}S~P*rDG+^cV{+-6;|+KKam8iSr0qoP3tXhiP6 z2J=PR0!CX6h97&Gy$uQ+7!F4%w|##Oax}<7fvpTGoZc*oG6kI8oE{)jrs41R)jv7B z6&Vy5WD5R#fAW)2iLD;g%-IWSH-XA%(6}O~{RHwYD1iuX z44H0!zo-7>Fk$sxvT2Ufw~HD|{}q`%*gow0Exh-DTLvEk1ITj7OtrWNi=r6A-|vM# z8I(l5MLneoxGE}?8MGKK20hM;DUu5|&FQ<<*W$!< zV}cXgO(h1YHr@h>zCYhT{4ChZ#PA)uED_{Tki$1{Fere!ZL2sK6hIXXsL}w1M8Q@= zZypBe3PA=29j1#68p5Czn%aLZGHCp|pbbhd_1YpA7?rfVwS1%s6e@(38I+hmSo~Hf zc>NsI9%llNvp;(cMMZCkzW?7l|1&B{dcS%u>!Zv78HE$S zpvs_Us#kGxQ-Q>RP5-~M{Qs}Pd7;gT{eq~s1~jS|!5O?>q3_T4_Mi8jFY0~V7bvl) zuXEExC#K6YotSS5Gbpz$Zhifno8i~<18$%y5#%$_Tsdeu8Z_Px@;Rtg3-T!_*g?}M z3`zpt0$ZgD_`L;uq$?&nFxPi0Yi_=56 zfYVF3;P3YhKNyub!07?mU|7(C(gw%@pdkOgm4$&_ftTUW_bES^IcINToXn>z?I+_e z;lz58QNh89akfc=b;G~CTnc}_H~(l*VrB?p6mSrB`f%~~CQj|QH}5Jj&K6>nwEhq3 z6is$|dU=hL$W7yp$5M>iEElaiq*(7<5!SwS)3}2{L0Xzo`#Ms%mz1|7%pT#m<5h!<_j~uLDK}^_s#(GB`!_})1NO+^VT<(t6)@N`Ox}zitiL} zodT%}20g8di<~$vPVy40Sm^ZRW?+F>!Tsk zxBc1b%{XCJU;P9prpvebCOEO)WKyaHSD)Gi$DTKAn$arJ_UC)ej|Ok02TWRfFES`` zseo#Esfy@|5NAf~ClXIKG3p6k1QjBO|1xN-yin*Z#h_;-Qc&uZ!muC;q&xOUp|@PY z{O7_tvu+f4%M{Fd&Zx{&knfr7#a)o*DO|u^z+A5(e&hG|n?L%Q1Vj>j8CA3x^o@io zk{v)JXNUeWXfRx;eXh~B>p7#s-|t`kR6S=<`1PDgS-7C|IVc|&fd^>vpEIfkdk1*Q z76?`Nddn6tXz5<`^D~C#1%Zp6;HD|(g#d4ZKIw|p4!)idLEhdX1+oP}&+DDM8I}B= z+kr<@1uhsfFe>U9OINsfMKgFh%?$egz2UDx-|z1~|J!@p6v!4>J-02ecVEXtP{k)c$-C)Jghq5!7>i`y8~s=+$#U1_=g+56getf5ySU@ZtTB z+s{B#0ymy9Xfs^6^z6#B18()8W-h3-0_A5=_5x)+P<{sGb5Nc?0ctj@GcbViHYksS z@;<0&2IYHDX(zB%!DnHgLf`-I7XQGl1r3vn4BDa>WxRwN7?or|(}K{5V7#c@x42cp zgGKSr_kI5u6~w(I3Rvqu{QoDgSJaccLRg#m=Kt?c{xT|jc^)NmX%kn0LZ5(VG($v? zh}NeIN_~&}W;wmP#OuwVBw3-*=eg5C>3|#rDl0&a0+kh@asuR7 zkfTAK64=V9!sX5FB~t(jAucaP2H^%y?|O;8-`|)0V^QSr`18HwAG^0q0SJR8SYVYB zs6qmT2;5L^1_fzwbg^Gx&}6v?TAv20^Q8(3+!-_#E{cKVH25xxf>Q_MMbOj@qxOf3 zj7mbD+!etN+y#Q(FP`&wF@gra>Xn5H9zW;v1WmB~xWKF^Sis};^*Mva%?pf5T%O%E z!4BOeoZc6ogQ5ZyMWEgd$YG#p14RSKXP|W^AP0hGvVUx4PzmyuDOlj7dJ!~=v)D=Z zB51mqQJd?cKX_=H_X2|g(}&D|49Y%U$_4ep1q=$zAI|+@Q1bGYDiDA0@B6-=9^R0V z&{yD*P&Y5(f)~$SLB7)FxWM>9?hj~S2ZU|CWeR@mbpp$zUUUT0(HBj;gen5%7&X~$ zm_nyNK+_v$48MT=&8iLh6xWFi&Wa2GVU;^f9UNH7CncnEaC|qygYv7+9 z!mKHF5wvP?;ZKVKO$JaCR^bPul5&M{fi`FyS4j&*DocXL@D;p-3pPDxQnoI5`CP>7 zz;j_QCPm=_WpAkpA@5mbjLM2$!UYg42&Ng86uldsGklQ$%>=G=zCHi{ec>NQC06er z&o9*TKt^ss<36AX5YWIXC_{ik88prVYWRZ24MBZEPz-LkHh za-dcnsEzxR6S7zfwCyA#!=uWjF>+o)71LW>88uk`e!usB z`UY1?dI3~$=ssf5W4QR~At+9&e}I-ea6DpEo$oDM@c;XfSB@80K9 z6|7neH@csfdoZt*DPa0w^sn5Tc@}8$faPMDcbVs9iEbx@o2B)h49Y!jr9Lwm5+Wuz zsoqF%bByS6QoNy+p=TsmG1H0X0%+XM!us~6&!OKWHy1E}aQVxmXu-hrq3XYG2J;MU z25$rA37~pqW%q1`M-faPx_>h&C3$Nk_&#SeX4k%SkwG~C+@Ayu%D6lSO>kz&@f1iE zaA+{x{P{rn*LSVIth(;;*|`P9wG3X~QW=x$A+w`QHyM<<3$&kmO~2^Qs8|oN-_BdA zz|MP;gj4~8l8HCpb5`Yd&o|XEDKly@U0_sZ(qg-~xr|ZS)=Rhmgx@?bs$Qlwx4| zAo35C4sJdB5bE}vp!F4*rMW1I}ijX=x*z015(R0QR z-aqx9|NVaAhy61z@Q5M91>EU5r!203RA9ruL z0tauo0@Y`X%GO@O1ukBK6`*M<*=HgJ^-f;Sp27vrUNAhNZb}(Pfs@yXXNn9UcbEU+ zdIqBR|6v2Wnfck@@A5wwo{8!*-2D3#lxM&E{{0sl?EgRY|L?!M|G)l^kp1uRfL%)kwVY>wEU^>2ltT#~2q(f9lO>&GPH}pI_Tmd>C^W8COo9 z=*y_c@%qQT=fA&S{V{!)FQX5m#dLN*Mp-8D-_zCn7`5W9jqf~{_m;|#_jWLrDq#HJ z_>WOp)=RiR-b?biq_mt>F46!;$G4jjMkIOE1rvZOJxMh&2kj>?la!^T)bDE?Pc$R-a1Fa*O_=8c&z}wJMs=&~j$w;cez=P3< z^@Gf>|4N`GNXMS3c}r#JdRrQ&KUeXV%Fy<gDc^DKxZVLvj#fGj;1iA6+gRiXL9(-jL*xKbSQDLePeB;-5!5`Cq1u~k| z?`1f^aG2p3!&!zPFucTYmEi`%ZHA`|FB#r4d|>#@5XA6};TMB90}~?)BO4q9eY~YJw2h@Iwm zI>XTT>vI?HTa~jVq$*cEcl5qhxBNMSvc1>Enwd@~E(q5ieQx6|RX_K6y|s5#-K^)9 z-m~haKezCXs-5!O%sZ-P;&W5)sQSL=#@@4PyPq3*TNs~vZsaYUp<{gNxq-KIhOY6k z=Q`fEYHOcsds`bHc&_Q~V7&LahPRXPuIFmrv+Jil2d#XSU=U2HgMt); zB*XXT^4@*ME1t`GHyST}F5}%)Z@lQalsA`Ri?Kw<&+k_M8#YOJOC;nx7Y7gDO?fT~ z9>$*VT*OEJWK?EQl4LmkoZGwdIk$KD zb8hd_=iJ`K&$+z|pL2VImWhFq1}M>kk_4!}0%Z;jY$+eKuJQX;*l0rG!=K-u{G09* z!f34u?<-i*hm*M>6g=b!k`xI$kW zv=rmaFP0A})4jtOr5W|6r-w0S%M1NtQj+qPD)c5E_6uM>?5pYote}3n|+Wd545M&f* zlw$N^jD$i%5F?b4K}+KzgQnUA(25~OZT*W2y@U&xKPdcUR$AaKRj|NYs)9*N{AP-x zOu@YA{t=Ag^`bYF7!*Mpus@vqJI!07V4AmV!S}rkT7NDwX#Tn|8C-v}Uz`M{IWICP zb$Uw`ynD{59elADEcW#xqgu0nv$t)9T)|eSpbJd8(H9tW?_O*JkN<03Z1pu__@$_k z!T90IFBS$Ph9*xC``j<>j9Hr&Z@O47#kr|gllks!sb9vDn|_%zZ@MPMIC+k;*`{cQ zc}}c%n>WptD)pKzA-AbPqQtw;N%|I(l1745L6Ns~#*F&o8saxV$=13c15}C^fPy;h zZwjd71h;;emEydYKWElnd|}OVMkSpDse(t(LA|T@&mqkkh70wb&zZr~B_QGE=aJqq zKA@Jf=|$CyaKF{{1{sW#89$i+GR|OPV4Mls`OW_iwB7);hCakgIYX#Isxa6~s3NLR zIRlhEIgAufDjxFkVmB75xK*y0;p^31f1y%D;<&cl4F_-O3gtrK5N4(Ba?n(wyEmhi zRDA)1@}cLN3=9g4A2j}HG8iy0eo*;m>!q9_SYhiWStwK?SsYauRebX~Hv_2c4Qih+ zF1Q09k6HIm6KOm~8Jrgso--;dc*%JR7jRX~auT_~q$PU+G|(jST-r;dK+8+8Lfva( z8IvNYd0P)6U~OHN=a5N!whOQ}o}kyokl5#-)_D{-vweOBYNdU6#;DBUC0rou_2fAy zXJ!0(4$fImz&Y#Pvj@*WX&O|)!15L-UxCs$D4m1mDnSia&=P{edL{;jdEAhu0BBvo zZsQZpr!zFXA{&CD%kq_d({ud51s!teKj(e7!J$ct7p#CGit0Cs*uiT z>1O<3^H)2AQQ?;CwemU5j31W&SMXNwk*ZMeX3)~Vz^Eiupq(L=$!=UPkfD%ps~$AO z^XvQ3zX}<@zdQT@ZHof!xA+fP;tgJ^A>k!lKrAlU3mU(bDo{xH^?ml=-{1LvTm?^q z!h8)10g$IRA7rR!04=cqFRg&Cr~rimXkMxh%i3Gef-F$bf@W$#tBYm5r7C2-B?~~S zsk@zIFUojJR~*;oyCLm8qf%0Wt57P0Ns;lxzdwu$j33nhGb)LJ+Ye$sV%`cF(izMN zj2}X-{ZYtZ{Gj~j?Q;Pig^cF< zbq}~1)lwe#p{df$cDPQ+728QpP3<^Iu859_}rgOzIDlirO zn64AcD8apj2k(268&?r5F;w&ka z56gZjF)%1vFtB`BINdUiQJLk}_fP+)C&V#&)L#G@F38|u!p@*@frCLogq48-4_AO%%kLK%~tE?#6&s`O@1lq$$@YcXQ^An+^8Ez_;c zTex9SrLe4bL#g+I4(W=HhOR=;1WOUPAZEJAwDQ;Y+W!kHISe!0{(lepw+?P~&z3Zh4vfR?Wg&UZZgBuoiOm0X5YiGUyS$4s7kwI0TA;E8P1OEV-5^|G>}};GU18|KCmjF=)KGsL24@ajHMPK7mo%x6eqRK#JiYnAGrGVI-I! z#h~uF225`Ui$;{qD4S7u+*qPO$@_$nbcH|xt2X0Bh7T40VX?>IC7i$unns%bF@aIK z{tO3$0%#ExsGB0g3Q4(A%nS;0tPBiyI2aTzeE9!AbKqf6@Zfwu4T|Jz3^Ab*;l)Q$y(Sc|3aa{ z&+qg8vnaAL*n9k{|Gw-WXvH4uMO$zTGG6%gUFMfHXsin~D68=EyZ(O>h2P&5elM2$ zt0c)F=)gEp*opPR9R)@m=8L}+8W z_ji`xjI$ZE%`PzN*kAnhefKYr*sou|zPJ4XnfmotJ&U58$FJ`x{{occy;&8c8h(F& z{R^a!RpIydXTJ;?K(4*;A2OrNe1Sz#*yGptxPPE^xJ(xq6n=hx0ChfS9XDuv`PcV} zzrODUSpc%?=&xVj1Ho1u__hD}ukY2rK#tuD9wrA3X)>4!usML%vw?cgp!I8@v2uZ} z3<|%#^Z)zxUGU%U?`wXsc(ZyjDo7<5fVxfzzrHj5n?5Uv(FxQe{=5A_65|HO`k&uV z{r>rV!SA2nSNvw*z_1r|cmfZ@&+nOk8Wb8BetysW!=Ul=f`G!$?TJTBU65VSNREAYx?uM#@}Dx>;8cDyccZk*ub(zKnZkg4f6+?|IZaT zloS~l7=L}A@khDhxHiL0hI-{2zFG`UM#2Tj6`a}(HyM?+OBPpffmzul%9V`Pp#3?k zOOm0i*CmT9q3TK>RSL_nXffPmQPyH`FcL0MWZ+Ob=JD%$)}Lh167ic1%BxEkS1^IB zQC?m4r~;t2^Wu2f`*lAG+vz{sJbUH0p{ z;~(XU8`=yv&njydJchEe3z8vzP}VL~t_1r=IlFLig%pE@(WOmnS|HV{3z935`Hbs0 zlnfbO7tHne^wG?-gCXOlZ`t(8D>dL+SKL5c=LnuY=+gX+61J!D29vQCW+@ z)=0SEF_;GmFFPaQ0_92$?Rtir?8;gU_MixW1xop1XkcqGSQrTxfP$Gxi{U1dvKE6S zG?Rr!~MUYc+L0t^?lv%WN3hEF<61E2Sp`=vKE6i*m_2AWW0qs z`*q>3`tMVJD_00AfZVRdz^K?~l;I*=@aMbEe=TLu%wckc7K4yNy%D1#L|oy&GFW_Z zg%(2t*hpruky;FmU?16NGu&iV)?#Qf5-v!pOwnSvDfbYx6uiY$yCFrHWzC|>Sx$^M zqO60Rt$no^+KlRj8&Z@X!3DJ#I*f!HKncm#m{pL_qVEFU>#6J!tW(GwDEf3H*tfnXP2TyQlX?XnlF7cbA9;|5F zKV~^q4~C0p9)JRp`GdvZ_s}5v^_>lB(2{@5as!N8GH;3 zTR_biJ_d#xd<+br1uF}-FfhE}V_*QS1^Ug+pzwo_fdRBog@d1g0b*UuKV~^s4~C0% zQ0wmf0Xg2$_Hi@Jh|cvGy%UZUsSPL=2rQm3T@e2<;s#r4_WXdGC=Y{z1U~}g*-L}8X;)mVo;C(?FRrg z`9Q%fy!D%cgAXVW9TNzG>vG+>m0N++gU6v@=pVAg<2-10}}e44h+A(pZ=-L;9x9Oq0FG;>1f;)qwOJ8km<&u^y~Y+pV@8< ziji@@lxH){bYi&8ps36+VfyYYM)mqhM#2TzZnrD>wHa=5C{H#~F4(AioAIQCwL<5n zpWnTI3-8t8Vo)&QVoN; z3gb2gP4CAN=GxjfHM}27%-*!wN$s+__hX6O&a*c$Xe(S$^?oeDt}SzuL09aeviD<& z+JS#{oC{JwX(Ob(+87pUv7V9OMyKij5zEI+=V|2chKE~6OBkMB!$xQDT5dTSn|u_7qR z<%1?qt{MGxh&{$o$jzXz|9lpML;bgZ|9g2D^QPa-W3*;s|217NpHY0eZa$-YJ!lYi zGHCN6sAda7ice7Ef<3VXx|uY-&ZCVgF+c- z0ClU4Hw%Mog+u|XuE|AKjgSjJznlMIP%`(HDq#A+@t;vg_o6Ad<;Hx0L6M`L;m7w? z|Cv6l_|Nd+$6r!Q`{$xOXwb@< zQTzK1S?_u|uO?&Zif9H#V`0$#JtamJ3Gdr=!OoIi!VTQsG6g@si~s)lJ@+@Hk#qMa zgMzTPM1in3XwWU~|F!2ozd!!9{W+*<25Xgp*7t!jI&8lWX#WprAwo8E_c>?{AgBQh zT4?+Nv=<1pmlV|7|FPA~iOEf^v&tSU8a(<*c5p#0fVwag>}IOC-w{V%HE6`8aF^g1K>bv__3G0bGj4bC03==&q3`H7Nz6Q z+dDua%u0uzyMtLwN_(F(bWCt!yu_%q<2i%Uw&&ozDd1(MKfV|JV^lu>9JH`_s?(JV zj2~KlUVMJQ4YZycv~(J@i{TX~WRCt44}-q~r~?gJ@cjik!46xbU9go^QP|_>_mqF2 z&6Nxa1$%#fzy6S{pz-nI&+n)Ivx3F1{+fQPkWtAGv=Ioj zDG0O~2y}oOqXz#)10_yxCIzVi4sWRn4$#>8hpK;ON}v@Zpy5e@y`ZHPh5vp%2M>aR z`YSw;LkEJnr+XDKDzJS29{7KHUJ;`l%lGdN|EEtVVl>fY_nKVCpv`{4MfqZ-xAP3+ z*%B;XptC!fy`?jLLMQb>$zjIyr$vnEte~QQ#q_{pMq5+R*?i2IEDUWMBr^Vgpa18B zDw77ojnAs)-nontH4GX$7frpDlNyzyoffwwXR@vXsp^@2u$WPj<>z;%ztis(Gm6!# zdB2Wen5^pkI^zHLNq-ay*ftdGRb6F#qj6%b6~y$n6G5`^ZPL{KLE^EHT?N~-=D=Yx9aP)7;n}q-6~Hu zkp*$)fjP6GzGbNY51zBNImo~Onz#M2m4$(qL7ag>(M3s)f$4+v^ra8HyW6Tm>wa z90ez*8>DmY;*Rlv5AL&<{S=Xa;yF3M62S;HpQJIv z3}cA|AMXPaKHf8&%5N|zZ#Oe8V4U&)d*?r+pj%=Sq#C>k&@eW?6f7W zP@Bw7kDyaUY`_DORtyZvpx_QJTw<%(Ro4h97R>@0Q-{6d@t1t*QU9Gsp@Ffb|}HxP6PVrMKkVLXZ7yYqkO%{MMkSzg|{jhG(TN*QMg&j<>Tla;5@5vh5?7y48uqX zX$i#y;e`L+*ZdLK%c%A0B7@R%Xbu2Pn1E{a4_n(euqZN5$o2U7J?9sLVh;Emf*;>? z|7L@y-lQueWI&7g7!?j|`tg0vUj{{1g&*JLz&kg8gnwW5mqC$H;m3EezlzkXM#;2=SJ5 z{_%bF?*Jd=4Czey3=4)I-zWW@&QiswR{!Js(!U`7xxWSsjEXXOd|&dnzCl@5}4@m7Xh}ud<4ekp~ za*SH6HzF(le`oyh<2(BwfxSPzKluCmd2}UYJHe0dl7GIyJqdC=$iV_z>-oI-JQ+0D zE=m+c6mS$UD)E2^$k{YlFET4h6hsxUDsvZne$MVSr4F?8eNyF&kgv}#RsMc{z-=No zg92zL6{yk%h1id+Mn0e|$|4sGy`?$~K}|9x18=DU1Ms>T_KOcIU5ve*7Z%Pi*7cN@ zi?FV&wFO35|B&Qjn_0#aVW z1u)F^fLQ^wHHk@~{@?doKS5hNe(Ysb`1+hl;q!Cj0>Og&&p|$#fOO^oXh%0FZGeIf z)OrK8@<44E(Aq#yD-Lv?5NLZ?4L5@V?7#)k8beOdd9t8GKq?uvIWB+>s9?GAke}D8J5m}lBtJplQChOsMx{h!7!0Q@yGYfzbuMe9zVZx{Q!jxsO-7$ z$9yl7_Th^^zW@Gr0313XUxOSC8g&Ha9#DsuQ8Cg>I0LjyA;Md-Kp-RB+u8ZFW4K4N z6Yq^M?{E*v0_F}-BZ;|#(R%hK<^~2IZN`g1pkrz>X0wC#%LaH$6$F6yIx}Ao1}hS7 z@C7Fz<_p3VkY!h1Xne>)9AOvTrXQ?h6xMX|VpJ3?aPk6`Q=u0f!LC2aWyb#t-Pr0we&fo*5QjFOAp*s0IS%8q+;7e8Lv&xmvA#E zgmE({XvXv(3fv*b8o|w=082)oqcuQXDbR5mpzakY*-0=nD1bT=paoN)Vrd0v|CJW> zv?Exb478pVw2m6IodtB50O*hbQ0D@69*6l>Rz-e~pWj{ofV<9aOdqU%X1YC5;r8b7 znALl`m#e|M;m7y0|2TbB7(v^Ve|$gwkHduBd&wpa(>YFGFPiT?;I;)ieBZ$*0@<*W z!3R3so(W}ZU|FQ2q;I<2@_`_B<#nugV9zVbT_+9Ih<)+NQpyo8) zwt-Qd%fVQ>;&LIV*DyV=0bDo5{>ySpu6?N>T%gQgV=P^f=@wj|%wP*D78oZNC^OiB zbQCBv*c(e%2p1;T2Nx=Xw;N9`RA#UQ$rb+iZvBr#Nt1zT1=EL_KOSdfx&?VKP5$xS z;9s_zT!At}mK!KrLCm!_mag#jm|XC8e4`qffsG5lX*>2Gi1Mq^_gzM1&{0HJ%S5<*H13^Tz|Ph*86t7aN%Q_+x4s_!G(|OuNF=&{PBJJ zUrh!MC6HC3)895S8uR}6KK(CfdGJ9{+)USPVicEM30=ko8b1KlZzw}n(-WH*Ma6!8 zzxwN%@^)uw#{UwamMPQ9AKyLxPVZ@Aw9xqR-Ssb%cTDK#=Lg(Q9AsbsHG@BFWnc!U zo(n7*+&4J9n;0%fuzLx`Fic`l6jI7l`1#%I2m4+IC1&rh;O_Q~gA5FB4l*zt+RDK2 zKnZmIc-w|a4E`RBAB6sc<{p?CgGfZYsu2+&|U|PZOf%7MWqJR=e z=FdMDAJ=+M&{k-Ti!RW+#@5 zcAiWtzJH(pOW=Ws*5`}Xo}3T#jHN29JQENekbwcTq2$X!1_saulV1lJ7(itU zsD1I@8^wGSE~_ErIJE(TDj zvRvfzWHkEzo$Z&vUT0*j*#EG>)*oFEfGI!;X2ZDBNY`u_d=&+pIw zYcXGB^JM%G{qN&*Mk7|wOPfA{mk@!BH#x+>U~`Cp!TbGRqc{nASR7%;qje!%VW0R{$;c)?aqUls5)Ih42***q9OZ2g10o10zx`^|#A zpx^?9!iTMlssVn1{vfpm46Pe%3m8Al{o@DTX7~rZzx&7ctG}oFwKHltrv8K+f%5me z!mp%lpgGAK7aEip6zx11KNS9Xpv0g!iNVH$@k90>8*tLy{Rfivm{w>rFev{2o<4nN zJEJL=&%Ynv1^)f`e&_G>AMK1P^@hKfKmY$d>%WXQXjQ)SO$H?c2Bwu#1^>QZ`kkUA z;e9(J*qLe8WG9x3puJ#Hzd^+h#JP+g`2Q#{{QWNQ+qR(fxdy|}=L`zm1p*CC&p}=T zwK74KBxpDXG?W7x(gBT}uV-UW00osJB;AREm(o5^`ml8p1B2p0kI5StKRo$8eM1MM zoXDNO%;3zo%Y$Lc|L<4-{`j8$clx6a#-#e0zd^GV9v7E-FY^R#LT0$I)RSukKHYn&OBm=qZ%bFENj`2W58FQ~i#$=3az0zL~t{Gxyo-wMVLWxpqS&+rAc(U>kU zY1>?!=BvTLxANEbOMm!QfwpyPG4yzHt@!p`o7 zd%xIbFj}x`B;WY<{oK##C%PEjgpz(Oe$K1Fv6@-Q+4Fz|2$_9AaRI=V4F)&FO<0&0!o2;6pb- z4P?+}nn{Ns8^zrYF))N2f@~CrZ4mD|#J~`Hh=C#d5Cg-xZ43;c*3Q;#3=EFj7{G-J zsLOF}8v{e(Hb|i&w2eWWVcH=EhS`T07#1I5U|4sEfnnPr28KO{rn~hp>M@p2FYRGe zub=%>fq_|RlV_^|4~0KjbwLwtAYBVQrx-AP$oRSHfl;PV2HT{$ zUP2X&TAUXrdQGfj&{Ul+-OH%%?(x$>iDNcs{Q>KYe$NU6D=Wqic0U`uXVfxlblv#& zz2OIof~3)<${Wu+JlSS^`!4g7Z3gSaR?lzWC;nia&BV|GP7s#UJ9`;b#lL-5{rl=U zhjM`u!(@3yZ3gBUq6Ys#$*7l6G4k7Y&cE6W3`(ps)D{1K@BGa+gKOo#@0>pwl+_hE zXK}6g|6TZx$#YmDF#O4(#5xm{9B%!1{G4q@l;^ka2Y-OjnBLdND8)4O$MjWwj8akUKbU8Oat-T61qKc!bI)xCj2~)$FwdS{1v>T+BxdY+ zz<}{XF-ToCqc%jHzUL_e#t)ewu^I+#=8HPuijwt$0)vE-mgf}%#t+dyrpxs+$}xHW zm~Pk4C{+(C{)0hvn}41R=tMZ?i=Y#OO&PvD z-wbNHST{RWU1ZX&xM<42ptOFv-~>kF`o&%r6^la_doda;4q;uR$nf|3o&OBVLW)c) z7$$Q{uo){Vfi7;4_zgP44zwARLur=hEDwectHEs;&@uBr{##U-YDC`n`u*=ePliy& z490xM4ltg_xR~)a<3mO+CVnPariYBr7?qfmn7EiUnDm)UnV6Wkn7HbhxR|V%d>Qze z9GM~*A{bnm+?hO?xR|_|0+~XYBAK|D;+YDW%9(1JelhYh^)hiWO#*2HV|FD*3kS&n zXGSB2NeoKa3}wE83=WdFH~s&<{ii7dvmV2Rl;3Ox-U=6e@J@$9KU4^b5!v(8Hs&{(qnTGsRmv1H6F^ESlm067BiP z3g#t&d96RKD|ob-FGw-ySutt}--rdbbQmt~dKBXcIx{ZX6BIi8{&Rr!C@?TgX0iVN zJ?p1+1+z7yHaBFMR=u|R1&{)U$wrES9v}r#KdmbiwRtZ3doX-h@t;G3{U%J_8!Yej z)4D=Qo9CjZ2g8RMDDtjgd8?n+6`I--&=#V|1qLO~)whbcSF#w{doX;s_|M*xdlks< z4}O8ntp{1GzyPvX?x%IdEjeZ_#+#bjf)`c16~X&2{(isq&$>cWo8cmpDuZ&ObfyxA z;fqZSlmCAg_+?umXZv~+qqgJ?Nk5|u(6DjWBLxNxPlgXJ|BW;LYqMTZ^RJiuT@M;X zY<|R{%rKeF8WP6;zd!%+<9p=~;rb09_CgvkplOX@ZUzN?76t`FCI*I$ObiU5wcigw zi5+x8{9y)$D?AJexrZ4TK$ER64lytUA7)?(Kg_@YTKj$H5Cg*_P;)ZAj`v`P{+Zb;Kae8kaQT*C}lvH+xn;Z}zNwp6lJ@3Car$7mJ@a zdKNy<^v;3uv!B;_WCM?8-5~)wVC}MiOqUbGO%9ocO({wTq)ti& zIDh?q=Z~W&69XtQ{r&;UI;_yFv*{^^9?wNYVfF93;eSvQ(n!(FgJIg@ry#X#)-RqP za0BI*V@K;57(O3jV7PLWf#LEY28NRD3=HbW7#RM6vdVS_2I*rA3_FiPS~8$I>Dy6A zE9UW01_qVG3=FJ?85npDGcX7rW?+yy%)p>{n1KP*{km|7f#Lcg28QsX3=DIQGBA8P z!oZ+$n1Nx#Q3eL{qYMmshZz{m4>K^l2A$;yTA%~UhwMig80-!+FgP7%V8}blzyQjV zpbk>}Q3i&tqYMn7c~`H)3=B<285rb`GBB(-$iT4SAOl0xF$RV>kVCYYF6e19T=09! zpk(bW$RL-oZIc1R-|uVxfSR(-PZ^ZInwc?5GVm&G+r+nmcQV6=Ie#QLlnfYnSAPF4 z`OAQT!+=StVH5w#@85-fO@B6x(V?E}sZ^Hj(>qU@yQBM&Ah7Wnar#H-Cl&Jsy{o0@6y$9Sti(Nov zA*c}oYTAPK*66b_DBx?zfXe6xN(EaP6hT88ksb^mdVYgiZlLae`|mLCFds;N8Z>I* zbAegg>q4-1Ftqd%{B6L%%MeiS`Sp9-FKq@U20u@x6<@#Wfx-yfqhVSB$|gB~VFt#7 z`$5b%A*TdrU3BpTS+n9dhccuG#I%Cd`rr2uxO(^BpoO5)lW?I2){qMWo-|ye+FZ=<`Mw@^QYx;fQxv{q~_>i$^21YHxi-ulYir2tZ!meKi z485DU6u*Ag|E0~)v`Gi--0T1LKiBfo_Pi7Ya{PsVJDxLY3tZFyn-=|B-J4fIszS{> z!$q>fTW+S~$xZ*hU;D$PBKAO~f>DR}hN34^{R)N;?!Ohh^%SKl*p;Om7>$@$FnoCR z>&1B2Z$(9Jy- zKA`S4sNu5omzlS81*qyA>z6U86{&4^!wB3gX1O4wWaw$=!SKQM7v#_d zmJ6Ip`kn?J3?EE>>H93MVbC_cz^SC?sprA)LHifzcwdkn9Zww(hWZc6zZTblT9iCW zTAo@S3?HO_fhKBLF7PO6cxresd=UPn0k%f^0+-T%MKuqG4>7;Kf7kdUuvbV)#6#JW zN&CZDU~g z#>SxVVH*R(OEw0DmD?B??yxZ^6mv5u9ARTn=-JA^FmEdZ!-lO4-~m6-7Gb?@3=E)I zIi+o&kmd50s9@G$z47(?`yWiK9QEA)zH|N)*!%DMjbFc?|NlP!=a1+AzeoK03O)B- zVC#PkwF{t)Kg~{Z7Z{Xw-@dQ^_eMcLiDM;*z4G7n z=b*#_8%zMzM4%c9R4aKNV_*n8#=rpD8pFO7G<42x%%~{A@clc(ANIWr3?AN|UIkmF z625=W`~Bzp*`MFPFZk{11IkwsKN%Sm7{1qkfAf2S5`&7PFN0zbg9Zb`hYvsO{rHu1 z6%7~|KD_#|rTE+T-9K#nY&;AZ{(PVD^UwD^KmUC9`NO0L8jkt{K34Sa_a8t1e*f?r zG-xIN$Jjf8!I0sA1f$8H?+rg$biQ3=Q26tG?teXSE>gXy3#Jt>vMT)f{_S7Ac0HS- zrU#3**o|-BOa5tiGb%BtN)`P0p8QJPStq(C!KppJsQ6F&oJ4+jGSn*%6;Ztq#dxPx(e#u7$_=@Cm9WmrG~J>6p&qeVRj zLxTY5M%@Dr@?3fh|Ct1%85rao85kJOfv;{Bm~P0x@LxD+28hSOz`*b@aL)=?wI>WW zWCE-nykal_UHZJ}qg%<6M3>YqKbHqBuT+awlU0iu9Gw^(L4X0oXAsK~d8Rj!*Fn+r zs)I1|%LaxTAwi)UhWcg44e)Wt7*AjdhHT1xY$OIw~Hrqvq-9X*6A6DWg<9CkQYy)O&(}83TyV$WRY*<^RULQ>RXy+S>S^p~lVC)z#Il zhM}H`MS_K?9z=5pDAY65bAUiSL%jnSfW*P_APYP_jljl9YPvBbD~WK3C?&)A95Qxx zG8_zQo}QVWMo>4^bAlA|KmgRW^$HRS^$d()k1)awkx_SXadA=^3XUC8%!Xc6jB|)Au+upE@QImPQ$ZEz3tlPh?WRz!|zH%j_&-51? z7-goP0TD|!FltyfEZNWQP%h2zg82($24f0C2BQcAI|CO(!kMLB@n?jXci+17e^ULf zY;R^}4gm>yhAB)oqQ!2xyj;^|wlK;^gOUxX0zs|>7(s$=z6`;RVXpQJF0MZI3}J5m z8qOZ721cct48B1Krf#saqaTAKn9@)!)nst?&;_XiX_)S`g>mlmM_U*tiF&$NsTMN? z1bG@-sg{ChBP-R??ZKNEs~L6t-P}O-IeR$z#XB;9DJKTMP#+%#h9FNrcLs(a*8rbL z1}Faz4~FU1n;0dhAK%ERU(8`1%#Gk?0pCQ;4tXrFbfk7AKqFRPu424WD zm>;nm;dEs7@egNU@bz?IVDRvC_h1P3ba7>1VDNJc3i1!1-nW&}Y5KLTjJng$ZDv#! zF)}u=G&JVrV(@o$3)hA4HZIJv+`=Tm%<_WyKjU;6W~M1lrHl*=T#O71JPZsB|NsC0 z&&a@7!^gu5<|{BTFmy68Fq}b=X9CNE#&0{4gy z5+9`R4iX=voCI%@62P6TIf)E&g`bSYF;d+pe3Nr(! zuwY5f??u-n~;1U4Dhqwa5zp(|v1LYGTW(Ecj-v#U=Mh10em>dHG z3&Y3%AUDRqtb~>r8xVX@oy)+m1t9>oFhvk%2qZb>An`#CK7hmrS#Si250Y0ALe;N< z#0SY=f%EGj7JPvVKw|fgFscDDA_zXnfCeN!$N?=#e31MWBtA%f4-y|F{|3gdhn9^$ zU;@w}Vi84H2r_^Ji4QWs2Z;}o4?yCBicY@5VK;naptwG~YLE?kdA3)-R)E`0R*E8Hg6<~OQ#0MDwTG$S8 z0wg9`#34M8KS1&VNPLh5B1n9Yd<+sFB%gxBZ(^!vU?@Nm04XRzQlKD#@F7TE2aRuo#`i$tgY+jL@j?1ikoX|^2}pdf z1EwGefD|l1;)4uWg2V^OpF!e-O z0K^BmSU?8V#S%z-kbD3VAEZA5i4T(Bfy4*NA3@@SUt)uoKX#g2;42hqO#ej22@*wrM(D+Z#_#cq? zMG*5K_QTo{e~=V_d~73+8X^uze2{zt5+CG%79>7MJ_p+BfrV%d5+5WVqX@Ad9P1zh zauiW5T!X}~fVdc}0OsH`Nb(>9mneg!!RCSZpcPdR5lET>jYPuu%^>q&_QMQZfo8xS zBtFQ2N6`2ekoX`AXQ)7ohxvF75+5Z028jKai=omm2TLHy zgYH`5GiXNWKM$ z50bxw#IFa{|1XdPKne`hQ5|4|#0SYgLF0qQRv|hdaSR%7h4Ck039%PQ`s-7f7#Mya z34kn+(12(M#o=r$1}GrOgVcK<@j*V0K;nbsTQsIuNij*)FJ)$6Fkoj;0QJH_E&r`p z%#Km{#S z2RR_|LGlque31SOIKLiJwXcB-K-!Z>koX`2et`ylz;-~?bLfCM;4FO<%>(Dr_#g{C zkknsgW?=BtVPLQUjZuKAdXNPrND4q2T9EiJnHd;bbr={}praxn^%>w%D3Bu{4(>qW z|6pcd=+tFk0G%`i8YKa#4=@0!1!0K#4^Te1ss|~UWeAc4VTgixNPLidf)Pj#gdy^C zkofE@3=DIP7#Mm$K7!U;EXE+UAPiBjfy4)yXJ7)716MT=1q~1ZaFBu&Y(e6KLSzpT zUzvr0VXp}TgAbC0Uy$TM>N!lo7QoH3FhlS`@*QA4xTuB1=?1U>ND;(AJCOJw2Qit0 z8#<(CRHD0S3^*U1UCJ z<`S6?n$1M!gKm97=7SdhBJ)8f>m&0)Crlvt^$ZN4Tha03?GmRBOPC`VsPODvM>aR z4>E5Cf)DBJ?m!5D6N!xOtF4AR>?k4`@pYG9R>k1(^@Nas(t$5A8{CL{wZ72lpqa|Y^j692gzq3@j?2p zAn`%+0&!@aU57Z3VIU0gp-4Q44Z;u$VvzVC0}deZK^ELW;)CQF5wIB?!umgz?lAnRZ2kAeO z3<-a5q5~=DNCRmGVMc~dEOB@NNq#a51H;8M28IlzRIZQ?(hI^62UsBSLFRiP@j(tK zsYen3Dd5NgX$E140U1bqki0}TNDhRd@<@D;{1Y@jXb&z(HLM%~ogs_NuLqs)i!1;- z`xluHIz$+m4_bkS%-@Yx@PJmaA)&IZHhQ18WWgLkm(IRv;+=#ZdH z1E{crCE626@*wqhkobF97#Qy6KzlpTY%P+DZ~(Y1D1jsZio=RLgn}C^3=E)ia~T*x z?qvoy-DV)kgVbL@;)5LU2#F7pe^P)j55xx@r3w*YW~hJ4!oUC$03~)%4;Z8XY#~?$ zBnmEo4)KNZ--8^)$)Erm7Gz+B9Ow&~J7Z$tWrZB<3!2>m4FgKDf;EB(*Z@gLA(#uw zb@kx-zN82)0Oo^EvxbN;Gbo}NP>rR7IRQ=o79>6>L=GVFK_2`A=R@m%o??h~pg;yG z;3+}yK?YQy@pqu{AEEJCN)h@&=Jiw{_#pGH!1%Bp@Rv$d1sYWdKF9!rY6Kr-KnoHd zB=1s#kO%SqY(wz1Ss55We9&|oC`z1=LbM(hCnabGY(V0JEIfe32U#Fdi?9GBFN4Gf z$-AKOL1%zKbU=#olI>s~sQhJQ@IZ1A$U**Se2@hmXa?3G@j>!a(DNnGas`2NrX5Sb4;v<;aLTJsCz7ejpr;=?@1(FEdwFeJ)in!x^t2!KK$ z2Tj2oBz_eZ12-VagM$145+7vV6Er?oGsrFwhB)9m=pa527gj$*mOg?+ARz)ek{`r_ z$^Swsia{2F?kz`_|AQva0J^9MtN>yjXl*c<3k~6VAv6UdXnYAYKIouEWCOI&TPSp(?$K4g9#iUtM-(1l6J@&#z}pc{&i<%`hdi;?-DL{fq*z{J2%ipDQP<5!^Z ztI+tM^D&Vf06NeGnGZTc6UGOxg#n%R0uulwD$r(kWIpIxC}cip|1~lnbh$k;AG8}5 znGagmi_8zi9W06LlmnGaeljLeTj(;tP#2i>}etR8fOB7|QL zNi?AQm>>cWKIk|lWIkw>GBO`@TLv;8bk`{|A9TSMG9PrEA~HV(=0I5gKLaKJO|_Y5 ze9-oGWCK7KSs?R4XYU~ML5KDr^Fe2;AoD>d(1G~%u!0422n$F6#s?kZip&R{EsV?u zZIM9cgAOZ0=7Tn(AoD>d3nBAChX*l0`k#;>2OZXrtN?Vf6*3=mOc634v~vNO589E2 z%m*zVN9KceLLu`(H*`YmhXy(5b}?iHt!PouhQJn5^h9L1l z1=S8DK1lum8vhRxAEf>RsGkRR5v2Fb(hBuI$N?Y)A+2Cpc#|pyi4T(RK;nZeoPfj! z$;Y&#>MuazgXBXxQRQ3ekpw^r?jZ3&7Q8^>gXC9qqZ;r5i4T(R0nI{zl|Xzr2Z;}o zzk$RDnP2|`NdTl^OD|YAJOutA@j>z`eW>ypXnY4GK1lrqG(PBD4TuTgY+ug+It3a@ zfME(+wgDZ#fGiI>ArYAmIyDiQKMzem=wM8k{0xjlSkJ)l0?ma16ClcAX<`YIflF8! z7(jejZ+RDnfeZ{s(DZXmM3@H(av3Ck6G$KgNdUx;LE?jgFlI8U0W*;JAbFN4sPa5W ze31MNG(KowC`1P{Lp}QZEv#bzQUGf<-$65gV=71%gdyby=u9jS4-{fYSs55Wd{}4m z94q9!EKop!I-l1;42WXTTG@K=Vp$0^0~4k}RWL9zJVez1R=)vB9^}I>NPJKTGE7J4 z2g!RN@j>!2a6WVf{0dwEl5OrF@j(U{fHx6=428&BAn`%+e~|bf3s`1?)PgW1gffu$ zAo&6qAJ+dr0ux|hWO#+e$7hh_K^A^Ni~mmA{Z6wSfqL3m%XHokd^; zU_Q3t^fgHGAoXdB5$Zt>x`f0B$=`P(AG?d2)N{903D41t^Xhbpi4%P6@Yg7BlBwxLwKMl zVr7GD&Ic_`24yRd1>cS!gCW( z1Zx0|eS`7a20b%x_u6tEy| zssROc#Fpt?Moe--pcD5XMnif!T3e@U88PYAgKi9jh(i)5=y)w;KIn)oWIpJ$3uJ!A zRtOK4RzSyjK|~Ch%!x5H5638g$YbL;w<`pcBoI`Jm$&kolnV^^p0X)6tOmpi|Xg zeDGjZKbns~N2|_|nGZVr519`-^beU2IwJzghYVJM4vT;a zfV<%f&=RrB4u~u)k%3P7gor>wWb1wi4<>*404g7Jt06=LlK7>;tMWl2^$-EjIawes z%mC1x$;kZ8Xx(zq*~!TApyQE|`3KR|gAUV0mIob^3+BTbtDy65!2-}Y2b~;*%moyUmG2c0^E%x^-fH9=822g;X%`51H@5weDlN2lL1Vv?)(JO&YksRJEA z01<%%J?LBq82>6e14H5#1_sbXC1|_>l(-YnqA~}G|DTAA1_swC25<`vB>$L$fuU5KfdRA|4aEPz!NB0lz@PwXaS1UnF>uy%GBC8tGcf#M zU|;|#5aMKDP-2G66@wh0&IvhA1=NHCIS{m$`0Hj!6oAw_b22c1_GLmmz|0WK$-tnx z5o8t!Gcu%cGBCtWWMHsig79lN85ls>71TronO8rFlYs#=atibDVot~j!Z7|uP6h_h zoDqz_my>~kwVr_ilmkHyIL*nx02)Vx$zSJWV0hZZzyMkf50Zb*$-v<0$H4Ff>VR*Y z3=D#53=E*7#MgN8Nl1)gg}b}I=C1Z zK*M+t0~i?=b1^W0CMrR#UQiHi<6>a2RcBxTH6uX|I>g1m02()hslUy|zyKOIgz-VU zwLuFUVGiKphMcYgp~TVR4ws4XM;%X{3OgfdMq50#jel&AX`%6K3IYZUzR+84L_(piyv}n}Ok?1Oo#or-Agp z=4N1E6-Ok}f83A*lN*>p*^Zfkn}>lxmYab=2Gp1aX%OLo)QT_*RCyQ}3K9@<0wCg*osz4+8^ev>hgY zlZSx;ROvwYObl;$AP1d-7G8kNXXJ$(R0`8C$jiX6mXSe02Gp4c`B0S?a#9t<0A>aY zUIvDV46szn#Bf!cfnh(A1O0dz7(kU6L_H%zEH48CXu<-*XJ*LZWnlQoz@PxyF9$Ne zhnIl?G@K7fq|6L+co`TfWf>U2omr5N_wzC^2)aU+^?>+ico`UGKZ_l-ATk_5^@5tmI>0;BIDM z0PP+F@elDaF#K(1VBmmS@SKl<0W^FMs{KF)e&b_cc&UzXAS*uuLm~r%0!SVdQSxLku)quI6W80L>*s5*;(c zE`A1vm75qCK%+n)^#}PG80uLaAvffJ1g?M-*fB7~K+Ec9{0t1NJdhC)ko*^Z28P@w zL=>KXLzXw zSsMm2AX$Kc0kjqzrlCZDf#GEj1A_=uLyG_d!_E?fkLL<7Fo33fVCq*0Fff4TlprC* z%&<#`Fv1PMY8EQSO*BSWkp0|RK95N00egaXN_3=A`% z4yddbWMDWd$iR>SHh__#PmqCux0rz;2dZG9AmreFm;vhq85lsz`(gb3f~eW>tRMq} zuPUN;d?Cod0Gd~XssAR(z;JdZ0|RI`56DCHY(fkSGxHc2_CVuYQiuV3EgY!e03|vz zAqIxIQV0zpLJSO`iAY!w7YQ*iOw~lxj&(u|450M`FbjKy7#NO_kNE7beWW0O|$9EJzh*U;wQb zfM{T5C=+I2c*}(xfdRDX73KgbQ3eLkf(IC1Qxw#FK@`1q zq6`e6T{kd!KT!q-(5f6r2rx6mh%zvMR@HDo>VIa2Y*7Y=ouY_#dxaVq ztnLD zfghp_44{z^SR&ySV_>l4MijjgVhjwmpi}dpQKBTqzz`Y5z;Ff1Hxy%FI4X{)yd1?C z7(nZcV5vS-jDbPZ7*X_Qh%qp10G)mbQ&1_!zyMk?0dsMO7y|=ni3W^6U5tStw2*

x^LfH;X}z%Y~GD%nWEa9wFFP3+IG_bvjW`3t9UjOk8UfJy1#t$3R*`x{Z8b}rfdRCN7Utq*;tUL#pta;s zAA?Tp04;EU$)6HuV3^y3Xg}N$XJ7!WBZA4l067?`2?jc#!!U?}0W|Lg@&K0v1H&uO zVm6o$6eS?XX2Q~dnFIp^XgMD&NZlnMJFQ?AL`X0&yzFCOxC3=yx&#A5CQ@b8BEi6L zum;f{m@2`*(2dlhS}wuBP=Bxp;e+iG3=E*LBA5e?OE56Rwjv6Wn-UBRrJ{)1?~4Qj z!%klY2GHy+*hi8K44}PaFb9fCGB5;kBh<@FLXK#K$s0;C)H8sVa=`?gB^ek%OFCfu zKuHFMUMWNqD?yThVPX-YASnd30n-^6KnE{?9MCGsz>q75D2S#?GB9ZNA#%|QNd^Yi znG6h|<>nyu2PNwn7(gqfU>07HgdD#JN~WMxdPkCh0W{tR>Ue+>=}SolhSJ##3>NH= za^Z(01A}2A149HfkqJmKFihn|l#EhR3=FYI9TP1n1_lnK@dA%}DFy~pO+*7DND6XN z8)(P{R2RfcF))B;Tr8k*oDUk%nU09lE-40v+hULd&Okl_Rn>nR7#Mh<>NiR;Fo1^R zU{Sh9ih<#y3Zk~GzX&;B0yJmE02<+VD8;}4T4nlq5985lr2Dq#wmr5V6?hr@Ek z1Zf8Ff(MxVLTLtuKsiJ^f3q|L!%H!QkB&++fHy>f=A1xLctx6l;jb(r4cwJxU;wQz zgqT;)%U}9u& zmSJE3Z2^I)2c2;O>RZ4%E{QS>3}VouvjjoqUn!`q1&VM6P{R56zeR?D0d$cL!~iCS zi82ffj#`N7bPh`Kx%dSZgj})=3_HaUiA+qEfx)p4(N!~&WnciUn1osA zF3Z3GT3-m`N6A8tCItBr)R#<`WnkcJ0ylc=!ELq@Sq28sz@rYdC)6m*zyR8`0y6+~ ziVNr%UKoG6EaVCVSfX1g%fQge$N)al0MzvYo!atO9O6Szt~e{pz;L=2lx0Dfk>Rl{ z1B0Xts4l682!Kve0gd}Z8VHOGY;p_?p!I+-3nk?k7)}O3&KU$5s42(509s=Tledy% zU}#kX`v~kI&><>~CWzi}x*P*Try0UQ)p88rT|A)4bnu8pmmC8FXn7sXz`1e^42}Yb zRJ}`%fgu)r1|b835)&iC2{{G^(6U{a`g?MaBbH(O*K!ODpnXa({x3NOhOa^l3>naJ zflZ!);Unne7Eq!A`AA5ff#L5=28If#0!4WS2GFuwm;t)-3=E(%DL?~BploF+&%gj$ z7YvhklxJW7Ep~(Dib#0|2GGO>r1D~9$dYGZ04;)rsjrY{V33t!sD}?awaYUw)FO@f z%#mkcxXTUARt$^`E94=^^a)WMbH-z`y`n z+z!#e%y3SDfk6PN@_44ez~H-?fdRA#0~CdC6&M(70}Q{j2r4o#)Pv@JKxqI}yU8drFo1Tu!7S8QWMH^E1(Av!6&V<&iXl>QxFQ2Xqz0mW zkgmwU09s)Q@em_Jl_CSfSw%zxr9%g6NzQ z2mIKks3=E}Gi0U&>nSnu52r>3sqs+hnTDA+* z->J;Nuv7xk=9{a`zyMl*2$Nq8Qoj}CSWr8Fv7X_8G6O@jG-BxWyfOpBN@YaJ_f46B zVWKQV1IWefDhv#u)$_0*mr;S-D+MbD3{@ByKpP%Ft8_rw+C_zd;j9;;_KZ|vU;ypd zggB_4nIT<;fdSMs29^CF3#wHZ7}kOk9yCpKt1vM9l|v*VJ~0M{pInH7WU2~e2nJ#x zGs8+11_sa;PFObEp~Ar6%a73otM<+*e^>NI*)Z zpH&zbmLj!aq*NIglBE&3MoX1}L2v_Nl*~qzf#ISu1H&Dt2fS1n7%Ev1ArPX#7V4pgpM|3qeuxMwNk~Gns+GgP8$R|Nm8GU|7nF zNMvGa3=E+4|1b?|YLIDsST3+rV_*O+=ZDFAsv!?nGciP|F))NSBkF=8H3kOIq8OO^ zX3*>us1ySA|3NJh&`>yNrV~~YcB(Njfc6c+G%QnNV2GU#nMMJnk*#VB44@4TF!`fu z3=C6U5g~8`q&^;@{*4*~Lm~^pgJ0Dc7*rV<6kK5A|Ger944`GWFaxF385lky)qbk# z44{G>+D!lWUss)h!4_$-*+rd!0ko_araw%bfx%Q7)SiSynSdAr!&;<7Td2;!5bDdo zP!EbjkdK)z9MJJps^BsOGRVcJ0nRm`N)hBrCI(Rr$Q3t`LIHLPfhGe3Xd4fVU$4o)P!HM{ z1QVF7$-rPMfhbs(fE*+apQ~lqqRGI}+KFi89@S)Eh}A@lpj-ku&=t`>c%;d|0NU&h zGykh51H)5sL@r?0VyI`xRRkq$NSumkF))Dk`M`=!4K2vtF_;0iS_}-JO)N0Jj}~Mv z8jK&Wh1yEa)nZ^+tAZ%H%e5F7Kn+z`SFAy+o`C^0S_wL72^3^AwHO#cJ0@WUf{yu` zs>;9s+Q|!&-=oFA09r2usazNtPG~VOux>$g$IpWtfK*#P(qdrn6hlNQmo@_fXz>c@ z@D@m29SA*8i*+A(Pm%(Z3lpb=wxjMhMCfcf~kI)HUq;}0R{%p3LKCHyR;b? zWO)#^+gWV}2GIQx0$>Z67#su{7>*-NM7{_4hzF4fS#%f}GPMvP!l%Q)z$k!-b15AL z@O6;T>bjmmUx$GKwBZ2eLNgr(234dsUXTt0Ln2c5IztC?hYx6Q8We<}gV3G^BC=hr z4g*6d^hkM73#wO#f#I$<149QiTTj(tU;wQ*dH`MzP|wIPPltg)mLHL7H|sDkbTTj~ zfbu=4GkIDEa-}J#eE_oXstyB#46Ogoz{K!chk*gK9S|0Up!5FQp~7pg2}7u zGJtn*g3K2L)&C~C3=DgD5kc;#%fN83nSsFy>f&%+1_sbhDoDx5%#fwazyR7=4QmxQ z>oPEaR!mJ~1vjY}dUP2W?#3e$-8@~$&6zLHslFf#Q6pF65d{Xq+&d z(`8@~;@Vyn!o$?pf@ams#TE4dOFEsQ94N^vvRt)S{5Yq?}ZSq-+xl zLraiaCvOld-n}3*-@mjZxFoS8mBB68J3c5s9in*ps&J+fw#=gB{DR8qQV~q~!fCmB z$qa73@!qMG@u30nF8<+u(>o%VrW=Q3=B5^xB<2<{q=z~Ng~W#!WtOCR=B1=oFeG^v zyXGYqRTh+_rZD&?rIi*ZCzfR9=S>faWXha=IFc!hGcC6$F(or!FL}B|6qDZc*-=b< z(~m_l@w2(b`}jM1PhTI!B+lmV<`(boH~n@LlhpL9QA`4?L9W5BA=6(+F-fw3uC16p zKZ;3;HP|gA-etN?6q71*c)Z_s$!I1P#_8D!OhVJkVwkk2Tf{KwOqY#elAgXWhG~^B zIGp005{pyaic$+pQ}dE5rwf!ZiA;};W#W{Ch96wYCABOQ;`G#5CJ$~m-}vC<#5_>I zOCjNPQ^@p~ zKiD-S#M93`I36mvuZZb9J1BZ{5-Yd&6f-F>a=H1&hm;oO`KP5#UtPi!CJYI;lKdj1 zfcsy02wAZgGP`3#xH@Zxz!#W>H7y5Kn(UP)Br@Hu zj>+8)lw?a1i%J;c;}cU8lQQEoQ!>kP^HV@^7E+p*%8>4spI2g9VGfIHa6X2os=0Mc z+Zd;ZG%$%U%{VqatAWXnanJOf4NUT^pgEg6)9*GgE#^wdWMBa8O-N^%-qpw?#r7nZ ZiQ%^H^i_>aO04^5Gclx0f7rkz3;;Mkr%?a^ diff --git a/firmware.bin b/firmware.bin index e92fb67d4b7c98bf4b7c3c0ea2288ca4c1add82e..7e1c62f768867c629ad4f1e623dd6b306eea4f13 100644 GIT binary patch delta 27813 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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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�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 literal 51658 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 - #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;