From e5294129ae846a20db79714982670fd1844afd9c Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Mon, 11 Sep 2023 00:02:57 +0100 Subject: [PATCH] Font and display updates --- Makefile | 1 + README.md | 18 +- app/action.c | 11 +- app/app.c | 67 ++++-- app/dtmf.c | 1 + app/fm.c | 571 ++++++++++++++++++++++++++------------------ app/main.c | 4 + app/menu.c | 5 +- app/scanner.c | 25 +- driver/bk1080.c | 55 +++-- driver/bk4819.c | 110 +++++---- driver/eeprom.c | 2 - driver/st7565.c | 7 +- driver/system.c | 5 +- firmware | Bin 172692 -> 172708 bytes firmware.bin | Bin 56880 -> 56808 bytes firmware.packed.bin | Bin 56898 -> 56826 bytes font.c | 47 ++-- helper/boot.c | 15 +- misc.c | 22 +- misc.h | 46 ++-- radio.c | 9 +- ui/main.c | 110 +++++---- version.c | 2 +- win_make.bat | 2 +- 25 files changed, 658 insertions(+), 477 deletions(-) diff --git a/Makefile b/Makefile index 08a3e36..75fd7e7 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,7 @@ LDFLAGS = -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld #LDFLAGS = -mcpu=cortex-m0 -nostartfiles -Wl,-gc-sections,-T,firmware.ld # compilation options +#CFLAGS += -DBIG_FREQ_FONT CFLAGS += -DDISABLE_NOAA CFLAGS += -DDISABLE_VOICE CFLAGS += -DDISABLE_AIRCOPY diff --git a/README.md b/README.md index 50173d0..40dba20 100644 --- a/README.md +++ b/README.md @@ -11,14 +11,15 @@ Am amazing achievement if you ask me ! 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 .. -* 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 += -DKEEP_MEM_NAME .. maintain the memory channel's name when re-saving the memory channel -* CFLAGS += -DDISABLE_ALARM .. remove the ALARM transmit option from the firmware -* CFLAGS += -DCHAN_NAME_FREQ .. show the channel frequency (as well as channel number/name) -* CFLAGS += -DSINGLE_VFO_CHAN .. not yet implemented .. only show a single VFO/CHANNEL if dual watch is disabled -* #CFLAGS += -DBAND_SCOPE .. not yet implemented +* CFLAGS += -DBIG_FREQ_FONT .. show frequency using big 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 += -DKEEP_MEM_NAME .. keep the memory channels name when re-saving a channel +* CFLAGS += -DDISABLE_ALARM .. remove the ALARM transmit option from the firmware +* CFLAGS += -DCHAN_NAME_FREQ .. show the channel frequency (as well as channel number/name) +* #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) show a band scope (spectrum/panadapter) To enable the custom option just uncomment the line by removing the starting '#'. @@ -29,6 +30,7 @@ To enable the custom option just uncomment the line by removing the starting '#' * Slightly less intense menu style * AM RX now allowed everywhere, although the radio really doesn't do AM, the adverts are a con ! * Finer RSSI bar steps +* Nicer big font than original big font (frequency mode) * * "MEM-CH" and "DEL-CH" menus now include channel name * "STEP" menu, added 1.25kHz option, removed 5kHz option diff --git a/app/action.c b/app/action.c index ff6ba58..0ab85bf 100644 --- a/app/action.c +++ b/app/action.c @@ -109,18 +109,20 @@ void ACTION_Scan(bool bRestart) { if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT) { - uint16_t Frequency; - GUI_SelectNextDisplay(DISPLAY_FM); + if (gFM_ScanState != FM_SCAN_OFF) { FM_PlayAndUpdate(); + #ifndef DISABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif } else { + uint16_t Frequency; + if (bRestart) { gFM_AutoScan = true; @@ -134,8 +136,10 @@ void ACTION_Scan(bool bRestart) gFM_ChannelPosition = 0; Frequency = gEeprom.FM_FrequencyPlaying; } + BK1080_GetFrequencyDeviation(Frequency); FM_Tune(Frequency, 1, bRestart); + #ifndef DISABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_BEGIN; #endif @@ -152,9 +156,11 @@ void ACTION_Scan(bool bRestart) #endif { GUI_SelectNextDisplay(DISPLAY_MAIN); + if (gScanState != SCAN_OFF) { SCANNER_Stop(); + #ifndef DISABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif @@ -162,6 +168,7 @@ void ACTION_Scan(bool bRestart) else { CHANNEL_Next(true, 1); + #ifndef DISABLE_VOICE AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_PlaySingleVoice(true); diff --git a/app/app.c b/app/app.c index 7d46cd5..1372a84 100644 --- a/app/app.c +++ b/app/app.c @@ -66,7 +66,7 @@ static void APP_CheckForIncoming(void) { if (gCssScanMode != CSS_SCAN_MODE_OFF && gRxReceptionMode == RX_MODE_NONE) { - ScanPauseDelayIn10msec = 100; + ScanPauseDelayIn10msec = 100; // 1 second gScheduleScanListen = false; gRxReceptionMode = RX_MODE_DETECTED; } @@ -80,6 +80,7 @@ static void APP_CheckForIncoming(void) gScheduleNOAA = false; } #endif + FUNCTION_Select(FUNCTION_INCOMING); return; } @@ -100,6 +101,7 @@ static void APP_CheckForIncoming(void) FUNCTION_Select(FUNCTION_INCOMING); return; } + ScanPauseDelayIn10msec = 20; gScheduleScanListen = false; } @@ -125,14 +127,14 @@ static void APP_HandleIncoming(void) #ifndef DISABLE_NOAA if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE) && gSystickCountdown2) { - bFlag = true; + bFlag = true; gSystickCountdown2 = 0; } #endif if (g_CTCSS_Lost && gCurrentCodeType == CODE_TYPE_CONTINUOUS_TONE) { - bFlag = true; + bFlag = true; gFoundCTCSS = false; } @@ -229,7 +231,7 @@ static void APP_HandleReceive(void) { if (g_CxCSS_TAIL_Found) { - Mode = END_OF_RX_MODE_TTE; + Mode = END_OF_RX_MODE_TTE; g_CxCSS_TAIL_Found = false; } } @@ -249,7 +251,7 @@ static void APP_HandleReceive(void) if (g_CxCSS_TAIL_Found) { - Mode = END_OF_RX_MODE_TTE; + Mode = END_OF_RX_MODE_TTE; g_CxCSS_TAIL_Found = false; } break; @@ -264,14 +266,15 @@ static void APP_HandleReceive(void) gFoundCDCSS = true; gFoundCDCSSCountdown = 100; } + if (g_CxCSS_TAIL_Found) { if (BK4819_GetCTCType() == 1) - { Mode = END_OF_RX_MODE_TTE; - } + g_CxCSS_TAIL_Found = false; } + break; default: @@ -306,7 +309,7 @@ Skip: { case SCAN_RESUME_CO: ScanPauseDelayIn10msec = 360; - gScheduleScanListen = false; + gScheduleScanListen = false; break; case SCAN_RESUME_SE: SCANNER_Stop(); @@ -382,6 +385,7 @@ void APP_StartListening(FUNCTION_Type_t Function) gScheduleScanListen = false; break; } + bScanKeepFrequency = true; } @@ -417,6 +421,7 @@ void APP_StartListening(FUNCTION_Type_t Function) #ifndef DISABLE_VOICE if (gVoiceWriteIndex == 0) +// BK4819_SetAF(gRxVfo->IsAM ? BK4819_AF_AM : BK4819_AF_OPEN); #endif BK4819_SetAF(gRxVfo->IsAM ? BK4819_AF_AM : BK4819_AF_OPEN); @@ -434,14 +439,15 @@ void APP_StartListening(FUNCTION_Type_t Function) void APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t Step) { - const uint32_t Frequency = pInfo->ConfigRX.Frequency + (Step * pInfo->StepFrequency); + uint32_t Frequency = pInfo->ConfigRX.Frequency + (Step * pInfo->StepFrequency); + if (Frequency > gUpperLimitFrequencyBandTable[pInfo->Band]) - pInfo->ConfigRX.Frequency = gLowerLimitFrequencyBandTable[pInfo->Band]; + Frequency = gLowerLimitFrequencyBandTable[pInfo->Band]; else if (Frequency < gLowerLimitFrequencyBandTable[pInfo->Band]) - pInfo->ConfigRX.Frequency = FREQUENCY_FloorToStep(gUpperLimitFrequencyBandTable[pInfo->Band], pInfo->StepFrequency, gLowerLimitFrequencyBandTable[pInfo->Band]); - else - pInfo->ConfigRX.Frequency = Frequency; + Frequency = FREQUENCY_FloorToStep(gUpperLimitFrequencyBandTable[pInfo->Band], pInfo->StepFrequency, gLowerLimitFrequencyBandTable[pInfo->Band]); + + pInfo->ConfigRX.Frequency = Frequency; } static void FREQ_NextChannel(void) @@ -471,7 +477,7 @@ static void MR_NextChannel(void) { gPreviousMrChannel = gNextMrChannel; if (RADIO_CheckValidChannel(Ch1, false, 0)) - gNextMrChannel = Ch1; + gNextMrChannel = Ch1; else gCurrentScanList = 1; } @@ -479,7 +485,7 @@ static void MR_NextChannel(void) if (gCurrentScanList == 1) { if (RADIO_CheckValidChannel(Ch2, false, 0)) - gNextMrChannel = Ch2; + gNextMrChannel = Ch2; else gCurrentScanList = 2; } @@ -501,8 +507,10 @@ Skip: { gEeprom.MrChannel[gEeprom.RX_CHANNEL] = gNextMrChannel; gEeprom.ScreenChannel[gEeprom.RX_CHANNEL] = gNextMrChannel; + RADIO_ConfigureChannel(gEeprom.RX_CHANNEL, 2); RADIO_SetupRegisters(true); + gUpdateDisplay = true; } @@ -529,7 +537,7 @@ static void DUALWATCH_Alternate(void) if (gIsNoaaMode) { if (IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[0]) || IS_NOT_NOAA_CHANNEL(gEeprom.ScreenChannel[1])) - gEeprom.RX_CHANNEL = gEeprom.RX_CHANNEL == 0; + gEeprom.RX_CHANNEL = 1 - gEeprom.RX_CHANNEL; else gEeprom.RX_CHANNEL = 0; @@ -541,7 +549,7 @@ static void DUALWATCH_Alternate(void) else #endif { - gEeprom.RX_CHANNEL = (gEeprom.RX_CHANNEL == 0); + gEeprom.RX_CHANNEL = 1 - gEeprom.RX_CHANNEL; gRxVfo = &gEeprom.VfoInfo[gEeprom.RX_CHANNEL]; } @@ -566,19 +574,22 @@ void APP_CheckRadioInterrupts(void) BK4819_WriteRegister(BK4819_REG_02, 0); Mask = BK4819_ReadRegister(BK4819_REG_02); + if (Mask & BK4819_REG_02_DTMF_5TONE_FOUND) { gDTMF_RequestPending = true; gDTMF_RecvTimeout = 5; + if (gDTMF_WriteIndex > 15) { - uint8_t i; + unsigned int i; for (i = 0; i < (sizeof(gDTMF_Received) - 1); i++) gDTMF_Received[i] = gDTMF_Received[i + 1]; gDTMF_WriteIndex = 15; } gDTMF_Received[gDTMF_WriteIndex++] = DTMF_GetCharacter(BK4819_GetDTMF_5TONE_Code()); + if (gCurrentFunction == FUNCTION_RECEIVE) DTMF_HandleRequest(); } @@ -605,6 +616,7 @@ void APP_CheckRadioInterrupts(void) { g_VOX_Lost = true; gVoxPauseCountdown = 10; + if (gEeprom.VOX_SWITCH) { if (gCurrentFunction == FUNCTION_POWER_SAVE && !gRxIdleMode) @@ -642,7 +654,7 @@ void APP_CheckRadioInterrupts(void) #ifndef DISABLE_AIRCOPY if (Mask & BK4819_REG_02_FSK_FIFO_ALMOST_FULL && gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState == AIRCOPY_TRANSFER && gAirCopyIsSendMode == 0) { - uint8_t i; + unsigned int i; for (i = 0; i < 4; i++) g_FSK_Buffer[gFSKWriteIndex++] = BK4819_ReadRegister(BK4819_REG_5F); AIRCOPY_StorePacket(); @@ -885,8 +897,10 @@ void APP_Update(void) { gCurrentRSSI = BK4819_GetRSSI(); UI_UpdateRSSI(gCurrentRSSI); + gBatterySave = gEeprom.BATTERY_SAVE * 10; gRxIdleMode = true; + BK4819_DisableVox(); BK4819_Sleep(); BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false); @@ -897,6 +911,7 @@ void APP_Update(void) else { DUALWATCH_Alternate(); + gUpdateRSSI = true; gBatterySave = 10; } @@ -1186,7 +1201,7 @@ void APP_TimeSlice10ms(void) GUI_SelectNextDisplay(DISPLAY_SCANNER); } - gScanDelay = 21; + gScanDelay = g_scan_delay; break; case SCAN_CSS_STATE_SCANNING: @@ -1232,7 +1247,7 @@ void APP_TimeSlice10ms(void) if (gScanCssState < SCAN_CSS_STATE_FOUND) { BK4819_SetScanFrequency(gScanFrequency); - gScanDelay = 21; + gScanDelay = g_scan_delay; break; } @@ -1339,6 +1354,7 @@ void APP_TimeSlice500ms(void) if (gScreenToDisplay == DISPLAY_SCANNER) { BK4819_StopScan(); + RADIO_ConfigureChannel(0, 2); RADIO_ConfigureChannel(1, 2); RADIO_SetupRegisters(true); @@ -1379,6 +1395,7 @@ void APP_TimeSlice500ms(void) if (gLowBattery) { gLowBatteryBlink = ++gLowBatteryCountdown & 1; + UI_DisplayBattery(gLowBatteryCountdown); if (gCurrentFunction != FUNCTION_TRANSMIT) @@ -1409,6 +1426,7 @@ void APP_TimeSlice500ms(void) gReducedService = true; FUNCTION_Select(FUNCTION_POWER_SAVE); ST7565_Configure_GPIO_B11(); + //if (gEeprom.BACKLIGHT < 5) GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); } @@ -1440,7 +1458,7 @@ void APP_TimeSlice500ms(void) if (--gDTMF_AUTO_RESET_TIME == 0) { gDTMF_CallState = DTMF_CALL_STATE_NONE; - gUpdateDisplay = true; + gUpdateDisplay = true; } } @@ -1498,9 +1516,11 @@ void APP_TimeSlice500ms(void) void CHANNEL_Next(bool bFlag, int8_t Direction) { RADIO_SelectVfos(); + gNextMrChannel = gRxVfo->CHANNEL_SAVE; gCurrentScanList = 0; gScanState = Direction; + if (IS_MR_CHANNEL(gNextMrChannel)) { if (bFlag) @@ -1513,7 +1533,8 @@ void CHANNEL_Next(bool bFlag, int8_t Direction) gRestoreFrequency = gRxVfo->ConfigRX.Frequency; FREQ_NextChannel(); } - ScanPauseDelayIn10msec = 50; + + ScanPauseDelayIn10msec = 50; // 500ms gScheduleScanListen = false; gRxReceptionMode = RX_MODE_NONE; gScanPauseMode = false; diff --git a/app/dtmf.c b/app/dtmf.c index d8c7185..45aa198 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -344,6 +344,7 @@ void DTMF_Reply(void) if (gEeprom.DTMF_SIDE_TONE) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + gEnableSpeaker = true; Delay = gEeprom.DTMF_PRELOAD_TIME; diff --git a/app/fm.c b/app/fm.c index 5541db5..f2446b6 100644 --- a/app/fm.c +++ b/app/fm.c @@ -30,36 +30,36 @@ #include "ui/inputbox.h" #include "ui/ui.h" -uint16_t gFM_Channels[20]; -bool gFmRadioMode; -uint8_t gFmRadioCountdown; +#ifndef ARRAY_SIZE + #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#endif + +uint16_t gFM_Channels[20]; +bool gFmRadioMode; +uint8_t gFmRadioCountdown; volatile uint16_t gFmPlayCountdown; -volatile int8_t gFM_ScanState; -bool gFM_AutoScan; -uint8_t gFM_ChannelPosition; -bool gFM_FoundFrequency; -bool gFM_AutoScan; -uint8_t gFM_ResumeCountdown; -uint16_t gFM_RestoreCountdown; +volatile int8_t gFM_ScanState; +bool gFM_AutoScan; +uint8_t gFM_ChannelPosition; +bool gFM_FoundFrequency; +bool gFM_AutoScan; +uint8_t gFM_ResumeCountdown; +uint16_t gFM_RestoreCountdown; bool FM_CheckValidChannel(uint8_t Channel) { - if (Channel < 20 && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) { - return true; - } - - return false; + return (Channel < ARRAY_SIZE(gFM_Channels) && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) ? true : false; } uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) { - uint8_t i; + unsigned int i; - for (i = 0; i < 20; i++) { - Channel %= 20; - if (FM_CheckValidChannel(Channel)) { + for (i = 0; i < ARRAY_SIZE(gFM_Channels); i++) + { + Channel %= ARRAY_SIZE(gFM_Channels); + if (FM_CheckValidChannel(Channel)) return Channel; - } Channel += Direction; } @@ -68,16 +68,17 @@ uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) int FM_ConfigureChannelState(void) { - uint8_t Channel; - gEeprom.FM_FrequencyPlaying = gEeprom.FM_SelectedFrequency; - if (gEeprom.FM_IsMrMode) { - Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel, FM_CHANNEL_UP); - if (Channel == 0xFF) { + + if (gEeprom.FM_IsMrMode) + { + const uint8_t Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel, FM_CHANNEL_UP); + if (Channel == 0xFF) + { gEeprom.FM_IsMrMode = false; return -1; } - gEeprom.FM_SelectedChannel = Channel; + gEeprom.FM_SelectedChannel = Channel; gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; } @@ -86,24 +87,27 @@ int FM_ConfigureChannelState(void) void FM_TurnOff(void) { - gFmRadioMode = false; - gFM_ScanState = FM_SCAN_OFF; + gFmRadioMode = false; + gFM_ScanState = FM_SCAN_OFF; gFM_RestoreCountdown = 0; + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + gEnableSpeaker = false; + BK1080_Init(0, false); - gUpdateStatus = true; + + gUpdateStatus = true; } void FM_EraseChannels(void) { - uint8_t i; - uint8_t Template[8]; + unsigned int i; + uint8_t Template[8]; memset(Template, 0xFF, sizeof(Template)); - for (i = 0; i < 5; i++) { + for (i = 0; i < 5; i++) EEPROM_WriteBuffer(0x0E40 + (i * 8), Template); - } memset(gFM_Channels, 0xFF, sizeof(gFM_Channels)); } @@ -111,84 +115,97 @@ void FM_EraseChannels(void) void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + gEnableSpeaker = false; - if (gFM_ScanState == FM_SCAN_OFF) { - gFmPlayCountdown = 120; - } else { - gFmPlayCountdown = 10; - } - gScheduleFM = false; - gFM_FoundFrequency = false; - gAskToSave = false; - gAskToDelete = false; + + gFmPlayCountdown = (gFM_ScanState == FM_SCAN_OFF) ? 120 : 10; + + gScheduleFM = false; + gFM_FoundFrequency = false; + gAskToSave = false; + gAskToDelete = false; gEeprom.FM_FrequencyPlaying = Frequency; - if (!bFlag) { + + if (!bFlag) + { Frequency += Step; - if (Frequency < gEeprom.FM_LowerLimit) { + if (Frequency < gEeprom.FM_LowerLimit) Frequency = gEeprom.FM_UpperLimit; - } else if (Frequency > gEeprom.FM_UpperLimit) { + else + if (Frequency > gEeprom.FM_UpperLimit) Frequency = gEeprom.FM_LowerLimit; - } + gEeprom.FM_FrequencyPlaying = Frequency; } gFM_ScanState = Step; + BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); } void FM_PlayAndUpdate(void) { gFM_ScanState = FM_SCAN_OFF; - if (gFM_AutoScan) { - gEeprom.FM_IsMrMode = true; + + if (gFM_AutoScan) + { + gEeprom.FM_IsMrMode = true; gEeprom.FM_SelectedChannel = 0; } + FM_ConfigureChannelState(); BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); SETTINGS_SaveFM(); + gFmPlayCountdown = 0; - gScheduleFM = false; - gAskToSave = false; + gScheduleFM = false; + gAskToSave = false; + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; + + gEnableSpeaker = true; } int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) { - uint16_t Test2; - uint16_t Deviation; int ret = -1; - Test2 = BK1080_ReadRegister(BK1080_REG_07); + const uint16_t Test2 = BK1080_ReadRegister(BK1080_REG_07); + // This is supposed to be a signed value, but above function is unsigned - Deviation = BK1080_REG_07_GET_FREQD(Test2); + const uint16_t Deviation = BK1080_REG_07_GET_FREQD(Test2); - if (BK1080_REG_07_GET_SNR(Test2) >= 2) { - uint16_t Status; - - Status = BK1080_ReadRegister(BK1080_REG_10); - if ((Status & BK1080_REG_10_MASK_AFCRL) == BK1080_REG_10_AFCRL_NOT_RAILED && BK1080_REG_10_GET_RSSI(Status) >= 10) { + if (BK1080_REG_07_GET_SNR(Test2) >= 2) + { + const uint16_t Status = BK1080_ReadRegister(BK1080_REG_10); + if ((Status & BK1080_REG_10_MASK_AFCRL) == BK1080_REG_10_AFCRL_NOT_RAILED && BK1080_REG_10_GET_RSSI(Status) >= 10) + { // if (Deviation > -281 && Deviation < 280) - if (Deviation < 280 || Deviation > 3815) { + if (Deviation < 280 || Deviation > 3815) + { // not BLE(less than or equal) - if (Frequency > LowerLimit && (Frequency - BK1080_BaseFrequency) == 1) { - if (BK1080_FrequencyDeviation & 0x800) { + + if (Frequency > LowerLimit && (Frequency - BK1080_BaseFrequency) == 1) + { + if (BK1080_FrequencyDeviation & 0x800) goto Bail; - } - if (BK1080_FrequencyDeviation < 20) { + + if (BK1080_FrequencyDeviation < 20) goto Bail; - } } + // not BLT(less than) - if (Frequency >= LowerLimit && (BK1080_BaseFrequency - Frequency) == 1) { - if ((BK1080_FrequencyDeviation & 0x800) == 0) { + + if (Frequency >= LowerLimit && (BK1080_BaseFrequency - Frequency) == 1) + { + if ((BK1080_FrequencyDeviation & 0x800) == 0) goto Bail; - } - // if (BK1080_FrequencyDeviation > -21) { - if (BK1080_FrequencyDeviation > 4075) { + + // if (BK1080_FrequencyDeviation > -21) + if (BK1080_FrequencyDeviation > 4075) goto Bail; - } } + ret = 0; } } @@ -196,73 +213,97 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) Bail: BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { -#define STATE_FREQ_MODE 0 -#define STATE_MR_MODE 1 -#define STATE_SAVE 2 + #define STATE_FREQ_MODE 0 + #define STATE_MR_MODE 1 + #define STATE_SAVE 2 - if (!bKeyHeld && bKeyPressed) { - if (!gWasFKeyPressed) { + if (!bKeyHeld && bKeyPressed) + { + if (!gWasFKeyPressed) + { uint8_t State; - if (gAskToDelete) { + if (gAskToDelete) + { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (gAskToSave) { + + if (gAskToSave) + { State = STATE_SAVE; - } else { - if (gFM_ScanState != FM_SCAN_OFF) { + } + else + { + if (gFM_ScanState != FM_SCAN_OFF) + { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (gEeprom.FM_IsMrMode) { - State = STATE_MR_MODE; - } else { - State = STATE_FREQ_MODE; - } + + State = gEeprom.FM_IsMrMode ? STATE_MR_MODE : STATE_FREQ_MODE; } + INPUTBOX_Append(Key); + gRequestDisplayScreen = DISPLAY_FM; - if (State == STATE_FREQ_MODE) { - if (gInputBoxIndex == 1) { - if (gInputBox[0] > 1) { + + if (State == STATE_FREQ_MODE) + { + if (gInputBoxIndex == 1) + { + if (gInputBox[0] > 1) + { gInputBox[1] = gInputBox[0]; gInputBox[0] = 0; gInputBoxIndex = 2; } - } else if (gInputBoxIndex > 3) { + } + else + if (gInputBoxIndex > 3) + { uint32_t Frequency; gInputBoxIndex = 0; NUMBER_Get(gInputBox, &Frequency); - Frequency = Frequency / 10000; - if (Frequency < gEeprom.FM_LowerLimit || gEeprom.FM_UpperLimit < Frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + Frequency /= 10000; + + if (Frequency < gEeprom.FM_LowerLimit || gEeprom.FM_UpperLimit < Frequency) + { + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gRequestDisplayScreen = DISPLAY_FM; return; } + gEeprom.FM_SelectedFrequency = (uint16_t)Frequency; + #ifndef DISABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif + gEeprom.FM_FrequencyPlaying = gEeprom.FM_SelectedFrequency; BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); gRequestSaveFM = true; return; } - } else if (gInputBoxIndex == 2) { + } + else + if (gInputBoxIndex == 2) + { uint8_t Channel; gInputBoxIndex = 0; Channel = ((gInputBox[0] * 10) + gInputBox[1]) - 1; - if (State == STATE_MR_MODE) { + + if (State == STATE_MR_MODE) + { if (FM_CheckValidChannel(Channel)) { #ifndef DISABLE_VOICE @@ -286,6 +327,7 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) gFM_ChannelPosition = Channel; return; } + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } @@ -293,73 +335,90 @@ static void FM_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) #ifndef DISABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif - + return; } - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gWasFKeyPressed = false; - gUpdateStatus = true; + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gWasFKeyPressed = false; + gUpdateStatus = true; gRequestDisplayScreen = DISPLAY_FM; - switch (Key) { - case KEY_0: - ACTION_FM(); - break; - case KEY_1: - gEeprom.FM_IsMrMode = !gEeprom.FM_IsMrMode; - if (!FM_ConfigureChannelState()) { - BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); - gRequestSaveFM = true; - } else { + switch (Key) + { + case KEY_0: + ACTION_FM(); + break; + + case KEY_1: + gEeprom.FM_IsMrMode = !gEeprom.FM_IsMrMode; + + if (!FM_ConfigureChannelState()) + { + BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); + gRequestSaveFM = true; + } + else + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + break; + + case KEY_2: + ACTION_Scan(true); + break; + + case KEY_3: + ACTION_Scan(false); + break; + + default: gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - } - break; - - case KEY_2: - ACTION_Scan(true); - break; - - case KEY_3: - ACTION_Scan(false); - break; - - default: - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - break; + break; } } } static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) { - if (bKeyHeld) { + if (bKeyHeld) return; - } - if (!bKeyPressed) { + + if (!bKeyPressed) return; - } + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - if (gFM_ScanState == FM_SCAN_OFF) { - if (gInputBoxIndex == 0) { - if (!gAskToSave && !gAskToDelete) { + + if (gFM_ScanState == FM_SCAN_OFF) + { + if (gInputBoxIndex == 0) + { + if (!gAskToSave && !gAskToDelete) + { ACTION_FM(); return; } - gAskToSave = false; + + gAskToSave = false; gAskToDelete = false; - } else { - gInputBoxIndex--; - gInputBox[gInputBoxIndex] = 10; - if (gInputBoxIndex) { - if (gInputBoxIndex != 1) { + } + else + { + gInputBox[--gInputBoxIndex] = 10; + + if (gInputBoxIndex) + { + if (gInputBoxIndex != 1) + { gRequestDisplayScreen = DISPLAY_FM; return; } - if (gInputBox[0] != 0) { + + if (gInputBox[0] != 0) + { gRequestDisplayScreen = DISPLAY_FM; return; } } + gInputBoxIndex = 0; } @@ -380,184 +439,224 @@ static void FM_Key_EXIT(bool bKeyPressed, bool bKeyHeld) static void FM_Key_MENU(bool bKeyPressed, bool bKeyHeld) { - if (bKeyHeld) { + if (bKeyHeld) return; - } - if (!bKeyPressed) { + + if (!bKeyPressed) return; - } gRequestDisplayScreen = DISPLAY_FM; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - if (gFM_ScanState == FM_SCAN_OFF) { - if (!gEeprom.FM_IsMrMode) { - if (gAskToSave) { + if (gFM_ScanState == FM_SCAN_OFF) + { + if (!gEeprom.FM_IsMrMode) + { + if (gAskToSave) + { gFM_Channels[gFM_ChannelPosition] = gEeprom.FM_FrequencyPlaying; - gAskToSave = false; - gRequestSaveFM = true; - } else { - gAskToSave = true; + gAskToSave = false; + gRequestSaveFM = true; } - } else { - if (gAskToDelete) { + else + gAskToSave = true; + } + else + { + if (gAskToDelete) + { gFM_Channels[gEeprom.FM_SelectedChannel] = 0xFFFF; + FM_ConfigureChannelState(); BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); + gRequestSaveFM = true; - gAskToDelete = false; - } else { - gAskToDelete = true; + gAskToDelete = false; } + else + gAskToDelete = true; } - } else { - if (gFM_AutoScan || !gFM_FoundFrequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + } + else + { + if (gFM_AutoScan || !gFM_FoundFrequency) + { + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gInputBoxIndex = 0; return; - } else if (gAskToSave) { - gFM_Channels[gFM_ChannelPosition] = gEeprom.FM_FrequencyPlaying; - gAskToSave = false; - gRequestSaveFM = true; - } else { - gAskToSave = true; } + + if (gAskToSave) + { + gFM_Channels[gFM_ChannelPosition] = gEeprom.FM_FrequencyPlaying; + gAskToSave = false; + gRequestSaveFM = true; + } + else + gAskToSave = true; } } static void FM_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Step) { - if (bKeyHeld || !bKeyPressed) { - if (gInputBoxIndex) { + if (bKeyHeld || !bKeyPressed) + { + if (gInputBoxIndex) return; - } - if (!bKeyPressed) { + + if (!bKeyPressed) return; - } - } else { - if (gInputBoxIndex) { + } + else + { + if (gInputBoxIndex) + { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; } - if (gAskToSave) { + + if (gAskToSave) + { gRequestDisplayScreen = DISPLAY_FM; - gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); + gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); return; } - if (gFM_ScanState != FM_SCAN_OFF) { - if (gFM_AutoScan) { + + if (gFM_ScanState != FM_SCAN_OFF) + { + if (gFM_AutoScan) + { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } + FM_Tune(gEeprom.FM_FrequencyPlaying, Step, false); gRequestDisplayScreen = DISPLAY_FM; return; } - if (gEeprom.FM_IsMrMode) { - uint8_t Channel; - Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel + Step, Step); - if (Channel == 0xFF || gEeprom.FM_SelectedChannel == Channel) { + if (gEeprom.FM_IsMrMode) + { + const uint8_t Channel = FM_FindNextChannel(gEeprom.FM_SelectedChannel + Step, Step); + if (Channel == 0xFF || gEeprom.FM_SelectedChannel == Channel) goto Bail; - } - gEeprom.FM_SelectedChannel = Channel; - gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; - } else { - uint16_t Frequency; - Frequency = gEeprom.FM_SelectedFrequency + Step; - if (Frequency < gEeprom.FM_LowerLimit) { + gEeprom.FM_SelectedChannel = Channel; + gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; + } + else + { + uint16_t Frequency = gEeprom.FM_SelectedFrequency + Step; + if (Frequency < gEeprom.FM_LowerLimit) Frequency = gEeprom.FM_UpperLimit; - } else if (Frequency > gEeprom.FM_UpperLimit) { + else + if (Frequency > gEeprom.FM_UpperLimit) Frequency = gEeprom.FM_LowerLimit; - } - gEeprom.FM_FrequencyPlaying = Frequency; + + gEeprom.FM_FrequencyPlaying = Frequency; gEeprom.FM_SelectedFrequency = gEeprom.FM_FrequencyPlaying; } + gRequestSaveFM = true; Bail: BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); + gRequestDisplayScreen = DISPLAY_FM; } void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { - switch (Key) { - case KEY_0: case KEY_1: case KEY_2: case KEY_3: - case KEY_4: case KEY_5: case KEY_6: case KEY_7: - case KEY_8: case KEY_9: - FM_Key_DIGITS(Key, bKeyPressed, bKeyHeld); - break; - case KEY_MENU: - FM_Key_MENU(bKeyPressed, bKeyHeld); - return; - case KEY_UP: - FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); - break; - case KEY_DOWN: - FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); - break;; - case KEY_EXIT: - FM_Key_EXIT(bKeyPressed, bKeyHeld); - break; - case KEY_F: - GENERIC_Key_F(bKeyPressed, bKeyHeld); - break; - case KEY_PTT: - GENERIC_Key_PTT(bKeyPressed); - break; - default: - if (!bKeyHeld && bKeyPressed) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - } - break; + switch (Key) + { + case KEY_0: + case KEY_1: + case KEY_2: + case KEY_3: + case KEY_4: + case KEY_5: + case KEY_6: + case KEY_7: + case KEY_8: + case KEY_9: + FM_Key_DIGITS(Key, bKeyPressed, bKeyHeld); + break; + case KEY_MENU: + FM_Key_MENU(bKeyPressed, bKeyHeld); + return; + case KEY_UP: + FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + break; + case KEY_DOWN: + FM_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); + break;; + case KEY_EXIT: + FM_Key_EXIT(bKeyPressed, bKeyHeld); + break; + case KEY_F: + GENERIC_Key_F(bKeyPressed, bKeyHeld); + break; + case KEY_PTT: + GENERIC_Key_PTT(bKeyPressed); + break; + default: + if (!bKeyHeld && bKeyPressed) + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + break; } } void FM_Play(void) { - if (!FM_CheckFrequencyLock(gEeprom.FM_FrequencyPlaying, gEeprom.FM_LowerLimit)) { - if (!gFM_AutoScan) { - gFmPlayCountdown = 0; + if (!FM_CheckFrequencyLock(gEeprom.FM_FrequencyPlaying, gEeprom.FM_LowerLimit)) + { + if (!gFM_AutoScan) + { + gFmPlayCountdown = 0; gFM_FoundFrequency = true; - if (!gEeprom.FM_IsMrMode) { + + if (!gEeprom.FM_IsMrMode) gEeprom.FM_SelectedFrequency = gEeprom.FM_FrequencyPlaying; - } + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); gEnableSpeaker = true; + GUI_SelectNextDisplay(DISPLAY_FM); return; } - if (gFM_ChannelPosition < 20) { + + if (gFM_ChannelPosition < 20) gFM_Channels[gFM_ChannelPosition++] = gEeprom.FM_FrequencyPlaying; - } - if (gFM_ChannelPosition >= 20) { + + if (gFM_ChannelPosition >= 20) + { FM_PlayAndUpdate(); GUI_SelectNextDisplay(DISPLAY_FM); return; } } - if (gFM_AutoScan && gEeprom.FM_FrequencyPlaying >= gEeprom.FM_UpperLimit) { + if (gFM_AutoScan && gEeprom.FM_FrequencyPlaying >= gEeprom.FM_UpperLimit) FM_PlayAndUpdate(); - } else { + else FM_Tune(gEeprom.FM_FrequencyPlaying, gFM_ScanState, false); - } GUI_SelectNextDisplay(DISPLAY_FM); } void FM_Start(void) { - gFmRadioMode = true; - gFM_ScanState = FM_SCAN_OFF; + gFmRadioMode = true; + gFM_ScanState = FM_SCAN_OFF; gFM_RestoreCountdown = 0; - BK1080_Init(gEeprom.FM_FrequencyPlaying, true); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - gEnableSpeaker = true; - gUpdateStatus = true; -} + BK1080_Init(gEeprom.FM_FrequencyPlaying, true); + + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); + + gEnableSpeaker = true; + gUpdateStatus = true; +} diff --git a/app/main.c b/app/main.c index 5a25f44..b6ce16a 100644 --- a/app/main.c +++ b/app/main.c @@ -341,6 +341,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) if (!bKeyHeld && bKeyPressed) { gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + if (!gFmRadioMode) { if (gScanState == SCAN_OFF) @@ -348,6 +349,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) if (gInputBoxIndex == 0) return; gInputBox[--gInputBoxIndex] = 10; + #ifndef DISABLE_VOICE if (gInputBoxIndex == 0) gAnotherVoiceID = VOICE_ID_CANCEL; @@ -356,6 +358,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) else { SCANNER_Stop(); + #ifndef DISABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; #endif @@ -364,6 +367,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) gRequestDisplayScreen = DISPLAY_MAIN; return; } + ACTION_FM(); } } diff --git a/app/menu.c b/app/menu.c index 0c64724..0422e73 100644 --- a/app/menu.c +++ b/app/menu.c @@ -642,10 +642,7 @@ void MENU_SelectNextCode(void) RADIO_SetupRegisters(true); - if (gSelectedCodeType == CODE_TYPE_CONTINUOUS_TONE) - ScanPauseDelayIn10msec = 20; - else - ScanPauseDelayIn10msec = 30; + ScanPauseDelayIn10msec = (gSelectedCodeType == CODE_TYPE_CONTINUOUS_TONE) ? 20 : 30; gUpdateDisplay = true; } diff --git a/app/scanner.c b/app/scanner.c index d8ec012..e77b380 100644 --- a/app/scanner.c +++ b/app/scanner.c @@ -108,6 +108,7 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld) gRequestDisplayScreen = DISPLAY_SCANNER; break; } + // Fallthrough case 2: @@ -159,14 +160,10 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) case 0: if (!gScanSingleFrequency) { - uint32_t Freq250; - uint32_t Freq625; - int16_t Delta250; int16_t Delta625; - - Freq250 = FREQUENCY_FloorToStep(gScanFrequency, 250, 0); - Freq625 = FREQUENCY_FloorToStep(gScanFrequency, 625, 0); - Delta250 = (short)gScanFrequency - (short)Freq250; + uint32_t Freq250 = FREQUENCY_FloorToStep(gScanFrequency, 250, 0); + uint32_t Freq625 = FREQUENCY_FloorToStep(gScanFrequency, 625, 0); + int16_t Delta250 = (int16_t)gScanFrequency - (int16_t)Freq250; if (125 < Delta250) { @@ -174,7 +171,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) Freq250 += 250; } - Delta625 = (short)gScanFrequency - (short)Freq625; + Delta625 = (int16_t)gScanFrequency - (int16_t)Freq625; if (312 < Delta625) { @@ -239,6 +236,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) { RADIO_ConfigureChannel(0, 2); RADIO_ConfigureChannel(1, 2); + gTxVfo->ConfigRX.CodeType = gScanCssResultType; gTxVfo->ConfigRX.Code = gScanCssResultCode; gTxVfo->ConfigTX.CodeType = gScanCssResultType; @@ -274,9 +272,9 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld) static void SCANNER_Key_STAR(bool bKeyPressed, bool bKeyHeld) { - if ((!bKeyHeld) && (bKeyPressed)) + if (!bKeyHeld && bKeyPressed) { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; gFlagStartScan = true; } return; @@ -328,7 +326,7 @@ void SCANNER_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) SCANNER_Key_MENU(bKeyPressed, bKeyHeld); break; case KEY_UP: - SCANNER_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); + SCANNER_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1); break; case KEY_DOWN: SCANNER_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1); @@ -355,6 +353,7 @@ void SCANNER_Start(void) uint16_t BackupFrequency; BK4819_StopScan(); + RADIO_SelectVfos(); #ifndef DISABLE_NOAA @@ -392,7 +391,7 @@ void SCANNER_Start(void) BK4819_EnableFrequencyScan(); } - gScanDelay = 21; + gScanDelay = g_scan_delay; gScanCssResultCode = 0xFF; gScanCssResultType = 0xFF; gScanHitCount = 0; @@ -410,7 +409,7 @@ void SCANNER_Start(void) void SCANNER_Stop(void) { - uint8_t Previous = gRestoreMrChannel; + const uint8_t Previous = gRestoreMrChannel; gScanState = SCAN_OFF; diff --git a/driver/bk1080.c b/driver/bk1080.c index 7c9d6bb..48b8157 100644 --- a/driver/bk1080.c +++ b/driver/bk1080.c @@ -21,17 +21,16 @@ #include "driver/system.h" #include "misc.h" -#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#ifndef ARRAY_SIZE + #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#endif -static const uint16_t BK1080_RegisterTable[] = { - 0x0008, 0x1080, 0x0201, 0x0000, - 0x40C0, 0x0A1F, 0x002E, 0x02FF, - 0x5B11, 0x0000, 0x411E, 0x0000, - 0xCE00, 0x0000, 0x0000, 0x1000, - 0x3197, 0x0000, 0x13FF, 0x9852, - 0x0000, 0x0000, 0x0008, 0x0000, - 0x51E1, 0xA8BC, 0x2645, 0x00E4, - 0x1CD8, 0x3A50, 0xEAE0, 0x3000, +static const uint16_t BK1080_RegisterTable[] = +{ + 0x0008, 0x1080, 0x0201, 0x0000, 0x40C0, 0x0A1F, 0x002E, 0x02FF, + 0x5B11, 0x0000, 0x411E, 0x0000, 0xCE00, 0x0000, 0x0000, 0x1000, + 0x3197, 0x0000, 0x13FF, 0x9852, 0x0000, 0x0000, 0x0008, 0x0000, + 0x51E1, 0xA8BC, 0x2645, 0x00E4, 0x1CD8, 0x3A50, 0xEAE0, 0x3000, 0x0200, 0x0000, }; @@ -42,28 +41,40 @@ uint16_t BK1080_FrequencyDeviation; void BK1080_Init(uint16_t Frequency, bool bDoScan) { - uint8_t i; + unsigned int i; - if (bDoScan) { + if (bDoScan) + { GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BK1080); - if (!gIsInitBK1080) { - for (i = 0; i < ARRAY_SIZE(BK1080_RegisterTable); i++) { + if (!gIsInitBK1080) + { + for (i = 0; i < ARRAY_SIZE(BK1080_RegisterTable); i++) BK1080_WriteRegister(i, BK1080_RegisterTable[i]); - } + SYSTEM_DelayMs(250); + BK1080_WriteRegister(BK1080_REG_25_INTERNAL, 0xA83C); BK1080_WriteRegister(BK1080_REG_25_INTERNAL, 0xA8BC); + SYSTEM_DelayMs(60); + gIsInitBK1080 = true; - } else { + } + else + { BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0201); } + BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F); BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); + SYSTEM_DelayMs(10); + BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | 0x8000); - } else { + } + else + { BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0241); GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080); } @@ -78,6 +89,7 @@ uint16_t BK1080_ReadRegister(BK1080_Register_t Register) I2C_Write((Register << 1) | I2C_READ); I2C_ReadBuffer(Value, sizeof(Value)); I2C_Stop(); + return (Value[0] << 8) | Value[1]; } @@ -93,11 +105,7 @@ void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value) void BK1080_Mute(bool Mute) { - if (Mute) { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x4201); - } else { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0201); - } + BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, Mute ? 0x4201 : 0x0201); } void BK1080_SetFrequency(uint16_t Frequency) @@ -109,7 +117,6 @@ void BK1080_SetFrequency(uint16_t Frequency) void BK1080_GetFrequencyDeviation(uint16_t Frequency) { - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) / 16; } - diff --git a/driver/bk4819.c b/driver/bk4819.c index 40eedf7..8a14456 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -102,15 +102,16 @@ uint16_t BK4819_ReadRegister(BK4819_REGISTER_t Register) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SYSTICK_DelayUs(1); + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - BK4819_WriteU8(Register | 0x80); - Value = BK4819_ReadU16(); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + SYSTICK_DelayUs(1); + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); @@ -121,14 +122,22 @@ void BK4819_WriteRegister(BK4819_REGISTER_t Register, uint16_t Data) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SYSTICK_DelayUs(1); + GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); BK4819_WriteU8(Register); + SYSTICK_DelayUs(1); + BK4819_WriteU16(Data); + SYSTICK_DelayUs(1); + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + SYSTICK_DelayUs(1); + GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); } @@ -140,7 +149,7 @@ void BK4819_WriteU8(uint8_t Data) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); for (i = 0; i < 8; i++) { - if ((Data & 0x80U) == 0) + if ((Data & 0x80) == 0) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); else GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); @@ -163,7 +172,7 @@ void BK4819_WriteU16(uint16_t Data) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); for (i = 0; i < 16; i++) { - if ((Data & 0x8000U) == 0U) + if ((Data & 0x8000) == 0) GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); else GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); @@ -229,8 +238,8 @@ 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, 0 - | BK4819_REG_51_ENABLE_CxCSS + BK4819_WriteRegister(BK4819_REG_51, + BK4819_REG_51_ENABLE_CxCSS | BK4819_REG_51_GPIO6_PIN2_NORMAL | BK4819_REG_51_TX_CDCSS_POSITIVE | BK4819_REG_51_MODE_CDCSS @@ -238,16 +247,14 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord) | BK4819_REG_51_1050HZ_NO_DETECTION | BK4819_REG_51_AUTO_CDCSS_BW_ENABLE | BK4819_REG_51_AUTO_CTCSS_BW_ENABLE - | (51U << BK4819_REG_51_SHIFT_CxCSS_TX_GAIN1)); + | (51u << BK4819_REG_51_SHIFT_CxCSS_TX_GAIN1)); // CTC1 Frequency Control Word = 2775 - BK4819_WriteRegister(BK4819_REG_07, 0 - | BK4819_REG_07_MODE_CTC1 - | (2775u << BK4819_REG_07_SHIFT_FREQUENCY)); + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | (2775u << BK4819_REG_07_SHIFT_FREQUENCY)); // Set the code word - BK4819_WriteRegister(BK4819_REG_08, 0x0000 | ((CodeWord >> 0) & 0xFFF)); - BK4819_WriteRegister(BK4819_REG_08, 0x8000 | ((CodeWord >> 12) & 0xFFF)); + BK4819_WriteRegister(BK4819_REG_08, 0x0000 | ((CodeWord >> 0) & 0x0FFF)); + BK4819_WriteRegister(BK4819_REG_08, 0x8000 | ((CodeWord >> 12) & 0x0FFF)); } void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) @@ -255,7 +262,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) uint16_t Config; if (FreqControlWord == 2625) - { // Enables 1050Hz detection mode + { // Enables 1050Hz detection mode // Enable TxCTCSS // CTCSS Mode // 1050/4 Detect Enable @@ -265,8 +272,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) Config = 0x944A; } else - { - // Enable TxCTCSS + { // Enable TxCTCSS // CTCSS Mode // Enable Auto CDCSS Bw Mode // Enable Auto CTCSS Bw Mode @@ -276,15 +282,13 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) BK4819_WriteRegister(BK4819_REG_51, Config); // CTC1 Frequency Control Word - BK4819_WriteRegister(BK4819_REG_07, 0 - | BK4819_REG_07_MODE_CTC1 - | ((FreqControlWord * 2065) / 1000) << BK4819_REG_07_SHIFT_FREQUENCY); + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | ((FreqControlWord * 2065) / 1000) << BK4819_REG_07_SHIFT_FREQUENCY); } void BK4819_Set55HzTailDetection(void) { // CTC2 Frequency Control Word = round_nearest(25391 / 55) = 462 - BK4819_WriteRegister(BK4819_REG_07, (1U << 13) | 462); + BK4819_WriteRegister(BK4819_REG_07, (1u << 13) | 462); } void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) @@ -356,15 +360,14 @@ void BK4819_SetupSquelch(uint8_t SquelchOpenRSSIThresh, uint8_t SquelchCloseRSSI #if 1 BK4819_WriteRegister(BK4819_REG_4D, 0xA000 | SquelchCloseGlitchThresh); #else - // fastest squelch, https://github.com/fagci/uv-k5-firmware-fagci-mod - // this doesn't work ! + // fastest squelch, https://github.com/fagci/uv-k5-firmware-fagci-mod this doesn't work BK4819_WriteRegister(BK4819_REG_4D, 0b01000000 | SquelchCloseGlitchThresh); #endif // 0x6f = 0110 1111 meaning the default sql delays from the datasheet are used (101 and 111) BK4819_WriteRegister(BK4819_REG_4E, 0x6F00 | SquelchOpenGlitchThresh); BK4819_WriteRegister(BK4819_REG_4F, (SquelchCloseNoiseThresh << 8) | SquelchOpenNoiseThresh); - BK4819_WriteRegister(BK4819_REG_78, (SquelchOpenRSSIThresh << 8) | SquelchCloseRSSIThresh); + BK4819_WriteRegister(BK4819_REG_78, (SquelchOpenRSSIThresh << 8) | SquelchCloseRSSIThresh); BK4819_SetAF(BK4819_AF_MUTE); @@ -456,8 +459,8 @@ void BK4819_DisableDTMF(void) void BK4819_EnableDTMF(void) { BK4819_WriteRegister(BK4819_REG_21, 0x06D8); - BK4819_WriteRegister(BK4819_REG_24, 0 - | (1U << BK4819_REG_24_SHIFT_UNKNOWN_15) + BK4819_WriteRegister(BK4819_REG_24, + (1U << BK4819_REG_24_SHIFT_UNKNOWN_15) | (24 << BK4819_REG_24_SHIFT_THRESHOLD) | (1U << BK4819_REG_24_SHIFT_UNKNOWN_6) | BK4819_REG_24_ENABLE @@ -473,16 +476,13 @@ void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch) BK4819_SetAF(BK4819_AF_BEEP); if (bTuningGainSwitch == 0) - ToneConfig = 0 | BK4819_REG_70_ENABLE_TONE1 | (96U << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN); + ToneConfig = BK4819_REG_70_ENABLE_TONE1 | (96U << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN); else - ToneConfig = 0 | BK4819_REG_70_ENABLE_TONE1 | (28U << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN); + ToneConfig = BK4819_REG_70_ENABLE_TONE1 | (28U << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN); BK4819_WriteRegister(BK4819_REG_70, ToneConfig); BK4819_WriteRegister(BK4819_REG_30, 0); - BK4819_WriteRegister(BK4819_REG_30, 0 - | BK4819_REG_30_ENABLE_AF_DAC - | BK4819_REG_30_ENABLE_DISC_MODE - | BK4819_REG_30_ENABLE_TX_DSP); + BK4819_WriteRegister(BK4819_REG_30, BK4819_REG_30_ENABLE_AF_DAC | BK4819_REG_30_ENABLE_DISC_MODE | BK4819_REG_30_ENABLE_TX_DSP); BK4819_WriteRegister(BK4819_REG_71, scale_freq(Frequency)); } @@ -507,9 +507,12 @@ void BK4819_TurnsOffTones_TurnsOnRX(void) { BK4819_WriteRegister(BK4819_REG_70, 0); BK4819_SetAF(BK4819_AF_MUTE); + BK4819_ExitTxMute(); + BK4819_WriteRegister(BK4819_REG_30, 0); - BK4819_WriteRegister(BK4819_REG_30, 0 + BK4819_WriteRegister(BK4819_REG_30, + 0 | BK4819_REG_30_ENABLE_VCO_CALIB | BK4819_REG_30_ENABLE_RX_LINK | BK4819_REG_30_ENABLE_AF_DAC @@ -521,20 +524,22 @@ void BK4819_TurnsOffTones_TurnsOnRX(void) #ifndef DISABLE_AIRCOPY void BK4819_SetupAircopy(void) { - BK4819_WriteRegister(BK4819_REG_70, 0x00E0); // Enable Tone2, tuning gain 48 - BK4819_WriteRegister(BK4819_REG_72, 0x3065); // Tone2 baudrate 1200 - BK4819_WriteRegister(BK4819_REG_58, 0x00C1); // FSK Enable, FSK 1.2K RX Bandwidth, Preamble 0xAA or 0x55, RX Gain 0, RX Mode - // (FSK1.2K, FSK2.4K Rx and NOAA SAME Rx), TX Mode FSK 1.2K and FSK 2.4K Tx - BK4819_WriteRegister(BK4819_REG_5C, 0x5665); // Enable CRC among other things we don't know yet - BK4819_WriteRegister(BK4819_REG_5D, 0x4700); // FSK Data Length 72 Bytes (0xabcd + 2 byte length + 64 byte payload + 2 byte CRC + 0xdcba) + BK4819_WriteRegister(BK4819_REG_70, 0x00E0); // Enable Tone2, tuning gain 48 + BK4819_WriteRegister(BK4819_REG_72, 0x3065); // Tone2 baudrate 1200 + BK4819_WriteRegister(BK4819_REG_58, 0x00C1); // FSK Enable, FSK 1.2K RX Bandwidth, Preamble 0xAA or 0x55, RX Gain 0, RX Mode + // (FSK1.2K, FSK2.4K Rx and NOAA SAME Rx), TX Mode FSK 1.2K and FSK 2.4K Tx + BK4819_WriteRegister(BK4819_REG_5C, 0x5665); // Enable CRC among other things we don't know yet + BK4819_WriteRegister(BK4819_REG_5D, 0x4700); // FSK Data Length 72 Bytes (0xabcd + 2 byte length + 64 byte payload + 2 byte CRC + 0xdcba) } #endif void BK4819_ResetFSK(void) { - BK4819_WriteRegister(BK4819_REG_3F, 0x0000); // Disable interrupts - BK4819_WriteRegister(BK4819_REG_59, 0x0068); // Sync length 4 bytes, 7 byte preamble + BK4819_WriteRegister(BK4819_REG_3F, 0x0000); // Disable interrupts + BK4819_WriteRegister(BK4819_REG_59, 0x0068); // Sync length 4 bytes, 7 byte preamble + SYSTEM_DelayMs(30); + BK4819_Idle(); } @@ -583,7 +588,8 @@ void BK4819_EnterDTMF_TX(bool bLocalLoopback) BK4819_EnableDTMF(); BK4819_EnterTxMute(); BK4819_SetAF(bLocalLoopback ? BK4819_AF_BEEP : BK4819_AF_MUTE); - BK4819_WriteRegister(BK4819_REG_70, 0 + BK4819_WriteRegister(BK4819_REG_70, + 0 | BK4819_REG_70_MASK_ENABLE_TONE1 | (83 << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN) | BK4819_REG_70_MASK_ENABLE_TONE2 @@ -605,7 +611,8 @@ void BK4819_ExitDTMF_TX(bool bKeep) void BK4819_EnableTXLink(void) { - BK4819_WriteRegister(BK4819_REG_30, 0 + BK4819_WriteRegister(BK4819_REG_30, + 0 | BK4819_REG_30_ENABLE_VCO_CALIB | BK4819_REG_30_ENABLE_UNKNOWN | BK4819_REG_30_DISABLE_RX_LINK @@ -713,11 +720,16 @@ void BK4819_PlayDTMFString(const char *pString, bool bDelayFirst, uint16_t First void BK4819_TransmitTone(bool bLocalLoopback, uint32_t Frequency) { BK4819_EnterTxMute(); + BK4819_WriteRegister(BK4819_REG_70, 0 | BK4819_REG_70_MASK_ENABLE_TONE1 | (96U << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); BK4819_WriteRegister(BK4819_REG_71, scale_freq(Frequency)); + BK4819_SetAF(bLocalLoopback ? BK4819_AF_BEEP : BK4819_AF_MUTE); + BK4819_EnableTXLink(); + SYSTEM_DelayMs(50); + BK4819_ExitTxMute(); } @@ -897,18 +909,27 @@ void BK4819_PrepareFSKReceive(void) void BK4819_PlayRoger(void) { BK4819_EnterTxMute(); + BK4819_SetAF(BK4819_AF_MUTE); BK4819_WriteRegister(BK4819_REG_70, 0xE000); + BK4819_EnableTXLink(); + SYSTEM_DelayMs(50); + BK4819_WriteRegister(BK4819_REG_71, 0x142A); BK4819_ExitTxMute(); + SYSTEM_DelayMs(80); + BK4819_EnterTxMute(); BK4819_WriteRegister(BK4819_REG_71, 0x1C3B); BK4819_ExitTxMute(); + SYSTEM_DelayMs(80); + BK4819_EnterTxMute(); + BK4819_WriteRegister(BK4819_REG_70, 0x0000); BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); } @@ -966,10 +987,15 @@ void BK4819_PlayDTMFEx(bool bLocalLoopback, char Code) { BK4819_EnableDTMF(); BK4819_EnterTxMute(); + BK4819_SetAF(bLocalLoopback ? BK4819_AF_BEEP : BK4819_AF_MUTE); BK4819_WriteRegister(BK4819_REG_70, 0xD3D3); + BK4819_EnableTXLink(); + SYSTEM_DelayMs(50); + BK4819_PlayDTMF(Code); + BK4819_ExitTxMute(); } diff --git a/driver/eeprom.c b/driver/eeprom.c index 25c2bdb..606e4c6 100644 --- a/driver/eeprom.c +++ b/driver/eeprom.c @@ -37,7 +37,6 @@ void EEPROM_ReadBuffer(uint16_t Address, void *pBuffer, uint8_t Size) } void EEPROM_WriteBuffer(uint16_t Address, const void *pBuffer) - { I2C_Start(); @@ -52,4 +51,3 @@ void EEPROM_WriteBuffer(uint16_t Address, const void *pBuffer) SYSTEM_DelayMs(10); } - diff --git a/driver/st7565.c b/driver/st7565.c index da9685f..4b8ee89 100644 --- a/driver/st7565.c +++ b/driver/st7565.c @@ -15,6 +15,7 @@ */ #include + #include "bsp/dp32g030/gpio.h" #include "bsp/dp32g030/spi.h" #include "driver/gpio.h" @@ -84,7 +85,7 @@ void ST7565_BlitFullScreen(void) #else SYSTEM_DelayMs(1); #endif - + SPI_ToggleMasterMode(&SPI0->CR, true); } @@ -158,9 +159,9 @@ void ST7565_Init(void) SYSTEM_DelayMs(1); ST7565_WriteByte(0x2E); - + SYSTEM_DelayMs(1); - + ST7565_WriteByte(0x2F); ST7565_WriteByte(0x2F); ST7565_WriteByte(0x2F); diff --git a/driver/system.c b/driver/system.c index 989d2fb..abcfb06 100644 --- a/driver/system.c +++ b/driver/system.c @@ -27,9 +27,7 @@ void SYSTEM_DelayMs(uint32_t Delay) void SYSTEM_ConfigureClocks(void) { // Set source clock from external crystal - PMU_SRC_CFG = (PMU_SRC_CFG & ~(PMU_SRC_CFG_RCHF_SEL_MASK | PMU_SRC_CFG_RCHF_EN_MASK)) - | PMU_SRC_CFG_RCHF_SEL_BITS_48MHZ - | PMU_SRC_CFG_RCHF_EN_BITS_ENABLE; + PMU_SRC_CFG = (PMU_SRC_CFG & ~(PMU_SRC_CFG_RCHF_SEL_MASK | PMU_SRC_CFG_RCHF_EN_MASK)) | PMU_SRC_CFG_RCHF_SEL_BITS_48MHZ | PMU_SRC_CFG_RCHF_EN_BITS_ENABLE; // Divide by 2 SYSCON_CLK_SEL = SYSCON_CLK_SEL_DIV_BITS_2; @@ -37,4 +35,3 @@ void SYSTEM_ConfigureClocks(void) // Disable division clock gate SYSCON_DIV_CLK_GATE = (SYSCON_DIV_CLK_GATE & ~SYSCON_DIV_CLK_GATE_DIV_CLK_GATE_MASK) | SYSCON_DIV_CLK_GATE_DIV_CLK_GATE_BITS_DISABLE; } - diff --git a/firmware b/firmware index f626edea66e055962606cef3604442ea2f2a5d29..90c7dfbd9eb4a6ce8df91542f2f428d7a43b5c02 100644 GIT binary patch delta 25764 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 delta 25654 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�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 GLIeOLZ5Ceu delta 48546 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 z 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 diff --git a/font.c b/font.c index 70a1ff6..a68dfd4 100644 --- a/font.c +++ b/font.c @@ -115,20 +115,39 @@ const uint8_t gFontBig[95][16] = {0x10, 0x18, 0x08, 0x18, 0x10, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; -const uint8_t gFontBigDigits[11][26] = -{ - {0x00, 0xC0, 0xF0, 0xF8, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0xF8, 0xF0, 0xE0, 0x00, 0x07, 0x1F, 0x3F, 0x78, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x0F}, - {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x10, 0x38, 0x38, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0xF0, 0x00, 0x00, 0x70, 0x78, 0x7C, 0x7C, 0x6E, 0x66, 0x67, 0x67, 0x63, 0x61, 0x60, 0x00}, - {0x00, 0x10, 0x18, 0x18, 0x9C, 0x8C, 0x8C, 0x8C, 0x8C, 0xCC, 0xF8, 0xF8, 0x70, 0x00, 0x30, 0x30, 0x30, 0x71, 0x61, 0x61, 0x61, 0x61, 0x71, 0x3F, 0x3F, 0x1E}, - {0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x1C, 0x1E, 0x1F, 0x1F, 0x19, 0x18, 0x18, 0x18, 0x7F, 0x7F, 0x7F, 0x18}, - {0x00, 0x00, 0xFC, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x8C, 0x0C, 0x00, 0x00, 0x18, 0x30, 0x70, 0x60, 0x60, 0x60, 0x60, 0x71, 0x7B, 0x3F, 0x1F}, - {0x00, 0xC0, 0xF0, 0xF8, 0x38, 0x9C, 0x8C, 0x8C, 0x8C, 0x8C, 0x9C, 0x38, 0x30, 0x00, 0x0F, 0x1F, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x33, 0x3F, 0x1E}, - {0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x8C, 0xEC, 0xFC, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x40, 0x60, 0x78, 0x7C, 0x1F, 0x07, 0x03, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x78, 0xF8, 0xDC, 0x8C, 0x8C, 0x8C, 0x8C, 0xDC, 0xF8, 0x78, 0x00, 0x00, 0x1E, 0x3F, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x3F, 0x1E}, - {0x00, 0xF0, 0xF8, 0xB8, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0xB8, 0xF0, 0xE0, 0x00, 0x11, 0x33, 0x77, 0x67, 0x66, 0x66, 0x66, 0x76, 0x33, 0x3F, 0x1F, 0x07}, - {0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00} -}; +#if 0 + // original font + const uint8_t gFontBigDigits[11][26] = + { + {0x00, 0xC0, 0xF0, 0xF8, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0xF8, 0xF0, 0xE0, 0x00, 0x07, 0x1F, 0x3F, 0x78, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x10, 0x38, 0x38, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0xF0, 0x00, 0x00, 0x70, 0x78, 0x7C, 0x7C, 0x6E, 0x66, 0x67, 0x67, 0x63, 0x61, 0x60, 0x00}, + {0x00, 0x10, 0x18, 0x18, 0x9C, 0x8C, 0x8C, 0x8C, 0x8C, 0xCC, 0xF8, 0xF8, 0x70, 0x00, 0x30, 0x30, 0x30, 0x71, 0x61, 0x61, 0x61, 0x61, 0x71, 0x3F, 0x3F, 0x1E}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x1C, 0x1E, 0x1F, 0x1F, 0x19, 0x18, 0x18, 0x18, 0x7F, 0x7F, 0x7F, 0x18}, + {0x00, 0x00, 0xFC, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x8C, 0x0C, 0x00, 0x00, 0x18, 0x30, 0x70, 0x60, 0x60, 0x60, 0x60, 0x71, 0x7B, 0x3F, 0x1F}, + {0x00, 0xC0, 0xF0, 0xF8, 0x38, 0x9C, 0x8C, 0x8C, 0x8C, 0x8C, 0x9C, 0x38, 0x30, 0x00, 0x0F, 0x1F, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x33, 0x3F, 0x1E}, + {0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x8C, 0xEC, 0xFC, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x40, 0x60, 0x78, 0x7C, 0x1F, 0x07, 0x03, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x78, 0xF8, 0xDC, 0x8C, 0x8C, 0x8C, 0x8C, 0xDC, 0xF8, 0x78, 0x00, 0x00, 0x1E, 0x3F, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x3F, 0x1E}, + {0x00, 0xF0, 0xF8, 0xB8, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0xB8, 0xF0, 0xE0, 0x00, 0x11, 0x33, 0x77, 0x67, 0x66, 0x66, 0x66, 0x76, 0x33, 0x3F, 0x1F, 0x07}, + {0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00} + }; +#else + // VCR font + const uint8_t gFontBigDigits[11][26] = + { + {0x00, 0x00, 0xF8, 0xFC, 0x06, 0x86, 0xC6, 0xE6, 0xF6, 0x76, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x77, 0x67, 0x63, 0x61, 0x60, 0x70, 0x3F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x18, 0x1C, 0x86, 0x86, 0x86, 0x86, 0x86, 0xC6, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0x63, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x00}, + {0x00, 0x00, 0x18, 0x1C, 0x06, 0x06, 0x86, 0x86, 0x86, 0xC6, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x18, 0x38, 0x70, 0x60, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00}, + {0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x7F, 0x7F, 0x06, 0x06, 0x00}, + {0x00, 0x00, 0x7E, 0x7E, 0x66, 0x66, 0x66, 0x66, 0x66, 0xE6, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x18, 0x38, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00}, + {0x00, 0x00, 0xF8, 0xFC, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x1C, 0x18, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x71, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00}, + {0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x86, 0xC6, 0xE6, 0x7E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x01, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x78, 0xFC, 0xC6, 0x86, 0x86, 0x86, 0x86, 0xC6, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x3F, 0x73, 0x61, 0x61, 0x61, 0x61, 0x73, 0x3F, 0x1E, 0x00}, + {0x00, 0x00, 0x78, 0xFC, 0xC6, 0x86, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x18, 0x38, 0x71, 0x61, 0x61, 0x61, 0x61, 0x71, 0x3F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00} + }; +#endif const uint8_t gFontSmallDigits[11][7] = { diff --git a/helper/boot.c b/helper/boot.c index 311fb7a..5ffbfd0 100644 --- a/helper/boot.c +++ b/helper/boot.c @@ -69,6 +69,7 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) gMenuCursor = MENU_350TX; gSubMenuSelection = gSetting_350TX; GUI_SelectNextDisplay(DISPLAY_MENU); + gF_LOCK = true; gMenuListCount = 57; #ifdef DISABLE_VOICE gMenuListCount--; @@ -76,7 +77,6 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) #ifdef DISABLE_NOAA gMenuListCount--; #endif - gF_LOCK = true; } #ifndef DISABLE_AIRCOPY else @@ -91,23 +91,22 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode) gEeprom.KEY_1_LONG_PRESS_ACTION = 0; gEeprom.KEY_2_SHORT_PRESS_ACTION = 0; gEeprom.KEY_2_LONG_PRESS_ACTION = 0; - + RADIO_InitInfo(gRxVfo, 205, 5, 41002500); - + gRxVfo->CHANNEL_BANDWIDTH = BANDWIDTH_NARROW; gRxVfo->OUTPUT_POWER = 0; - + RADIO_ConfigureSquelchAndOutputPower(gRxVfo); - + gCurrentVfo = gRxVfo; - + RADIO_SetupRegisters(true); BK4819_SetupAircopy(); BK4819_ResetFSK(); - + gAircopyState = AIRCOPY_READY; GUI_SelectNextDisplay(DISPLAY_AIRCOPY); - } #endif else diff --git a/misc.c b/misc.c index 24cb914..8c166d6 100644 --- a/misc.c +++ b/misc.c @@ -18,6 +18,15 @@ #include "misc.h" +const uint8_t g_scan_delay = 21; // 21 + +const uint16_t gMax_bat_v = 840; // 8.4V +const uint16_t gMin_bat_v = 660; // 6.6V + +const uint32_t gDefaultAesKey[4] = {0x4AA5CC60, 0x0312CC5F, 0xFFD2DABB, 0x6BBA7F92}; + +const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31}; + const uint32_t *gUpperLimitFrequencyBandTable; const uint32_t *gLowerLimitFrequencyBandTable; @@ -29,19 +38,6 @@ bool gSetting_350EN; uint8_t gSetting_F_LOCK; bool gSetting_ScrambleEnable; -const uint16_t gMax_bat_v = 840; // 8.4V -const uint16_t gMin_bat_v = 660; // 6.6V - -const uint32_t gDefaultAesKey[4] = -{ - 0x4AA5CC60, - 0x0312CC5F, - 0xFFD2DABB, - 0x6BBA7F92, -}; - -const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31}; - uint32_t gCustomAesKey[4]; bool bHasCustomAesKey; uint32_t gChallenge[4]; diff --git a/misc.h b/misc.h index a753c9c..b513178 100644 --- a/misc.h +++ b/misc.h @@ -30,51 +30,53 @@ #endif enum { - MR_CHANNEL_FIRST = 0U, - MR_CHANNEL_LAST = 199U, - FREQ_CHANNEL_FIRST = 200U, - FREQ_CHANNEL_LAST = 206U, - NOAA_CHANNEL_FIRST = 207U, - NOAA_CHANNEL_LAST = 216U + MR_CHANNEL_FIRST = 0U, + MR_CHANNEL_LAST = 199U, + FREQ_CHANNEL_FIRST = 200U, + FREQ_CHANNEL_LAST = 206U, + NOAA_CHANNEL_FIRST = 207U, + NOAA_CHANNEL_LAST = 216U }; enum { - FLASHLIGHT_OFF = 0U, - FLASHLIGHT_ON = 1U, - FLASHLIGHT_BLINK = 2U + FLASHLIGHT_OFF = 0, + FLASHLIGHT_ON, + FLASHLIGHT_BLINK }; enum { - VFO_CONFIGURE_0 = 0U, - VFO_CONFIGURE_1 = 1U, - VFO_CONFIGURE_RELOAD = 2U + VFO_CONFIGURE_0 = 0, + VFO_CONFIGURE_1, + VFO_CONFIGURE_RELOAD }; enum AlarmState_t { - ALARM_STATE_OFF = 0U, - ALARM_STATE_TXALARM = 1U, - ALARM_STATE_ALARM = 2U, - ALARM_STATE_TX1750 = 3U + ALARM_STATE_OFF = 0, + ALARM_STATE_TXALARM, + ALARM_STATE_ALARM, + ALARM_STATE_TX1750 }; typedef enum AlarmState_t AlarmState_t; enum ReceptionMode_t { - RX_MODE_NONE = 0U, - RX_MODE_DETECTED = 1U, - RX_MODE_LISTENING = 2U + RX_MODE_NONE = 0, + RX_MODE_DETECTED, + RX_MODE_LISTENING }; typedef enum ReceptionMode_t ReceptionMode_t; enum CssScanMode_t { - CSS_SCAN_MODE_OFF = 0U, - CSS_SCAN_MODE_SCANNING = 1U, - CSS_SCAN_MODE_FOUND = 2U, + CSS_SCAN_MODE_OFF = 0, + CSS_SCAN_MODE_SCANNING, + CSS_SCAN_MODE_FOUND, }; typedef enum CssScanMode_t CssScanMode_t; +extern const uint8_t g_scan_delay; + extern const uint16_t gMax_bat_v; extern const uint16_t gMin_bat_v; diff --git a/radio.c b/radio.c index 5bdb0b8..fb64565 100644 --- a/radio.c +++ b/radio.c @@ -744,6 +744,11 @@ void RADIO_SetTxParameters(void) switch (gCurrentVfo->pTX->CodeType) { + default: + case CODE_TYPE_OFF: + BK4819_ExitSubAu(); + break; + case CODE_TYPE_CONTINUOUS_TONE: BK4819_SetCTCSSFrequency(CTCSS_Options[gCurrentVfo->pTX->Code]); break; @@ -754,10 +759,6 @@ void RADIO_SetTxParameters(void) DCS_GetGolayCodeWord(gCurrentVfo->pTX->CodeType, gCurrentVfo->pTX->Code) ); break; - - default: - BK4819_ExitSubAu(); - break; } } diff --git a/ui/main.c b/ui/main.c index 9fc29cb..32a3f71 100644 --- a/ui/main.c +++ b/ui/main.c @@ -59,7 +59,8 @@ void UI_DisplayMain(void) uint32_t frequency_Hz = 0; if (single_vfo) - { + { // we're in single VFO mode + if (!bIsSameVfo) continue; // skip the unused vfo .. screen is dedicated to just a single VFO @@ -74,7 +75,8 @@ void UI_DisplayMain(void) if (Channel != vfo_num) { if (gDTMF_CallState != DTMF_CALL_STATE_NONE || gDTMF_IsTx || gDTMF_InputMode) - { + { // show DTMF stuff + char Contact[16]; if (!gDTMF_InputMode) @@ -98,14 +100,10 @@ void UI_DisplayMain(void) { memset(Contact, 0, sizeof(Contact)); if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT) - { sprintf(String, ">%s", (DTMF_FindContact(gDTMF_String, Contact)) ? Contact : gDTMF_String); - } else if (gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) - { sprintf(String, ">%s", (DTMF_FindContact(gDTMF_Callee, Contact)) ? Contact : gDTMF_Callee); - } else if (gDTMF_IsTx) sprintf(String, ">%s", gDTMF_String); @@ -128,11 +126,11 @@ void UI_DisplayMain(void) //memcpy(pLine0 + 2, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); } - // 0x8EE2 uint32_t SomeValue = 0; if (gCurrentFunction == FUNCTION_TRANSMIT) - { + { // transmitting + #ifndef DISABLE_ALARM if (gAlarmState == ALARM_STATE_ALARM) { @@ -157,8 +155,12 @@ void UI_DisplayMain(void) } if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { // show the mrmory channel number + { // channel mode + + // show the memory symbol memcpy(pLine1 + 2, BITMAP_M, sizeof(BITMAP_M)); + + // show the memory channel number if (gInputBoxIndex == 0 || gEeprom.TX_CHANNEL != vfo_num) NUMBER_ToDigits(gEeprom.ScreenChannel[vfo_num] + 1, String); else @@ -167,7 +169,8 @@ void UI_DisplayMain(void) } else if (IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { // show the frequency band number + { + // show the frequency band number char c; memcpy(pLine1 + 14, BITMAP_F, sizeof(BITMAP_F)); c = (gEeprom.ScreenChannel[vfo_num] - FREQ_CHANNEL_FIRST) + 1; @@ -190,8 +193,6 @@ void UI_DisplayMain(void) UI_DisplaySmallDigits(2, String + 6, 15, Line + 1); } - // 0x8FEC - uint8_t State = VfoState[vfo_num]; #ifndef DISABLE_ALARM @@ -213,7 +214,7 @@ void UI_DisplayMain(void) { case VFO_STATE_BUSY: strcpy(String, "BUSY"); - Width = 15; + //Width = 15; break; case VFO_STATE_BAT_LOW: strcpy(String, "BAT LOW"); @@ -237,14 +238,16 @@ void UI_DisplayMain(void) } else { // normal state + if (gInputBoxIndex && IS_FREQ_CHANNEL(gEeprom.ScreenChannel[vfo_num]) && gEeprom.TX_CHANNEL == vfo_num) - { + { // user is entering a new frequency UI_DisplayFrequency(gInputBox, 31, vfo_num * 4, true, false); } else { if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { + { // channel mode# + frequency_Hz = gEeprom.VfoInfo[vfo_num].pRX->Frequency; if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting @@ -253,24 +256,28 @@ void UI_DisplayMain(void) frequency_Hz = gEeprom.VfoInfo[vfo_num].pTX->Frequency; } + { // show the scanlist symbols + const uint8_t Attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; + if (Attributes & MR_CH_SCANLIST1) + memcpy(pLine0 + 113, BITMAP_ScanList, sizeof(BITMAP_ScanList)); + if (Attributes & MR_CH_SCANLIST2) + memcpy(pLine0 + 120, BITMAP_ScanList, sizeof(BITMAP_ScanList)); + } + switch (gEeprom.CHANNEL_DISPLAY_MODE) { case MDF_FREQUENCY: // show the channel frequency - NUMBER_ToDigits(frequency_Hz, String); - - // show the first lot of the frequency digits - UI_DisplayFrequency(String, 31, vfo_num * 4, false, false); - // show the remaining 2 frequency digits - UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); - - if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { - const uint8_t Attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; - if (Attributes & MR_CH_SCANLIST1) - memcpy(pLine0 + 113, BITMAP_ScanList, sizeof(BITMAP_ScanList)); - if (Attributes & MR_CH_SCANLIST2) - memcpy(pLine0 + 120, BITMAP_ScanList, sizeof(BITMAP_ScanList)); - } + #ifdef BIG_FREQ_FONT + NUMBER_ToDigits(frequency_Hz, String); + // show the main large frequency digits + UI_DisplayFrequency(String, 31, vfo_num * 4, false, false); + // show the remaining 2 small frequency digits + UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); + #else + // show the frequency in the main font + sprintf(String, "%9.5f", frequency_Hz * 0.00001); + UI_PrintString(String, 31, 112, vfo_num * 4, 8, true); + #endif frequency_Hz = 0; break; @@ -283,7 +290,7 @@ void UI_DisplayMain(void) case MDF_NAME: // show the channel name if (gEeprom.VfoInfo[vfo_num].Name[0] == 0 || gEeprom.VfoInfo[vfo_num].Name[0] == 0xFF) - { // channel number + { // no channel name, show the channel number instead sprintf(String, "CH-%03d", gEeprom.ScreenChannel[vfo_num] + 1); UI_PrintString(String, 31, 112, vfo_num * 4, 8, true); } @@ -297,22 +304,23 @@ void UI_DisplayMain(void) #ifdef 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) - { // channel number + { // no channel name, show channel number instead sprintf(String, "CH-%03d", gEeprom.ScreenChannel[vfo_num] + 1); - UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 16, 0, (vfo_num * 4) + 0, false); + UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, (vfo_num * 4) + 0, false); } else { // channel name memset(String, 0, sizeof(String)); memcpy(String, gEeprom.VfoInfo[vfo_num].Name, 8); - UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 16, 0, (vfo_num * 4) + 0, false); + UI_PrintStringSmall(gEeprom.VfoInfo[vfo_num].Name, 31 + 8, 0, (vfo_num * 4) + 0, false); } break; #endif } } else - { + { // frequency mode + frequency_Hz = gEeprom.VfoInfo[vfo_num].pRX->Frequency; if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting @@ -321,21 +329,17 @@ void UI_DisplayMain(void) frequency_Hz = gEeprom.VfoInfo[vfo_num].pTX->Frequency; } - NUMBER_ToDigits(frequency_Hz, String); // 8 digits - - // show main part of frequency - UI_DisplayFrequency(String, 31, vfo_num * 4, false, false); - // show the remaing 2 small frequency digits - UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); - - if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) - { - const uint8_t Attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; - if (Attributes & MR_CH_SCANLIST1) - memcpy(pLine0 + 113, BITMAP_ScanList, sizeof(BITMAP_ScanList)); - if (Attributes & MR_CH_SCANLIST2) - memcpy(pLine0 + 120, BITMAP_ScanList, sizeof(BITMAP_ScanList)); - } + #ifdef BIG_FREQ_FONT + NUMBER_ToDigits(frequency_Hz, String); // 8 digits + // show the main large frequency digits + UI_DisplayFrequency(String, 31, vfo_num * 4, false, false); + // show the remaining 2 small frequency digits + UI_DisplaySmallDigits(2, String + 6, 112, Line + 1); + #else + // show the frequency in the main font + sprintf(String, "%9.5f", frequency_Hz * 0.00001); + UI_PrintString(String, 31, 112, vfo_num * 4, 8, true); + #endif frequency_Hz = 0; } @@ -407,7 +411,7 @@ void UI_DisplayMain(void) } switch (gEeprom.VfoInfo[vfo_num].OUTPUT_POWER) - { // show the TX power symbol + { // show the TX power level symbol case OUTPUT_POWER_LOW: memcpy(pLine1 + 128 + 44, BITMAP_PowerLow, sizeof(BITMAP_PowerLow)); break; @@ -446,12 +450,12 @@ void UI_DisplayMain(void) #ifdef CHAN_NAME_FREQ if (frequency_Hz > 0) { // show the channel frequency below the channel number/name - #if 0 + #if 1 NUMBER_ToDigits(frequency_Hz, String); // 8 digits UI_DisplayFrequencySmall(String, 31 + 8, (vfo_num * 4) + 1, false); #else sprintf(String, "%9.5f", frequency_Hz * 0.00001); - UI_PrintStringSmall(String, 31 + 16, 0, (vfo_num * 4) + 1, false); + UI_PrintStringSmall(String, 31 + 8, 0, (vfo_num * 4) + 1, false); #endif } #endif diff --git a/version.c b/version.c index 0896fbe..4758ee4 100644 --- a/version.c +++ b/version.c @@ -2,5 +2,5 @@ #ifdef GIT_HASH const char Version[] = "OEFW-" GIT_HASH; #else - const char Version[] = "OEFW-230910"; + const char Version[] = "OEFW-230911"; #endif diff --git a/win_make.bat b/win_make.bat index 5450646..328bae9 100644 --- a/win_make.bat +++ b/win_make.bat @@ -13,7 +13,7 @@ del /S /Q *.o >nul 2>nul del /S /Q *.d >nul 2>nul ::python -m pip install --upgrade pip crcmod -fw-pack.py firmware.bin 230910 firmware.packed.bin +fw-pack.py firmware.bin 230911 firmware.packed.bin ::arm-none-eabi-size firmware