From caac8ee1c140db8223a5bf7f5b27f8700227931f Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sun, 10 Sep 2023 21:20:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=B8=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=80=D0=B0=D0=B4=D0=B8=D0=BE=20=D0=B8=20=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=D1=80=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 - app/app.c | 85 +++------------ app/fm.c | 252 ------------------------------------------- app/fm.h | 59 ---------- app/uart.c | 9 +- audio.c | 18 +--- board.c | 7 +- driver/bk1080-regs.h | 57 ---------- driver/bk1080.c | 115 -------------------- driver/bk1080.h | 35 ------ firmware.packed.bin | Bin 55498 -> 52938 bytes functions.c | 14 +-- radio.c | 5 +- scheduler.c | 8 +- settings.c | 24 +---- ui/fmradio.c | 90 ---------------- ui/fmradio.h | 23 ---- ui/status.c | 6 +- ui/ui.c | 4 - 19 files changed, 34 insertions(+), 780 deletions(-) delete mode 100644 app/fm.c delete mode 100644 app/fm.h delete mode 100644 driver/bk1080-regs.h delete mode 100644 driver/bk1080.c delete mode 100644 driver/bk1080.h delete mode 100644 ui/fmradio.c delete mode 100644 ui/fmradio.h diff --git a/Makefile b/Makefile index b8cc111..8fff338 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,6 @@ OBJS += external/printf/printf.o OBJS += driver/adc.o OBJS += driver/aes.o OBJS += driver/backlight.o -OBJS += driver/bk1080.o OBJS += driver/bk4819.o OBJS += driver/crc.o OBJS += driver/eeprom.o @@ -33,7 +32,6 @@ OBJS += driver/uart.o OBJS += app/action.o OBJS += app/app.o OBJS += app/dtmf.o -OBJS += app/fm.o OBJS += app/generic.o OBJS += app/main.o OBJS += app/menu.o @@ -53,7 +51,6 @@ OBJS += radio.o OBJS += scheduler.o OBJS += settings.o OBJS += ui/battery.o -OBJS += ui/fmradio.o OBJS += ui/helper.o OBJS += ui/inputbox.o OBJS += ui/lock.o diff --git a/app/app.c b/app/app.c index 14c3448..638fe11 100644 --- a/app/app.c +++ b/app/app.c @@ -21,7 +21,6 @@ #include "ARMCM0.h" #include "app/action.h" #include "app/dtmf.h" -#include "app/fm.h" #include "app/generic.h" #include "app/main.h" #include "app/menu.h" @@ -31,7 +30,6 @@ #include "board.h" #include "bsp/dp32g030/gpio.h" #include "driver/backlight.h" -#include "driver/bk1080.h" #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/keyboard.h" @@ -279,9 +277,7 @@ static void APP_HandleFunction(void) { } void APP_StartListening(FUNCTION_Type_t Function) { - if (gFmRadioMode) { - BK1080_Init(0, false); - } + gVFO_RSSI_Level[gEeprom.RX_CHANNEL == 0] = 0; GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); gEnableSpeaker = true; @@ -328,7 +324,7 @@ void APP_StartListening(FUNCTION_Type_t Function) { } } FUNCTION_Select(Function); - if (Function == FUNCTION_MONITOR || gFmRadioMode) { + if (Function == FUNCTION_MONITOR) { GUI_SelectNextDisplay(DISPLAY_MAIN); return; } @@ -387,7 +383,7 @@ static void MR_NextChannel(void) { if (gCurrentScanList == 2) { gNextMrChannel = gPreviousMrChannel; } else { - goto Skip; + goto Skip; //ебать бы вас в задницу } } @@ -513,7 +509,7 @@ static void APP_HandleVox(void) { } if (gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gScanState == SCAN_OFF && - gCssScanMode == CSS_SCAN_MODE_OFF && !gFmRadioMode) { + gCssScanMode == CSS_SCAN_MODE_OFF) { if (gVOX_NoiseDetected) { if (g_VOX_Lost) { gVoxStopCountdown = 100; @@ -572,9 +568,7 @@ void APP_Update(void) { if (gCurrentFunction != FUNCTION_TRANSMIT) { APP_HandleFunction(); } - if (gFmRadioCountdown) { - return; - } + if (gScreenToDisplay != DISPLAY_SCANNER && gScanState != SCAN_OFF && gScheduleScanListen && !gPttIsPressed && gVoiceWriteIndex == 0) { @@ -607,7 +601,7 @@ void APP_Update(void) { gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) { if (gScheduleDualWatch && gVoiceWriteIndex == 0) { if (gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) { - if (!gPttIsPressed && !gFmRadioMode && + if (!gPttIsPressed && gDTMF_CallState == DTMF_CALL_STATE_NONE && gCurrentFunction != FUNCTION_POWER_SAVE) { DUALWATCH_Alternate(); @@ -623,13 +617,7 @@ void APP_Update(void) { } } - if (gFM_ScanState != FM_SCAN_OFF && gScheduleFM && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_TRANSMIT) { - FM_Play(); - gScheduleFM = false; - } + if (gEeprom.VOX_SWITCH) { APP_HandleVox(); @@ -637,7 +625,7 @@ void APP_Update(void) { if (gSchedulePowerSave) { if (gEeprom.BATTERY_SAVE == 0 || gScanState != SCAN_OFF || - gCssScanMode != CSS_SCAN_MODE_OFF || gFmRadioMode || + gCssScanMode != CSS_SCAN_MODE_OFF || gPttIsPressed || gScreenToDisplay != DISPLAY_MAIN || gKeyBeingHeld || gDTMF_CallState != DTMF_CALL_STATE_NONE) { gBatterySaveCountdown = 1000; @@ -779,9 +767,7 @@ void APP_TimeSlice10ms(void) { // Skipping authentic device checks - if (gFmRadioCountdown) { - return; - } + if (gFlashLightState == FLASHLIGHT_BLINK && (gFlashLightBlinkCounter & 15U) == 0) { @@ -839,13 +825,7 @@ void APP_TimeSlice10ms(void) { } } } - if (gFmRadioMode && gFM_RestoreCountdown) { - gFM_RestoreCountdown--; - if (gFM_RestoreCountdown == 0) { - FM_Start(); - GUI_SelectNextDisplay(DISPLAY_FM); - } - } + if (gScreenToDisplay == DISPLAY_SCANNER) { uint32_t Result; int32_t Delta; @@ -954,12 +934,7 @@ void APP_TimeSlice500ms(void) { } } - // Skipped authentic device check - if (gFmRadioCountdown) { - gFmRadioCountdown--; - return; - } if (gReducedService) { BOARD_ADC_GetBatteryInfo(&gBatteryCurrentVoltage, &gBatteryCurrent); if (gBatteryCurrent > 500 || @@ -987,7 +962,7 @@ void APP_TimeSlice500ms(void) { gCurrentRSSI = BK4819_GetRSSI(); UI_UpdateRSSI(gCurrentRSSI); } - if ((gFM_ScanState == FM_SCAN_OFF || gAskToSave) && + if (/*(gFM_ScanState == FM_SCAN_OFF || gAskToSave) &&*/ gScanState == SCAN_OFF && gCssScanMode == CSS_SCAN_MODE_OFF) { if (gBacklightCountdown) { gBacklightCountdown--; @@ -1026,32 +1001,15 @@ void APP_TimeSlice500ms(void) { gDTMF_InputIndex = 0; gAskToSave = false; gAskToDelete = false; - if (gFmRadioMode && - gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_MONITOR && - gCurrentFunction != FUNCTION_TRANSMIT) { - GUI_SelectNextDisplay(DISPLAY_FM); - } else { - GUI_SelectNextDisplay(DISPLAY_MAIN); - } + GUI_SelectNextDisplay(DISPLAY_MAIN); + } } } } } - if (!gPttIsPressed && gFM_ResumeCountdown) { - gFM_ResumeCountdown--; - if (gFM_ResumeCountdown == 0) { - RADIO_SetVfoState(VFO_STATE_NORMAL); - if (gCurrentFunction != FUNCTION_RECEIVE && - gCurrentFunction != FUNCTION_TRANSMIT && - gCurrentFunction != FUNCTION_MONITOR && gFmRadioMode) { - FM_Start(); - GUI_SelectNextDisplay(DISPLAY_FM); - } - } - } + if (gLowBattery) { gLowBatteryBlink = ++gLowBatteryCountdown & 1; @@ -1186,10 +1144,6 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { SETTINGS_SaveSettings(); gFlagSaveSettings = false; } - if (gFlagSaveFM) { - SETTINGS_SaveFM(); - gFlagSaveFM = false; - } if (gFlagSaveChannel) { SETTINGS_SaveChannel(gTxVfo->CHANNEL_SAVE, gEeprom.TX_CHANNEL, gTxVfo, gFlagSaveChannel); @@ -1357,7 +1311,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { MAIN_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; case DISPLAY_FM: - FM_ProcessKeys(Key, bKeyPressed, bKeyHeld); + // FM_ProcessKeys(Key, bKeyPressed, bKeyHeld); break; case DISPLAY_MENU: MENU_ProcessKeys(Key, bKeyPressed, bKeyHeld); @@ -1399,14 +1353,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { gRequestSaveSettings = false; gUpdateStatus = true; } - if (gRequestSaveFM) { - if (!bKeyHeld) { - SETTINGS_SaveFM(); - } else { - gFlagSaveFM = true; - } - gRequestSaveFM = false; - } + if (gRequestSaveVFO) { if (!bKeyHeld) { SETTINGS_SaveVfoIndices(); diff --git a/app/fm.c b/app/fm.c deleted file mode 100644 index c6e24b0..0000000 --- a/app/fm.c +++ /dev/null @@ -1,252 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include "app/action.h" -#include "app/fm.h" -#include "app/generic.h" -#include "audio.h" -#include "bsp/dp32g030/gpio.h" -#include "driver/bk1080.h" -#include "driver/eeprom.h" -#include "driver/gpio.h" -#include "functions.h" -#include "misc.h" -#include "settings.h" -#include "ui/inputbox.h" -#include "ui/ui.h" - -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; - -bool FM_CheckValidChannel(uint8_t Channel) -{ - if (Channel < 20 && (gFM_Channels[Channel] >= 760 && gFM_Channels[Channel] < 1080)) { - return true; - } - - return false; -} - -uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) -{ - uint8_t i; - - for (i = 0; i < 20; i++) { - Channel %= 20; - if (FM_CheckValidChannel(Channel)) { - return Channel; - } - Channel += Direction; - } - - return 0xFF; -} - -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) { - gEeprom.FM_IsMrMode = false; - return -1; - } - gEeprom.FM_SelectedChannel = Channel; - gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; - } - - return 0; -} - -void FM_TurnOff(void) -{ - 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; -} - -void FM_EraseChannels(void) -{ - uint8_t i; - uint8_t Template[8]; - - memset(Template, 0xFF, sizeof(Template)); - for (i = 0; i < 5; i++) { - EEPROM_WriteBuffer(0x0E40 + (i * 8), Template); - } - - memset(gFM_Channels, 0xFF, sizeof(gFM_Channels)); -} - -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; - gEeprom.FM_FrequencyPlaying = Frequency; - if (!bFlag) { - Frequency += Step; - if (Frequency < gEeprom.FM_LowerLimit) { - 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; - gEeprom.FM_SelectedChannel = 0; - } - FM_ConfigureChannelState(); - BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying); - SETTINGS_SaveFM(); - gFmPlayCountdown = 0; - gScheduleFM = false; - gAskToSave = false; - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); - 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); - // This is supposed to be a signed value, but above function is unsigned - 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 (Deviation > -281 && Deviation < 280) - if (Deviation < 280 || Deviation > 3815) { - // not BLE(less than or equal) - if (Frequency > LowerLimit && (Frequency - BK1080_BaseFrequency) == 1) { - if (BK1080_FrequencyDeviation & 0x800) { - goto Bail; - } - if (BK1080_FrequencyDeviation < 20) { - goto Bail; - } - } - // not BLT(less than) - if (Frequency >= LowerLimit && (BK1080_BaseFrequency - Frequency) == 1) { - if ((BK1080_FrequencyDeviation & 0x800) == 0) { - goto Bail; - } - // if (BK1080_FrequencyDeviation > -21) { - if (BK1080_FrequencyDeviation > 4075) { - goto Bail; - } - } - ret = 0; - } - } - } - -Bail: - BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; - - return ret; -} - - -void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) -{ - -} - -void FM_Play(void) -{ - if (!FM_CheckFrequencyLock(gEeprom.FM_FrequencyPlaying, gEeprom.FM_LowerLimit)) { - if (!gFM_AutoScan) { - gFmPlayCountdown = 0; - gFM_FoundFrequency = true; - 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) { - gFM_Channels[gFM_ChannelPosition++] = gEeprom.FM_FrequencyPlaying; - } - if (gFM_ChannelPosition >= 20) { - FM_PlayAndUpdate(); - GUI_SelectNextDisplay(DISPLAY_FM); - return; - } - } - - if (gFM_AutoScan && gEeprom.FM_FrequencyPlaying >= gEeprom.FM_UpperLimit) { - FM_PlayAndUpdate(); - } else { - FM_Tune(gEeprom.FM_FrequencyPlaying, gFM_ScanState, false); - } - - GUI_SelectNextDisplay(DISPLAY_FM); -} - -void FM_Start(void) -{ - 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; -} - diff --git a/app/fm.h b/app/fm.h deleted file mode 100644 index 1c0b9e8..0000000 --- a/app/fm.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef APP_FM_H -#define APP_FM_H - -#include "driver/keyboard.h" - -#define FM_CHANNEL_UP 0x01 -#define FM_CHANNEL_DOWN 0xFF - -enum { - FM_SCAN_OFF = 0U, -}; - -extern uint16_t gFM_Channels[20]; -extern bool gFmRadioMode; -extern uint8_t gFmRadioCountdown; -extern volatile uint16_t gFmPlayCountdown; -extern volatile int8_t gFM_ScanState; -extern bool gFM_AutoScan; -extern uint8_t gFM_ChannelPosition; -// Doubts about whether this should be signed or not. -extern uint16_t gFM_FrequencyDeviation; -extern bool gFM_FoundFrequency; -extern bool gFM_AutoScan; -extern uint8_t gFM_ResumeCountdown; -extern uint16_t gFM_RestoreCountdown; - -bool FM_CheckValidChannel(uint8_t Channel); -uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction); -int FM_ConfigureChannelState(void); -void FM_TurnOff(void); -void FM_EraseChannels(void); - -void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag); -void FM_PlayAndUpdate(void); -int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit); - -void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld); - -void FM_Play(void); -void FM_Start(void); - -#endif - diff --git a/app/uart.c b/app/uart.c index 705ca02..6ffaac0 100644 --- a/app/uart.c +++ b/app/uart.c @@ -15,7 +15,6 @@ */ #include -#include "app/fm.h" #include "app/uart.h" #include "board.h" #include "bsp/dp32g030/dma.h" @@ -214,7 +213,7 @@ static void CMD_0514(const uint8_t *pBuffer) const CMD_0514_t *pCmd = (const CMD_0514_t *)pBuffer; Timestamp = pCmd->Timestamp; - gFmRadioCountdown = 4; + //gFmRadioCountdown = 4; GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); SendVersion(); } @@ -229,7 +228,7 @@ static void CMD_051B(const uint8_t *pBuffer) return; } - gFmRadioCountdown = 4; + //gFmRadioCountdown = 4; memset(&Reply, 0, sizeof(Reply)); Reply.Header.ID = 0x051C; Reply.Header.Size = pCmd->Size + 4; @@ -260,7 +259,7 @@ static void CMD_051D(const uint8_t *pBuffer) bReloadEeprom = false; - gFmRadioCountdown = 4; + //gFmRadioCountdown = 4; Reply.Header.ID = 0x051E; Reply.Header.Size = sizeof(Reply.Data); Reply.Data.Offset = pCmd->Offset; @@ -325,7 +324,7 @@ static void CMD_052D(const uint8_t *pBuffer) REPLY_052D_t Reply; bool bIsLocked; - gFmRadioCountdown = 4; + //gFmRadioCountdown = 4; Reply.Header.ID = 0x052E; Reply.Header.Size = sizeof(Reply.Data); diff --git a/audio.c b/audio.c index c0c7404..cc36b2c 100644 --- a/audio.c +++ b/audio.c @@ -14,10 +14,9 @@ * limitations under the License. */ -#include "app/fm.h" + #include "audio.h" #include "bsp/dp32g030/gpio.h" -#include "driver/bk1080.h" #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/system.h" @@ -84,9 +83,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) BK4819_RX_TurnOn(); } - if (gFmRadioMode) { - BK1080_Mute(true); - } SYSTEM_DelayMs(20); switch (Beep) { case BEEP_1KHZ_60MS_OPTIONAL: @@ -138,9 +134,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep) if (gEnableSpeaker) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); } - if (gFmRadioMode) { - BK1080_Mute(false); - } if (gCurrentFunction == FUNCTION_POWER_SAVE && gRxIdleMode) { BK4819_Sleep(); } @@ -193,9 +186,6 @@ void AUDIO_PlaySingleVoice(bool bFlag) if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR) { BK4819_SetAF(BK4819_AF_MUTE); } - if (gFmRadioMode) { - BK1080_Mute(true); - } GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); gVoxResumeCountdown = 2000; SYSTEM_DelayMs(5); @@ -212,9 +202,6 @@ void AUDIO_PlaySingleVoice(bool bFlag) BK4819_SetAF(BK4819_AF_OPEN); } } - if (gFmRadioMode) { - BK1080_Mute(false); - } if (!gEnableSpeaker) { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); } @@ -327,9 +314,6 @@ void AUDIO_PlayQueuedVoice(void) BK4819_SetAF(BK4819_AF_OPEN); } } - if (gFmRadioMode) { - BK1080_Mute(false); - } if (!gEnableSpeaker) { GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH); } diff --git a/board.c b/board.c index 622c191..a43a07b 100644 --- a/board.c +++ b/board.c @@ -17,14 +17,12 @@ #include #include "app/dtmf.h" -#include "app/fm.h" #include "board.h" #include "bsp/dp32g030/gpio.h" #include "bsp/dp32g030/portcon.h" #include "bsp/dp32g030/saradc.h" #include "bsp/dp32g030/syscon.h" #include "driver/adc.h" -#include "driver/bk1080.h" #include "driver/bk4819.h" #include "driver/crc.h" #include "driver/eeprom.h" @@ -335,7 +333,6 @@ void BOARD_Init(void) BOARD_GPIO_Init(); BOARD_ADC_Init(); ST7565_Init(); - BK1080_Init(0, false); CRC_Init(); } @@ -396,8 +393,8 @@ void BOARD_EEPROM_Init(void) gEeprom.FM_IsMrMode = (FM.IsMrMode < 2) ? FM.IsMrMode : false; // 0E40..0E67 - EEPROM_ReadBuffer(0x0E40, gFM_Channels, sizeof(gFM_Channels)); - FM_ConfigureChannelState(); + //EEPROM_ReadBuffer(0x0E40, gFM_Channels, sizeof(gFM_Channels)); + //FM_ConfigureChannelState(); // 0E90..0E97 EEPROM_ReadBuffer(0x0E90, Data, 8); diff --git a/driver/bk1080-regs.h b/driver/bk1080-regs.h deleted file mode 100644 index 49dfdfc..0000000 --- a/driver/bk1080-regs.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef BK1080_REGS_H -#define BK1080_REGS_H - -enum BK1080_Register_t { - BK1080_REG_00 = 0x00U, - BK1080_REG_02_POWER_CONFIGURATION = 0x02U, - BK1080_REG_03_CHANNEL = 0x03U, - BK1080_REG_05_SYSTEM_CONFIGURATION2 = 0x05U, - BK1080_REG_07 = 0x07U, - BK1080_REG_10 = 0x0AU, - BK1080_REG_25_INTERNAL = 0x19U, -}; - -typedef enum BK1080_Register_t BK1080_Register_t; - -// REG 07 - -#define BK1080_REG_07_SHIFT_FREQD 4 -#define BK1080_REG_07_SHIFT_SNR 0 - -#define BK1080_REG_07_MASK_FREQD (0xFFFU << BK1080_REG_07_SHIFT_FREQD) -#define BK1080_REG_07_MASK_SNR (0x00FU << BK1080_REG_07_SHIFT_SNR) - -#define BK1080_REG_07_GET_FREQD(x) (((x) & BK1080_REG_07_MASK_FREQD) >> BK1080_REG_07_SHIFT_FREQD) -#define BK1080_REG_07_GET_SNR(x) (((x) & BK1080_REG_07_MASK_SNR) >> BK1080_REG_07_SHIFT_SNR) - -// REG 10 - -#define BK1080_REG_10_SHIFT_AFCRL 12 -#define BK1080_REG_10_SHIFT_RSSI 0 - -#define BK1080_REG_10_MASK_AFCRL (0x01U << BK1080_REG_10_SHIFT_AFCRL) -#define BK1080_REG_10_MASK_RSSI (0xFFU << BK1080_REG_10_SHIFT_RSSI) - -#define BK1080_REG_10_AFCRL_NOT_RAILED (0U << BK1080_REG_10_SHIFT_AFCRL) -#define BK1080_REG_10_AFCRL_RAILED (1U << BK1080_REG_10_SHIFT_AFCRL) - -#define BK1080_REG_10_GET_RSSI(x) (((x) & BK1080_REG_10_MASK_RSSI) >> BK1080_REG_10_SHIFT_RSSI) - -#endif - diff --git a/driver/bk1080.c b/driver/bk1080.c deleted file mode 100644 index 7c9d6bb..0000000 --- a/driver/bk1080.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "bsp/dp32g030/gpio.h" -#include "bk1080.h" -#include "driver/gpio.h" -#include "driver/i2c.h" -#include "driver/system.h" -#include "misc.h" - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) - -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, -}; - -static bool gIsInitBK1080; - -uint16_t BK1080_BaseFrequency; -uint16_t BK1080_FrequencyDeviation; - -void BK1080_Init(uint16_t Frequency, bool bDoScan) -{ - uint8_t i; - - if (bDoScan) { - GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BK1080); - - 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 { - 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 { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0241); - GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080); - } -} - -uint16_t BK1080_ReadRegister(BK1080_Register_t Register) -{ - uint8_t Value[2]; - - I2C_Start(); - I2C_Write(0x80); - I2C_Write((Register << 1) | I2C_READ); - I2C_ReadBuffer(Value, sizeof(Value)); - I2C_Stop(); - return (Value[0] << 8) | Value[1]; -} - -void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value) -{ - I2C_Start(); - I2C_Write(0x80); - I2C_Write((Register << 1) | I2C_WRITE); - Value = ((Value >> 8) & 0xFF) | ((Value & 0xFF) << 8); - I2C_WriteBuffer(&Value, sizeof(Value)); - I2C_Stop(); -} - -void BK1080_Mute(bool Mute) -{ - if (Mute) { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x4201); - } else { - BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0201); - } -} - -void BK1080_SetFrequency(uint16_t Frequency) -{ - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760); - SYSTEM_DelayMs(10); - BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | 0x8000); -} - -void BK1080_GetFrequencyDeviation(uint16_t Frequency) -{ - BK1080_BaseFrequency = Frequency; - BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) / 16; -} - diff --git a/driver/bk1080.h b/driver/bk1080.h deleted file mode 100644 index ed1f9c1..0000000 --- a/driver/bk1080.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef DRIVER_BK1080_H -#define DRIVER_BK1080_H - -#include -#include -#include "driver/bk1080-regs.h" - -extern uint16_t BK1080_BaseFrequency; -extern uint16_t BK1080_FrequencyDeviation; - -void BK1080_Init(uint16_t Frequency, bool bDoScan); -uint16_t BK1080_ReadRegister(BK1080_Register_t Register); -void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value); -void BK1080_Mute(bool Mute); -void BK1080_SetFrequency(uint16_t Frequency); -void BK1080_GetFrequencyDeviation(uint16_t Frequency); - -#endif - diff --git a/firmware.packed.bin b/firmware.packed.bin index 30b72948d3d85a01c3eebeae760093404962883a..ffa14f5c9cb16beaaccb6b2c5fedafb27c8de5cb 100644 GIT binary patch delta 47337 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 Y@|X3GRjd8y)luHfRZ~y`e21F<16vDJ9RL6T delta 49918 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 z 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 #include "app/dtmf.h" -#include "app/fm.h" #include "bsp/dp32g030/gpio.h" #include "dcs.h" -#include "driver/bk1080.h" #include "driver/bk4819.h" #include "driver/gpio.h" #include "driver/system.h" @@ -65,7 +63,7 @@ void FUNCTION_Init(void) { void FUNCTION_Select(FUNCTION_Type_t Function) { FUNCTION_Type_t PreviousFunction; bool bWasPowerSave; - uint16_t Countdown = 0; + PreviousFunction = gCurrentFunction; bWasPowerSave = (PreviousFunction == FUNCTION_POWER_SAVE); @@ -88,9 +86,7 @@ void FUNCTION_Select(FUNCTION_Type_t Function) { gVFO_RSSI_Level[0] = 0; gVFO_RSSI_Level[1] = 0; } else if (PreviousFunction == FUNCTION_RECEIVE) { - if (gFmRadioMode) { - Countdown = 500; - } + if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT || gDTMF_CallState == DTMF_CALL_STATE_RECEIVED) { gDTMF_AUTO_RESET_TIME = @@ -116,9 +112,7 @@ void FUNCTION_Select(FUNCTION_Type_t Function) { return; case FUNCTION_TRANSMIT: - if (gFmRadioMode) { - BK1080_Init(0, false); - } + if (gAlarmState == ALARM_STATE_TXALARM && gEeprom.ALARM_MODE != ALARM_MODE_TONE) { @@ -163,5 +157,5 @@ void FUNCTION_Select(FUNCTION_Type_t Function) { } gBatterySaveCountdown = 1000; gSchedulePowerSave = false; - gFM_RestoreCountdown = Countdown; + } diff --git a/radio.c b/radio.c index 6ff5662..144568f 100644 --- a/radio.c +++ b/radio.c @@ -19,7 +19,6 @@ #include #include "app/dtmf.h" -#include "app/fm.h" #include "audio.h" #include "bsp/dp32g030/gpio.h" #include "dcs.h" @@ -553,7 +552,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) { } } - if (gEeprom.VOX_SWITCH && !gFmRadioMode && !gCurrentVfo->IsAM) { + if (gEeprom.VOX_SWITCH && !gCurrentVfo->IsAM) { BK4819_EnableVox(gEeprom.VOX1_THRESHOLD, gEeprom.VOX0_THRESHOLD); InterruptMask |= 0 | BK4819_REG_3F_VOX_FOUND | BK4819_REG_3F_VOX_LOST; } else { @@ -619,7 +618,6 @@ void RADIO_SetVfoState(VfoState_t State) { if (State == VFO_STATE_NORMAL) { VfoState[0] = VFO_STATE_NORMAL; VfoState[1] = VFO_STATE_NORMAL; - gFM_ResumeCountdown = 0; } else { if (State == VFO_STATE_VOL_HIGH) { VfoState[0] = VFO_STATE_VOL_HIGH; @@ -634,7 +632,6 @@ void RADIO_SetVfoState(VfoState_t State) { } VfoState[Channel] = State; } - gFM_ResumeCountdown = 5; } gUpdateDisplay = true; } diff --git a/scheduler.c b/scheduler.c index cbe8ab7..6f615c6 100644 --- a/scheduler.c +++ b/scheduler.c @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "app/fm.h" + #include "app/scanner.h" #include "audio.h" #include "functions.h" @@ -80,11 +80,7 @@ void SystickHandler(void) DECREMENT_AND_TRIGGER(gCountdownToPlayNextVoice, gFlagPlayQueuedVoice); - if (gFM_ScanState != FM_SCAN_OFF && gCurrentFunction != FUNCTION_MONITOR) { - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_RECEIVE) { - DECREMENT_AND_TRIGGER(gFmPlayCountdown, gScheduleFM); - } - } + if (gVoxStopCountdown) { gVoxStopCountdown--; } diff --git a/settings.c b/settings.c index d8d5279..8dde1d6 100644 --- a/settings.c +++ b/settings.c @@ -18,34 +18,14 @@ #include -#include "app/fm.h" + #include "driver/eeprom.h" #include "driver/uart.h" #include "misc.h" EEPROM_Config_t gEeprom; -void SETTINGS_SaveFM(void) { - uint8_t i; - struct { - uint16_t Frequency; - uint8_t Channel; - bool IsChannelSelected; - uint8_t Padding[4]; - } State; - - UART_LogSend("sFm\r\n", 5); - - memset(&State, 0xFF, sizeof(State)); - State.Channel = gEeprom.FM_SelectedChannel; - State.Frequency = gEeprom.FM_SelectedFrequency; - State.IsChannelSelected = gEeprom.FM_IsMrMode; - - EEPROM_WriteBuffer(0x0E88, &State); - for (i = 0; i < 5; i++) { - EEPROM_WriteBuffer(0x0E40 + (i * 8), &gFM_Channels[i * 4]); - } -} + void SETTINGS_SaveVfoIndices(void) { uint8_t State[8]; diff --git a/ui/fmradio.c b/ui/fmradio.c deleted file mode 100644 index 851a010..0000000 --- a/ui/fmradio.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include "app/fm.h" -#include "driver/st7565.h" -#include "external/printf/printf.h" -#include "misc.h" -#include "settings.h" -#include "ui/fmradio.h" -#include "ui/helper.h" -#include "ui/inputbox.h" -#include "ui/ui.h" - -void UI_DisplayFM(void) -{ - uint8_t i; - char String[16]; - - memset(gFrameBuffer, 0, sizeof(gFrameBuffer)); - - memset(String, 0, sizeof(String)); - strcpy(String, "FM"); - - UI_PrintString(String, 0, 127, 0, 12, true); - memset(String, 0, sizeof(String)); - - if (gAskToSave) { - strcpy(String, "SAVE?"); - } else if (gAskToDelete) { - strcpy(String, "DEL?"); - } else { - if (gFM_ScanState == FM_SCAN_OFF) { - if (!gEeprom.FM_IsMrMode) { - for (i = 0; i < 20; i++) { - if (gEeprom.FM_FrequencyPlaying == gFM_Channels[i]) { - sprintf(String, "VFO(CH%02d)", i + 1); - break; - } - } - if (i == 20) { - strcpy(String, "VFO"); - } - } else { - sprintf(String, "MR(CH%02d)", gEeprom.FM_SelectedChannel + 1); - } - } else { - if (!gFM_AutoScan) { - strcpy(String, "M-SCAN"); - } else { - sprintf(String, "A-SCAN(%d)", gFM_ChannelPosition + 1); - } - } - } - - UI_PrintString(String, 0, 127, 2, 10, true); - memset(String, 0, sizeof(String)); - - if (gAskToSave || (gEeprom.FM_IsMrMode && gInputBoxIndex)) { - UI_GenerateChannelString(String, gFM_ChannelPosition); - } else if (!gAskToDelete) { - if (gInputBoxIndex == 0) { - NUMBER_ToDigits(gEeprom.FM_FrequencyPlaying * 10000, String); - UI_DisplayFrequency(String, 23, 4, false, true); - } else { - UI_DisplayFrequency(gInputBox, 23, 4, true, false); - } - ST7565_BlitFullScreen(); - return; - } else { - sprintf(String, "CH-%02d", gEeprom.FM_SelectedChannel + 1); - } - - UI_PrintString(String, 0, 127, 4, 10, true); - ST7565_BlitFullScreen(); -} - diff --git a/ui/fmradio.h b/ui/fmradio.h deleted file mode 100644 index 8309e9e..0000000 --- a/ui/fmradio.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2023 Dual Tachyon - * https://github.com/DualTachyon - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UI_FM_H -#define UI_FM_H - -void UI_DisplayFM(void); - -#endif - diff --git a/ui/status.c b/ui/status.c index 5555025..e2566d2 100644 --- a/ui/status.c +++ b/ui/status.c @@ -15,7 +15,7 @@ */ #include -#include "app/fm.h" + #include "bitmaps.h" #include "driver/keyboard.h" #include "driver/st7565.h" @@ -67,9 +67,7 @@ void UI_DisplayStatus(void) if (gEeprom.VOICE_PROMPT != VOICE_PROMPT_OFF) { memcpy(gStatusLine + 34, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt)); } - if (gFmRadioMode) { - memcpy(gStatusLine + 21, BITMAP_FM, sizeof(BITMAP_FM)); - } + ST7565_BlitStatusLine(); } diff --git a/ui/ui.c b/ui/ui.c index 09c22f2..8704c13 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -16,11 +16,9 @@ #include #include "app/dtmf.h" -#include "app/fm.h" #include "app/scanner.h" #include "driver/keyboard.h" #include "misc.h" -#include "ui/fmradio.h" #include "ui/inputbox.h" #include "ui/main.h" #include "ui/menu.h" @@ -41,7 +39,6 @@ void GUI_DisplayScreen(void) UI_DisplayMain(); break; case DISPLAY_FM: - UI_DisplayFM(); break; case DISPLAY_MENU: UI_DisplayMenu(); @@ -62,7 +59,6 @@ void GUI_SelectNextDisplay(GUI_DisplayType_t Display) gIsInSubMenu = false; gCssScanMode = CSS_SCAN_MODE_OFF; gScanState = SCAN_OFF; - gFM_ScanState = FM_SCAN_OFF; gAskForConfirmation = 0; gDTMF_InputMode = false; gDTMF_InputIndex = 0;