mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 14:21:25 +03:00
Fix F+4 and F+* scanning
This commit is contained in:
parent
f93f3659f9
commit
06c7d79b4b
4
Makefile
4
Makefile
@ -20,6 +20,7 @@ ENABLE_BIG_FREQ := 0
|
||||
ENABLE_SMALL_BOLD := 1
|
||||
ENABLE_KEEP_MEM_NAME := 1
|
||||
ENABLE_WIDE_RX := 1
|
||||
ENABLE_1250HZ_STEP := 1
|
||||
ENABLE_TX_WHEN_AM := 0
|
||||
ENABLE_F_CAL_MENU := 0
|
||||
ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1
|
||||
@ -254,6 +255,9 @@ endif
|
||||
ifeq ($(ENABLE_WIDE_RX),1)
|
||||
CFLAGS += -DENABLE_WIDE_RX
|
||||
endif
|
||||
ifeq ($(ENABLE_1250HZ_STEP),1)
|
||||
CFLAGS += -DENABLE_1250HZ_STEP
|
||||
endif
|
||||
ifeq ($(ENABLE_TX_WHEN_AM),1)
|
||||
CFLAGS += -DENABLE_TX_WHEN_AM
|
||||
endif
|
||||
|
@ -47,6 +47,7 @@ ENABLE_BIG_FREQ := 0 big font frequencies (like original QS
|
||||
ENABLE_SMALL_BOLD := 1 bold channel name/no. (when name + freq channel display mode)
|
||||
ENABLE_KEEP_MEM_NAME := 1 maintain channel name when (re)saving memory channel
|
||||
ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though front-end/PA not designed for full range)
|
||||
ENABLE_1250HZ_STEP := 1 enable smaller 1.25kHz frequency steps
|
||||
ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM
|
||||
ENABLE_F_CAL_MENU := 0 enable/disable the radios hidden frequency calibration menu
|
||||
ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method
|
||||
|
87
app/app.c
87
app/app.c
@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h> // abs()
|
||||
|
||||
#include "app/action.h"
|
||||
#ifdef ENABLE_AIRCOPY
|
||||
@ -657,7 +658,7 @@ static void MR_NextChannel(void)
|
||||
{
|
||||
case SCAN_NEXT_CHAN_SCANLIST1:
|
||||
prev_mr_chan = gNextMrChannel;
|
||||
|
||||
|
||||
if (chan1 >= 0)
|
||||
{
|
||||
if (RADIO_CheckValidChannel(chan1, false, 0))
|
||||
@ -667,7 +668,7 @@ static void MR_NextChannel(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
case SCAN_NEXT_CHAN_SCANLIST2:
|
||||
if (chan2 >= 0)
|
||||
{
|
||||
@ -678,7 +679,7 @@ static void MR_NextChannel(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// this bit doesn't yet work if the other VFO is a frequency
|
||||
case SCAN_NEXT_CHAN_DUAL_WATCH:
|
||||
// dual watch is enabled - include the other VFO in the scan
|
||||
@ -710,11 +711,11 @@ static void MR_NextChannel(void)
|
||||
chan = RADIO_FindNextChannel(gNextMrChannel + gScanStateDir, gScanStateDir, (gEeprom.SCAN_LIST_DEFAULT < 2) ? true : false, gEeprom.SCAN_LIST_DEFAULT);
|
||||
if (chan == 0xFF)
|
||||
{ // no valid channel found
|
||||
|
||||
|
||||
chan = MR_CHANNEL_FIRST;
|
||||
// return;
|
||||
}
|
||||
|
||||
|
||||
gNextMrChannel = chan;
|
||||
}
|
||||
|
||||
@ -873,7 +874,7 @@ void APP_CheckRadioInterrupts(void)
|
||||
{
|
||||
g_VOX_Lost = true;
|
||||
gVoxPauseCountdown = 10;
|
||||
|
||||
|
||||
if (gEeprom.VOX_SWITCH)
|
||||
{
|
||||
if (gCurrentFunction == FUNCTION_POWER_SAVE && !gRxIdleMode)
|
||||
@ -881,12 +882,12 @@ void APP_CheckRadioInterrupts(void)
|
||||
gPowerSave_10ms = power_save2_10ms;
|
||||
gPowerSaveCountdownExpired = 0;
|
||||
}
|
||||
|
||||
|
||||
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF && (gScheduleDualWatch || gDualWatchCountdown_10ms < dual_watch_count_after_vox_10ms))
|
||||
{
|
||||
gDualWatchCountdown_10ms = dual_watch_count_after_vox_10ms;
|
||||
gScheduleDualWatch = false;
|
||||
|
||||
|
||||
// let the user see DW is not active
|
||||
gDualWatchActive = false;
|
||||
gUpdateStatus = true;
|
||||
@ -959,7 +960,7 @@ void APP_EndTransmission(void)
|
||||
{
|
||||
if (gSetting_KILLED)
|
||||
return;
|
||||
|
||||
|
||||
if (gVoxResumeCountdown == 0)
|
||||
{
|
||||
if (gVoxPauseCountdown)
|
||||
@ -970,18 +971,18 @@ void APP_EndTransmission(void)
|
||||
g_VOX_Lost = false;
|
||||
gVoxPauseCountdown = 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_FMRADIO
|
||||
if (gFmRadioMode)
|
||||
return;
|
||||
#endif
|
||||
|
||||
|
||||
if (gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR)
|
||||
return;
|
||||
|
||||
|
||||
if (gScanStateDir != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF)
|
||||
return;
|
||||
|
||||
|
||||
if (gVOX_NoiseDetected)
|
||||
{
|
||||
if (g_VOX_Lost)
|
||||
@ -989,7 +990,7 @@ void APP_EndTransmission(void)
|
||||
else
|
||||
if (gVoxStopCountdown_10ms == 0)
|
||||
gVOX_NoiseDetected = false;
|
||||
|
||||
|
||||
if (gCurrentFunction == FUNCTION_TRANSMIT && !gPttIsPressed && !gVOX_NoiseDetected)
|
||||
{
|
||||
if (gFlagEndTransmission)
|
||||
@ -1000,7 +1001,7 @@ void APP_EndTransmission(void)
|
||||
else
|
||||
{
|
||||
APP_EndTransmission();
|
||||
|
||||
|
||||
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
|
||||
{
|
||||
//if (gCurrentFunction != FUNCTION_FOREGROUND)
|
||||
@ -1009,21 +1010,21 @@ void APP_EndTransmission(void)
|
||||
else
|
||||
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
|
||||
}
|
||||
|
||||
|
||||
gUpdateStatus = true;
|
||||
gUpdateDisplay = true;
|
||||
gFlagEndTransmission = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (g_VOX_Lost)
|
||||
{
|
||||
gVOX_NoiseDetected = true;
|
||||
|
||||
|
||||
if (gCurrentFunction == FUNCTION_POWER_SAVE)
|
||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||
|
||||
|
||||
if (gCurrentFunction != FUNCTION_TRANSMIT && gSerialConfigCountDown_500ms == 0)
|
||||
{
|
||||
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
||||
@ -1076,7 +1077,7 @@ void APP_Update(void)
|
||||
if (gScreenToDisplay != DISPLAY_SCANNER && gScanStateDir != SCAN_OFF && gScheduleScanListen && !gPttIsPressed)
|
||||
#endif
|
||||
{ // scanning
|
||||
|
||||
|
||||
if (IS_FREQ_CHANNEL(gNextMrChannel))
|
||||
{
|
||||
if (gCurrentFunction == FUNCTION_INCOMING)
|
||||
@ -1369,7 +1370,7 @@ void APP_CheckKeys(void)
|
||||
|
||||
if (gDebounceCounter < key_repeat_delay_10ms)
|
||||
return;
|
||||
|
||||
|
||||
// key is being held pressed
|
||||
|
||||
if (gDebounceCounter == key_repeat_delay_10ms)
|
||||
@ -1455,7 +1456,7 @@ void APP_TimeSlice10ms(void)
|
||||
#ifdef ENABLE_VOX
|
||||
if (gVoxResumeCountdown > 0)
|
||||
gVoxResumeCountdown--;
|
||||
|
||||
|
||||
if (gVoxPauseCountdown > 0)
|
||||
gVoxPauseCountdown--;
|
||||
#endif
|
||||
@ -1553,7 +1554,7 @@ void APP_TimeSlice10ms(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (gScannerEditState != 0)
|
||||
if (gScannerEditState != SCAN_EDIT_STATE_NONE)
|
||||
{
|
||||
APP_CheckKeys();
|
||||
return;
|
||||
@ -1576,15 +1577,13 @@ void APP_TimeSlice10ms(void)
|
||||
{
|
||||
const uint32_t step = StepFrequencyTable[gStepSetting];
|
||||
gScanFrequency = ((Result + (step / 2)) / step) * step; // round to nearest step multiple
|
||||
// gScanFrequency = (Result / step) * step; // round down
|
||||
}
|
||||
#endif
|
||||
|
||||
if (Delta < 0)
|
||||
Delta = -Delta;
|
||||
if (Delta < 100)
|
||||
gScanHitCount++;
|
||||
else
|
||||
gScanHitCount = 0;
|
||||
|
||||
Delta = abs(Delta);
|
||||
|
||||
gScanHitCount = (Delta < 100) ? gScanHitCount + 1 : 0;
|
||||
|
||||
BK4819_DisableFrequencyScan();
|
||||
|
||||
@ -1730,7 +1729,7 @@ void APP_TimeSlice500ms(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (gDTMF_RX_live_timeout > 0)
|
||||
{
|
||||
#ifdef ENABLE_RSSI_BAR
|
||||
@ -1748,7 +1747,7 @@ void APP_TimeSlice500ms(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (gMenuCountdown > 0)
|
||||
if (--gMenuCountdown == 0)
|
||||
exit_menu = (gScreenToDisplay == DISPLAY_MENU); // exit menu mode
|
||||
@ -1872,7 +1871,7 @@ void APP_TimeSlice500ms(void)
|
||||
|
||||
{
|
||||
GUI_DisplayType_t disp = DISPLAY_INVALID;
|
||||
|
||||
|
||||
#ifdef ENABLE_FMRADIO
|
||||
if (gFmRadioMode &&
|
||||
gCurrentFunction != FUNCTION_RECEIVE &&
|
||||
@ -1882,7 +1881,7 @@ void APP_TimeSlice500ms(void)
|
||||
disp = DISPLAY_FM;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (disp == DISPLAY_INVALID)
|
||||
{
|
||||
#ifndef ENABLE_CODE_SCAN_TIMEOUT
|
||||
@ -1890,7 +1889,7 @@ void APP_TimeSlice500ms(void)
|
||||
#endif
|
||||
disp = DISPLAY_MAIN;
|
||||
}
|
||||
|
||||
|
||||
if (disp != DISPLAY_INVALID)
|
||||
GUI_SelectNextDisplay(disp);
|
||||
}
|
||||
@ -1972,7 +1971,9 @@ void APP_TimeSlice500ms(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (gScreenToDisplay == DISPLAY_SCANNER && gScannerEditState == 0 && gScanCssState < SCAN_CSS_STATE_FOUND)
|
||||
if (gScreenToDisplay == DISPLAY_SCANNER &&
|
||||
gScannerEditState == SCAN_EDIT_STATE_NONE &&
|
||||
gScanCssState < SCAN_CSS_STATE_FOUND)
|
||||
{
|
||||
gScanProgressIndicator++;
|
||||
|
||||
@ -2271,20 +2272,20 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
Code = DTMF_GetCharacter(Key - KEY_0);
|
||||
if (Code == 0xFF)
|
||||
goto Skip;
|
||||
|
||||
|
||||
// transmit DTMF keys
|
||||
}
|
||||
|
||||
|
||||
if (!bKeyPressed || bKeyHeld)
|
||||
{
|
||||
if (!bKeyPressed)
|
||||
{
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
||||
|
||||
|
||||
gEnableSpeaker = false;
|
||||
|
||||
|
||||
BK4819_ExitDTMF_TX(false);
|
||||
|
||||
|
||||
if (gCurrentVfo->SCRAMBLING_TYPE == 0 || !gSetting_ScrambleEnable)
|
||||
BK4819_DisableScramble();
|
||||
else
|
||||
@ -2298,9 +2299,9 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
||||
gEnableSpeaker = true;
|
||||
}
|
||||
|
||||
|
||||
BK4819_DisableScramble();
|
||||
|
||||
|
||||
if (Code == 0xFE)
|
||||
BK4819_TransmitTone(gEeprom.DTMF_SIDE_TONE, 1750);
|
||||
else
|
||||
|
@ -702,8 +702,6 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld)
|
||||
gScanSingleFrequency = true;
|
||||
gBackupCROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
||||
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
||||
|
||||
ACTION_Scan(false);
|
||||
}
|
||||
|
||||
gPttWasReleased = true;
|
||||
|
157
app/scanner.c
157
app/scanner.c
@ -31,7 +31,7 @@ uint8_t gScanCssResultCode;
|
||||
bool gFlagStartScan;
|
||||
bool gFlagStopScan;
|
||||
bool gScanSingleFrequency;
|
||||
uint8_t gScannerEditState;
|
||||
SCAN_edit_state_t gScannerEditState;
|
||||
uint8_t gScanChannel;
|
||||
uint32_t gScanFrequency;
|
||||
bool gScanPauseMode;
|
||||
@ -48,7 +48,7 @@ static void SCANNER_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
{
|
||||
if (!bKeyHeld && bKeyPressed)
|
||||
{
|
||||
if (gScannerEditState == 1)
|
||||
if (gScannerEditState == SCAN_EDIT_STATE_BUSY)
|
||||
{
|
||||
uint16_t Channel;
|
||||
|
||||
@ -92,9 +92,9 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
switch (gScannerEditState)
|
||||
{
|
||||
case 0:
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||
|
||||
|
||||
gEeprom.CROSS_BAND_RX_TX = gBackupCROSS_BAND_RX_TX;
|
||||
gUpdateStatus = true;
|
||||
gFlagStopScan = true;
|
||||
@ -105,7 +105,7 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
#endif
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case SCAN_EDIT_STATE_BUSY:
|
||||
if (gInputBoxIndex > 0)
|
||||
{
|
||||
gInputBox[--gInputBoxIndex] = 10;
|
||||
@ -115,8 +115,8 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
// Fallthrough
|
||||
|
||||
case 2:
|
||||
gScannerEditState = 0;
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
||||
#ifdef ENABLE_VOICE
|
||||
gAnotherVoiceID = VOICE_ID_CANCEL;
|
||||
#endif
|
||||
@ -161,49 +161,97 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
switch (gScannerEditState)
|
||||
{
|
||||
case 0:
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
if (!gScanSingleFrequency)
|
||||
{
|
||||
int16_t Delta625;
|
||||
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)
|
||||
{
|
||||
Delta250 = 250 - Delta250;
|
||||
Freq250 += 250;
|
||||
}
|
||||
#if 0
|
||||
// can't make head nor tail of what's being done here :(
|
||||
|
||||
Delta625 = (int16_t)gScanFrequency - (int16_t)Freq625;
|
||||
uint32_t Freq250 = FREQUENCY_FloorToStep(gScanFrequency, 250, 0);
|
||||
uint32_t Freq625 = FREQUENCY_FloorToStep(gScanFrequency, 625, 0);
|
||||
|
||||
if (312 < Delta625)
|
||||
{
|
||||
Delta625 = 625 - Delta625;
|
||||
Freq625 += 625;
|
||||
}
|
||||
int16_t Delta250 = (int16_t)gScanFrequency - (int16_t)Freq250;
|
||||
int16_t Delta625;
|
||||
|
||||
if (Delta625 < Delta250)
|
||||
{
|
||||
gStepSetting = STEP_6_25kHz;
|
||||
gScanFrequency = Freq625;
|
||||
}
|
||||
else
|
||||
{
|
||||
gStepSetting = STEP_2_5kHz;
|
||||
gScanFrequency = Freq250;
|
||||
}
|
||||
if (125 < Delta250)
|
||||
{
|
||||
Delta250 = 250 - Delta250;
|
||||
Freq250 += 250;
|
||||
}
|
||||
|
||||
Delta625 = (int16_t)gScanFrequency - (int16_t)Freq625;
|
||||
|
||||
if (312 < Delta625)
|
||||
{
|
||||
Delta625 = 625 - Delta625;
|
||||
Freq625 += 625;
|
||||
}
|
||||
|
||||
if (Delta625 < Delta250)
|
||||
{
|
||||
gStepSetting = STEP_6_25kHz;
|
||||
gScanFrequency = Freq625;
|
||||
}
|
||||
else
|
||||
{
|
||||
gStepSetting = STEP_2_5kHz;
|
||||
gScanFrequency = Freq250;
|
||||
}
|
||||
#else
|
||||
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
const STEP_Setting_t small_step = STEP_1_25kHz;
|
||||
const STEP_Setting_t big_step = STEP_6_25kHz;
|
||||
#else
|
||||
const STEP_Setting_t small_step = STEP_2_5kHz;
|
||||
const STEP_Setting_t big_step = STEP_6_25kHz;
|
||||
#endif
|
||||
const uint32_t small_step_freq = StepFrequencyTable[small_step];
|
||||
const uint32_t big_step_freq = StepFrequencyTable[big_step];
|
||||
|
||||
uint32_t freq_small_step = FREQUENCY_FloorToStep(gScanFrequency, small_step_freq, 0);
|
||||
uint32_t freq_big_step = FREQUENCY_FloorToStep(gScanFrequency, big_step_freq, 0);
|
||||
|
||||
int32_t delta_small_step = (int32_t)gScanFrequency - freq_small_step;
|
||||
int32_t delta_big_step = (int32_t)gScanFrequency - freq_big_step;
|
||||
|
||||
if (delta_small_step > 125)
|
||||
{
|
||||
delta_small_step = StepFrequencyTable[small_step] - delta_small_step;
|
||||
freq_big_step += small_step_freq;
|
||||
}
|
||||
|
||||
delta_big_step = (int32_t)gScanFrequency - freq_big_step;
|
||||
|
||||
if (delta_big_step > 312)
|
||||
{
|
||||
delta_big_step = big_step_freq - delta_big_step;
|
||||
freq_big_step += big_step_freq;
|
||||
}
|
||||
|
||||
if (delta_small_step >= delta_big_step)
|
||||
{
|
||||
gStepSetting = small_step;
|
||||
gScanFrequency = freq_small_step;
|
||||
}
|
||||
else
|
||||
{
|
||||
gStepSetting = big_step;
|
||||
gScanFrequency = freq_big_step;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (gTxVfo->CHANNEL_SAVE <= MR_CHANNEL_LAST)
|
||||
{
|
||||
gScannerEditState = 1;
|
||||
gScannerEditState = SCAN_EDIT_STATE_BUSY;
|
||||
gScanChannel = gTxVfo->CHANNEL_SAVE;
|
||||
gShowChPrefix = RADIO_CheckValidChannel(gTxVfo->CHANNEL_SAVE, false, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gScannerEditState = 2;
|
||||
gScannerEditState = SCAN_EDIT_STATE_DONE;
|
||||
}
|
||||
|
||||
gScanCssState = SCAN_CSS_STATE_FOUND;
|
||||
@ -211,20 +259,20 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
||||
gAnotherVoiceID = VOICE_ID_MEMORY_CHANNEL;
|
||||
#endif
|
||||
gRequestDisplayScreen = DISPLAY_SCANNER;
|
||||
|
||||
|
||||
gUpdateStatus = true;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case SCAN_EDIT_STATE_BUSY:
|
||||
if (gInputBoxIndex == 0)
|
||||
{
|
||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
gRequestDisplayScreen = DISPLAY_SCANNER;
|
||||
gScannerEditState = 2;
|
||||
gScannerEditState = SCAN_EDIT_STATE_DONE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
if (!gScanSingleFrequency)
|
||||
{
|
||||
RADIO_InitInfo(gTxVfo, gTxVfo->CHANNEL_SAVE, gScanFrequency);
|
||||
@ -235,8 +283,8 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
||||
gTxVfo->freq_config_RX.Code = gScanCssResultCode;
|
||||
}
|
||||
|
||||
gTxVfo->freq_config_TX = gTxVfo->freq_config_RX;
|
||||
gTxVfo->STEP_SETTING = gStepSetting;
|
||||
gTxVfo->freq_config_TX = gTxVfo->freq_config_RX;
|
||||
gTxVfo->STEP_SETTING = gStepSetting;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -251,23 +299,26 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
if (gTxVfo->CHANNEL_SAVE <= MR_CHANNEL_LAST)
|
||||
{
|
||||
Channel = gScanChannel;
|
||||
Channel = gScanChannel;
|
||||
gEeprom.MrChannel[gEeprom.TX_VFO] = Channel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Channel = gTxVfo->Band + FREQ_CHANNEL_FIRST;
|
||||
Channel = gTxVfo->Band + FREQ_CHANNEL_FIRST;
|
||||
gEeprom.FreqChannel[gEeprom.TX_VFO] = Channel;
|
||||
}
|
||||
|
||||
gTxVfo->CHANNEL_SAVE = Channel;
|
||||
gTxVfo->CHANNEL_SAVE = Channel;
|
||||
gEeprom.ScreenChannel[gEeprom.TX_VFO] = Channel;
|
||||
gRequestSaveChannel = 2;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
gAnotherVoiceID = VOICE_ID_CONFIRM;
|
||||
gAnotherVoiceID = VOICE_ID_CONFIRM;
|
||||
#endif
|
||||
gRequestDisplayScreen = DISPLAY_SCANNER;
|
||||
gRequestSaveChannel = 2;
|
||||
gScannerEditState = 0;
|
||||
|
||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_SCANNER;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -302,7 +353,7 @@ static void SCANNER_Key_UP_DOWN(bool bKeyPressed, bool pKeyHeld, int8_t Directio
|
||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
}
|
||||
|
||||
if (gScannerEditState == 1)
|
||||
if (gScannerEditState == SCAN_EDIT_STATE_BUSY)
|
||||
{
|
||||
gScanChannel = NUMBER_AddWithWraparound(gScanChannel, Direction, 0, MR_CHANNEL_LAST);
|
||||
gShowChPrefix = RADIO_CheckValidChannel(gScanChannel, false, 0);
|
||||
@ -389,8 +440,6 @@ void SCANNER_Start(void)
|
||||
|
||||
BK4819_PickRXFilterPathBasedOnFrequency(gScanFrequency);
|
||||
BK4819_SetScanFrequency(gScanFrequency);
|
||||
|
||||
gUpdateStatus = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -399,8 +448,6 @@ void SCANNER_Start(void)
|
||||
|
||||
BK4819_PickRXFilterPathBasedOnFrequency(0xFFFFFFFF);
|
||||
BK4819_EnableFrequencyScan();
|
||||
|
||||
gUpdateStatus = true;
|
||||
}
|
||||
|
||||
DTMF_clear_RX();
|
||||
@ -418,8 +465,10 @@ void SCANNER_Start(void)
|
||||
g_VOX_Lost = false;
|
||||
#endif
|
||||
g_SquelchLost = false;
|
||||
gScannerEditState = 0;
|
||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
||||
gScanProgressIndicator = 0;
|
||||
|
||||
gUpdateStatus = true;
|
||||
}
|
||||
|
||||
void SCANNER_Stop(void)
|
||||
|
@ -20,29 +20,34 @@
|
||||
#include "dcs.h"
|
||||
#include "driver/keyboard.h"
|
||||
|
||||
enum SCAN_CssState_t
|
||||
enum SCAN_CssState_e
|
||||
{
|
||||
SCAN_CSS_STATE_OFF = 0,
|
||||
SCAN_CSS_STATE_SCANNING,
|
||||
SCAN_CSS_STATE_FOUND,
|
||||
SCAN_CSS_STATE_FAILED
|
||||
};
|
||||
typedef enum SCAN_CssState_e SCAN_CssState_t;
|
||||
|
||||
typedef enum SCAN_CssState_t SCAN_CssState_t;
|
||||
|
||||
enum
|
||||
{
|
||||
enum {
|
||||
SCAN_REV = -1,
|
||||
SCAN_OFF = 0,
|
||||
SCAN_FWD = +1
|
||||
};
|
||||
|
||||
enum SCAN_edit_state_e {
|
||||
SCAN_EDIT_STATE_NONE = 0,
|
||||
SCAN_EDIT_STATE_BUSY,
|
||||
SCAN_EDIT_STATE_DONE
|
||||
};
|
||||
typedef enum SCAN_edit_state_e SCAN_edit_state_t;
|
||||
|
||||
extern DCS_CodeType_t gScanCssResultType;
|
||||
extern uint8_t gScanCssResultCode;
|
||||
extern bool gFlagStartScan;
|
||||
extern bool gFlagStopScan;
|
||||
extern bool gScanSingleFrequency;
|
||||
extern uint8_t gScannerEditState;
|
||||
extern SCAN_edit_state_t gScannerEditState;
|
||||
extern uint8_t gScanChannel;
|
||||
extern uint32_t gScanFrequency;
|
||||
extern bool gScanPauseMode;
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -61,12 +61,12 @@ const freq_band_table_t frequencyBandTable[7] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_12_5KHZ_STEP
|
||||
// QS steps (*10 Hz)
|
||||
const uint16_t StepFrequencyTable[7] = {250, 500, 625, 1000, 1250, 2500, 833};
|
||||
#else
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
// includes 1.25kHz step
|
||||
const uint16_t StepFrequencyTable[7] = {125, 250, 625, 1000, 1250, 2500, 833};
|
||||
#else
|
||||
// QS steps (*10 Hz)
|
||||
const uint16_t StepFrequencyTable[7] = {250, 500, 625, 1000, 1250, 2500, 833};
|
||||
#endif
|
||||
|
||||
FREQUENCY_Band_t FREQUENCY_GetBand(uint32_t Frequency)
|
||||
|
@ -19,8 +19,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define ENABLE_12_5KHZ_STEP
|
||||
|
||||
typedef struct {
|
||||
const uint32_t lower;
|
||||
const uint32_t upper;
|
||||
@ -43,22 +41,22 @@ enum FREQUENCY_Band_t {
|
||||
};
|
||||
typedef enum FREQUENCY_Band_t FREQUENCY_Band_t;
|
||||
|
||||
#ifndef ENABLE_12_5KHZ_STEP
|
||||
// QS steps
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
// includes 1.25kHz step
|
||||
enum STEP_Setting_t {
|
||||
STEP_2_5kHz = 0,
|
||||
STEP_5_0kHz,
|
||||
STEP_1_25kHz = 0,
|
||||
STEP_2_5kHz,
|
||||
STEP_6_25kHz,
|
||||
STEP_10_0kHz,
|
||||
STEP_12_5kHz,
|
||||
STEP_25_0kHz,
|
||||
STEP_8_33kHz
|
||||
};
|
||||
};
|
||||
#else
|
||||
// includes 1.25kHz step
|
||||
// QS steps
|
||||
enum STEP_Setting_t {
|
||||
STEP_1_25kHz = 0,
|
||||
STEP_2_5kHz,
|
||||
STEP_2_5kHz = 0,
|
||||
STEP_5_0kHz,
|
||||
STEP_6_25kHz,
|
||||
STEP_10_0kHz,
|
||||
STEP_12_5kHz,
|
||||
|
@ -341,6 +341,7 @@ const char gSubMenu_SCRAMBLER[11][7] =
|
||||
};
|
||||
|
||||
const char gSubMenu_SIDE_BUTT[9][16] =
|
||||
//const char gSubMenu_SIDE_BUTT[10][16] =
|
||||
{
|
||||
"NONE",
|
||||
"FLASH\nLIGHT",
|
||||
@ -350,7 +351,8 @@ const char gSubMenu_SIDE_BUTT[9][16] =
|
||||
"VOX\non\\off",
|
||||
"ALARM\non\\off",
|
||||
"FM RADIO\non\\off",
|
||||
"TX\n1750Hz"
|
||||
"TX\n1750Hz",
|
||||
// "2nd PTT",
|
||||
};
|
||||
|
||||
// ***************************************************************************************
|
||||
|
65
ui/scanner.c
65
ui/scanner.c
@ -30,8 +30,7 @@
|
||||
void UI_DisplayScanner(void)
|
||||
{
|
||||
char String[16];
|
||||
bool bCentered;
|
||||
uint8_t Start;
|
||||
bool text_centered = false;
|
||||
|
||||
memset(gFrameBuffer, 0, sizeof(gFrameBuffer));
|
||||
|
||||
@ -49,7 +48,7 @@ void UI_DisplayScanner(void)
|
||||
|
||||
memset(String, 0, sizeof(String));
|
||||
if (gScanCssState < SCAN_CSS_STATE_FOUND || !gScanUseCssResult)
|
||||
strcpy(String, " CTC scanning");
|
||||
strcpy(String, "CODE scanning");
|
||||
else
|
||||
if (gScanCssResultType == CODE_TYPE_CONTINUOUS_TONE)
|
||||
sprintf(String, " CTC %u.%uHz", CTCSS_Options[gScanCssResultCode] / 10, CTCSS_Options[gScanCssResultCode] % 10);
|
||||
@ -58,42 +57,40 @@ void UI_DisplayScanner(void)
|
||||
UI_PrintString(String, 2, 0, 3, 8);
|
||||
|
||||
memset(String, 0, sizeof(String));
|
||||
if (gScannerEditState == 2)
|
||||
switch (gScannerEditState)
|
||||
{
|
||||
strcpy(String, "SAVE ?");
|
||||
default:
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
if (gScanCssState < SCAN_CSS_STATE_FOUND)
|
||||
{ // rolling indicator
|
||||
memset(String, 0, sizeof(String));
|
||||
memset(String, '.', 15);
|
||||
String[gScanProgressIndicator % 15] = '#';
|
||||
}
|
||||
else
|
||||
if (gScanCssState == SCAN_CSS_STATE_FOUND)
|
||||
{
|
||||
// strcpy(String, "SCAN COMPLETE");
|
||||
strcpy(String, "* repeat M save");
|
||||
text_centered = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(String, "SCAN FAIL");
|
||||
}
|
||||
break;
|
||||
|
||||
Start = 0;
|
||||
bCentered = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gScannerEditState == 1)
|
||||
{
|
||||
case SCAN_EDIT_STATE_BUSY:
|
||||
strcpy(String, "SAVE ");
|
||||
UI_GenerateChannelStringEx(String + 5, gShowChPrefix, gScanChannel);
|
||||
}
|
||||
else
|
||||
if (gScanCssState < SCAN_CSS_STATE_FOUND)
|
||||
{
|
||||
memset(String, 0, sizeof(String));
|
||||
memset(String, '.', 15);
|
||||
String[gScanProgressIndicator % 15] = '#';
|
||||
}
|
||||
else
|
||||
if (gScanCssState == SCAN_CSS_STATE_FOUND)
|
||||
{
|
||||
// strcpy(String, "SCAN CMP");
|
||||
strcpy(String, " '*' to save");
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(String, "SCAN FAIL");
|
||||
}
|
||||
|
||||
Start = 2;
|
||||
bCentered = 0;
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
text_centered = true;
|
||||
strcpy(String, "SAVE ?");
|
||||
break;
|
||||
}
|
||||
UI_PrintString(String, Start, bCentered ? 127 : 0, 5, 8);
|
||||
UI_PrintString(String, text_centered ? 0 : 2, text_centered ? 127 : 0, 5, 8);
|
||||
|
||||
ST7565_BlitFullScreen();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user