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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 JT)$I^`9Fp=MeqOs delta 25654 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 diff --git a/firmware.bin b/firmware.bin index f12cab48906d2f4a5a94aa879411301cf18aaf4e..d38606c63a4199fb5ae4ca1a64cdded06934ebb4 100644 GIT binary patch delta 10340 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 H7%lrBLNG0U delta 10306 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 W`@d;<%sI)Jq9DP&NRW{9Q~W<9Z5Ceu delta 48546 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 rD#3jL!HO9XCHANNEL_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