0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-06-19 06:39:49 +03:00

Edited "D HOLD" times to include "STAY ON SCREEN" option

This commit is contained in:
OneOfEleven
2023-10-08 11:40:17 +01:00
parent 06c7d79b4b
commit 0547452589
24 changed files with 977 additions and 630 deletions

109
app/app.c
View File

@ -1319,7 +1319,7 @@ void APP_CheckKeys(void)
{ // PTT pressed
if (++gPttDebounceCounter >= 3) // 30ms
{ // start transmitting
boot_counter_10ms = 0;
boot_counter_10ms = 0; // cancel the boot-up screen
gPttDebounceCounter = 0;
gPttIsPressed = true;
APP_ProcessKey(KEY_PTT, true, false);
@ -1333,8 +1333,16 @@ void APP_CheckKeys(void)
// scan the hardware keys
Key = KEYBOARD_Poll();
if (Key != KEY_INVALID)
boot_counter_10ms = 0; // cancel boot screen/beeps if any key pressed
if (Key == KEY_INVALID)
{
// gKeyReading0 = KEY_INVALID;
// gKeyReading1 = KEY_INVALID;
// gDebounceCounter = 0;
// gKeyBeingHeld = false;
// return;
}
boot_counter_10ms = 0; // cancel boot screen/beeps
if (gKeyReading0 != Key)
{ // new key pressed
@ -1549,9 +1557,11 @@ void APP_TimeSlice10ms(void)
if (gScanDelay_10ms > 0)
{
gScanDelay_10ms--;
APP_CheckKeys();
return;
if (--gScanDelay_10ms > 0)
{
APP_CheckKeys();
return;
}
}
if (gScannerEditState != SCAN_EDIT_STATE_NONE)
@ -1564,36 +1574,33 @@ void APP_TimeSlice10ms(void)
{
case SCAN_CSS_STATE_OFF:
// must be RF frequency scanning if we're here ?
if (!BK4819_GetFrequencyScanResult(&Result))
break;
// accept only within 1kHz
Delta = Result - gScanFrequency;
gScanHitCount = (abs(Delta) < 100) ? gScanHitCount + 1 : 0;
BK4819_DisableFrequencyScan();
#if 0
gScanFrequency = Result;
#else
{
{ // round to nearest step multiple
const uint32_t step = StepFrequencyTable[gStepSetting];
gScanFrequency = ((Result + (step / 2)) / step) * step; // round to nearest step multiple
// gScanFrequency = (Result / step) * step; // round down
gScanFrequency = ((Result + (step / 2)) / step) * step;
}
#endif
Delta = abs(Delta);
gScanHitCount = (Delta < 100) ? gScanHitCount + 1 : 0;
BK4819_DisableFrequencyScan();
if (gScanHitCount < 3)
{
{ // keep scanning for an RF carrier
BK4819_EnableFrequencyScan();
}
else
{
{ // RF carrier found .. stop RF scanning
BK4819_SetScanFrequency(gScanFrequency);
// start CTCSS/CTDSS scanning
gScanCssResultCode = 0xFF;
gScanCssResultType = 0xFF;
gScanHitCount = 0;
@ -1602,12 +1609,10 @@ void APP_TimeSlice10ms(void)
gScanCssState = SCAN_CSS_STATE_SCANNING;
GUI_SelectNextDisplay(DISPLAY_SCANNER);
gUpdateStatus = true;
gUpdateStatus = true;
}
gScanDelay_10ms = scan_delay_10ms;
//gScanDelay_10ms = 1; // 10ms
gScanDelay_10ms = scan_freq_css_delay_10ms;
break;
case SCAN_CSS_STATE_SCANNING:
@ -1652,10 +1657,10 @@ void APP_TimeSlice10ms(void)
}
}
if (gScanCssState < SCAN_CSS_STATE_FOUND)
{
if (gScanCssState == SCAN_CSS_STATE_OFF || gScanCssState == SCAN_CSS_STATE_SCANNING)
{ // re-start scan
BK4819_SetScanFrequency(gScanFrequency);
gScanDelay_10ms = scan_delay_10ms;
gScanDelay_10ms = scan_freq_css_delay_10ms;
break;
}
@ -1686,22 +1691,22 @@ void APP_TimeSlice10ms(void)
void cancelUserInputModes(void)
{
gKeyInputCountdown = 0;
if (gDTMF_InputMode || gDTMF_InputBox_Index > 0 || gInputBoxIndex > 0)
if (gDTMF_InputMode || gDTMF_InputBox_Index > 0)
{
DTMF_clear_input_box();
gInputBoxIndex = 0;
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
gRequestDisplayScreen = DISPLAY_MAIN;
gUpdateDisplay = true;
}
if (gWasFKeyPressed)
if (gWasFKeyPressed || gKeyInputCountdown > 0 || gInputBoxIndex > 0)
{
gWasFKeyPressed = false;
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
gUpdateStatus = true;
gWasFKeyPressed = false;
gInputBoxIndex = 0;
gKeyInputCountdown = 0;
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
gUpdateStatus = true;
gUpdateDisplay = true;
}
}
@ -1997,7 +2002,6 @@ void APP_TimeSlice500ms(void)
if (gDTMF_DecodeRingCountdown_500ms > 0)
{ // make "ring-ring" sound
gDTMF_DecodeRingCountdown_500ms--;
AUDIO_PlayBeep(BEEP_880HZ_200MS);
}
}
@ -2012,10 +2016,19 @@ void APP_TimeSlice500ms(void)
{
if (--gDTMF_auto_reset_time_500ms == 0)
{
gDTMF_CallState = DTMF_CALL_STATE_NONE;
if (gDTMF_CallState == DTMF_CALL_STATE_RECEIVED && gEeprom.DTMF_auto_reset_time >= DTMF_HOLD_MAX)
gDTMF_CallState = DTMF_CALL_STATE_RECEIVED_STAY; // keep message on-screen till a key is pressed
else
gDTMF_CallState = DTMF_CALL_STATE_NONE;
gUpdateDisplay = true;
}
}
// if (gDTMF_CallState != DTMF_CALL_STATE_RECEIVED_STAY)
// {
// gDTMF_CallState = DTMF_CALL_STATE_NONE;
// gUpdateDisplay = true;
// }
}
if (gDTMF_IsTx && gDTMF_TxStopCountdown_500ms > 0)
@ -2083,12 +2096,12 @@ void CHANNEL_Next(const bool bFlag, const int8_t scan_direction)
bScanKeepFrequency = false;
}
static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
static void APP_ProcessKey(const KEY_Code_t Key, const bool bKeyPressed, const bool bKeyHeld)
{
bool bFlag = false;
if (Key == KEY_INVALID)
return;
// if (Key == KEY_INVALID)
// return;
const bool backlight_was_on = GPIO_CheckBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT);
@ -2142,7 +2155,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
}
else
{
if (Key != KEY_PTT)
if (Key != KEY_PTT || gSetting_backlight_on_tx_rx == 1 || gSetting_backlight_on_tx_rx == 3)
BACKLIGHT_TurnOn();
if (Key == KEY_EXIT && bKeyHeld)
@ -2155,6 +2168,9 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
gDTMF_RX_live_timeout = 0;
gUpdateDisplay = true;
}
// cancel user input
cancelUserInputModes();
}
if (gScreenToDisplay == DISPLAY_MENU) // 1of11
@ -2232,7 +2248,6 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
{
if (bKeyHeld)
bFlag = true;
if (!bKeyPressed)
{
bFlag = true;
@ -2334,7 +2349,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
{
case DISPLAY_MAIN:
MAIN_ProcessKeys(Key, bKeyPressed, bKeyHeld);
bKeyHeld = false; // allow the channel setting to be saved
// bKeyHeld = false; // allow the channel setting to be saved
break;
#ifdef ENABLE_FMRADIO
@ -2375,9 +2390,6 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
if (!bKeyHeld && bKeyPressed)
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
}
else
if (Key == KEY_EXIT && bKeyHeld)
cancelUserInputModes();
Skip:
if (gBeepToPlay != BEEP_NONE)
@ -2399,7 +2411,6 @@ Skip:
if (gFlagStopScan)
{
BK4819_StopScan();
gFlagStopScan = false;
}
@ -2506,6 +2517,8 @@ Skip:
if (gFlagStartScan)
{
gFlagStartScan = false;
gMonitor = false;
#ifdef ENABLE_VOICE
@ -2516,7 +2529,6 @@ Skip:
SCANNER_Start();
gRequestDisplayScreen = DISPLAY_SCANNER;
gFlagStartScan = false;
}
if (gFlagPrepareTX)
@ -2536,6 +2548,7 @@ Skip:
#endif
GUI_SelectNextDisplay(gRequestDisplayScreen);
gRequestDisplayScreen = DISPLAY_INVALID;
gUpdateDisplay = true;
}

View File

@ -33,7 +33,8 @@ typedef enum DTMF_State_t DTMF_State_t;
enum DTMF_CallState_t {
DTMF_CALL_STATE_NONE = 0,
DTMF_CALL_STATE_CALL_OUT,
DTMF_CALL_STATE_RECEIVED
DTMF_CALL_STATE_RECEIVED,
DTMF_CALL_STATE_RECEIVED_STAY
};
enum DTMF_DecodeResponse_t {
@ -60,6 +61,11 @@ enum DTMF_CallMode_t {
DTMF_CALL_MODE_DTMF
};
enum { // seconds
DTMF_HOLD_MIN = 5,
DTMF_HOLD_MAX = 60
};
typedef enum DTMF_CallMode_t DTMF_CallMode_t;
extern char gDTMF_String[15];

View File

@ -119,158 +119,154 @@ void GENERIC_Key_PTT(bool bKeyPressed)
gInputBoxIndex = 0;
if (!bKeyPressed || gSerialConfigCountDown_500ms > 0)
{
//if (gScreenToDisplay == DISPLAY_MAIN)
{
if (gCurrentFunction == FUNCTION_TRANSMIT)
{ // PTT released
if (gCurrentFunction == FUNCTION_TRANSMIT)
{ // we are transmitting .. stop
if (gFlagEndTransmission)
{
if (gFlagEndTransmission)
{
FUNCTION_Select(FUNCTION_FOREGROUND);
}
else
{
APP_EndTransmission();
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
{
FUNCTION_Select(FUNCTION_FOREGROUND);
}
else
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
}
gFlagEndTransmission = false;
#ifdef ENABLE_VOX
gVOX_NoiseDetected = false;
#endif
FUNCTION_Select(FUNCTION_FOREGROUND);
}
else
{
APP_EndTransmission();
if (gEeprom.REPEATER_TAIL_TONE_ELIMINATION == 0)
FUNCTION_Select(FUNCTION_FOREGROUND);
else
gRTTECountdown = gEeprom.REPEATER_TAIL_TONE_ELIMINATION * 10;
}
gFlagEndTransmission = false;
#ifdef ENABLE_VOX
gVOX_NoiseDetected = false;
#endif
RADIO_SetVfoState(VFO_STATE_NORMAL);
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MAIN;
return;
}
return;
}
// PTT pressed
if (gScanStateDir != SCAN_OFF || // frequency/channel scanning
gScreenToDisplay == DISPLAY_SCANNER || // CTCSS/CDCSS scanning
gCssScanMode != CSS_SCAN_MODE_OFF) // " "
{ // we're scanning .. stop
if (gScreenToDisplay == DISPLAY_SCANNER)
{ // CTCSS/CDCSS scanning .. stop
gEeprom.CROSS_BAND_RX_TX = gBackup_CROSS_BAND_RX_TX;
gFlagStopScan = true;
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
gFlagResetVfos = true;
}
else
if (gScanStateDir != SCAN_OFF)
{ // frequency/channel scanning . .stop
SCANNER_Stop();
}
else
if (gCssScanMode != CSS_SCAN_MODE_OFF)
{ // CTCSS/CDCSS scanning .. stop
MENU_StopCssScan();
#ifdef ENABLE_VOICE
gAnotherVoiceID = VOICE_ID_SCANNING_STOP;
#endif
}
goto cancel_tx;
}
#ifdef ENABLE_FMRADIO
if (gFM_ScanState != FM_SCAN_OFF)
{ // FM radio is scanning .. stop
FM_PlayAndUpdate();
#ifdef ENABLE_VOICE
gAnotherVoiceID = VOICE_ID_SCANNING_STOP;
#endif
gRequestDisplayScreen = DISPLAY_FM;
goto cancel_tx;
}
#endif
#ifdef ENABLE_FMRADIO
if (gScreenToDisplay == DISPLAY_FM)
goto start_tx; // listening to the FM radio .. start TX'ing
#endif
if (gCurrentFunction == FUNCTION_TRANSMIT && gRTTECountdown == 0)
{ // already transmitting
gInputBoxIndex = 0;
return;
}
if (gScanStateDir != SCAN_OFF)
{
SCANNER_Stop();
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MAIN;
gPttDebounceCounter = 0;
gPttIsPressed = false;
if (!gDTMF_InputMode && gDTMF_InputBox_Index == 0)
goto start_tx; // wasn't entering a DTMF code .. start TX'ing (maybe)
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MAIN;
// was entering a DTMF string
return;
if (gDTMF_InputBox_Index > 0 || gDTMF_PreviousIndex > 0)
{ // going to transmit a DTMF string
if (gDTMF_InputBox_Index == 0 && gDTMF_PreviousIndex > 0)
gDTMF_InputBox_Index = gDTMF_PreviousIndex; // use the previous DTMF string
if (gDTMF_InputBox_Index < sizeof(gDTMF_InputBox))
gDTMF_InputBox[gDTMF_InputBox_Index] = 0; // NULL term the string
#if 0
// append our DTMF ID to the inputted DTMF code -
// IF the user inputted code is exactly 3 digits long
if (gDTMF_InputBox_Index == 3)
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
else
gDTMF_CallMode = DTMF_CALL_MODE_DTMF;
#else
// append our DTMF ID to the inputted DTMF code -
// IF the user inputted code is exactly 3 digits long and D-DCD is enabled
if (gDTMF_InputBox_Index == 3 && gTxVfo->DTMF_DECODING_ENABLE > 0)
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
else
gDTMF_CallMode = DTMF_CALL_MODE_DTMF;
#endif
// remember the DTMF string
gDTMF_PreviousIndex = gDTMF_InputBox_Index;
strcpy(gDTMF_String, gDTMF_InputBox);
gDTMF_ReplyState = DTMF_REPLY_ANI;
gDTMF_State = DTMF_STATE_0;
}
#ifdef ENABLE_FMRADIO
if (gFM_ScanState == FM_SCAN_OFF)
#endif
DTMF_clear_input_box();
start_tx:
// request start TX
gFlagPrepareTX = true;
goto done;
cancel_tx:
if (gPttIsPressed)
{
if (gCssScanMode == CSS_SCAN_MODE_OFF)
{
#ifdef ENABLE_FMRADIO
if (gScreenToDisplay == DISPLAY_FM)
{
gRequestDisplayScreen = DISPLAY_MAIN;
gInputBoxIndex = 0;
gPttIsPressed = false;
gPttDebounceCounter = 0;
return;
}
#endif
if (gScreenToDisplay != DISPLAY_SCANNER)
{
if (gCurrentFunction == FUNCTION_TRANSMIT && gRTTECountdown == 0)
{
gInputBoxIndex = 0;
return;
}
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MAIN;
if (!gDTMF_InputMode)
{
gFlagPrepareTX = true;
gInputBoxIndex = 0;
return;
}
gDTMF_InputMode = false;
// gUpdateDisplay = true;
if (gDTMF_InputBox_Index > 0 || gDTMF_PreviousIndex > 0)
{
if (gDTMF_InputBox_Index == 0)
gDTMF_InputBox_Index = gDTMF_PreviousIndex;
if (gDTMF_InputBox_Index < sizeof(gDTMF_InputBox))
gDTMF_InputBox[gDTMF_InputBox_Index] = 0;
#if 0
// append our DTMF ID to the inputted DTMF code -
// IF the user inputted code is exactly 3 digits long
if (gDTMF_InputBox_Index == 3)
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
else
#else
// append our DTMF ID to the inputted DTMF code -
// IF the user inputted code is exactly 3 digits long and D-DCD is enabled
if (gDTMF_InputBox_Index == 3 && gTxVfo->DTMF_DECODING_ENABLE > 0)
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
else
#endif
gDTMF_CallMode = DTMF_CALL_MODE_DTMF;
strcpy(gDTMF_String, gDTMF_InputBox);
gDTMF_PreviousIndex = gDTMF_InputBox_Index;
DTMF_clear_input_box();
gDTMF_ReplyState = DTMF_REPLY_ANI;
gDTMF_State = DTMF_STATE_0;
gFlagPrepareTX = true;
}
return;
}
gEeprom.CROSS_BAND_RX_TX = gBackupCROSS_BAND_RX_TX;
gFlagStopScan = true;
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
gFlagResetVfos = true;
gUpdateStatus = true;
}
else
{
MENU_StopCssScan();
if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MENU;
}
gPttIsPressed = false;
gPttWasPressed = true;
}
#ifdef ENABLE_FMRADIO
else
{
FM_PlayAndUpdate();
gRequestDisplayScreen = DISPLAY_FM;
}
#endif
#ifdef ENABLE_VOICE
gAnotherVoiceID = VOICE_ID_SCANNING_STOP;
#endif
gPttWasPressed = true;
done:
gPttDebounceCounter = 0;
if (gScreenToDisplay != DISPLAY_MENU && gRequestDisplayScreen != DISPLAY_FM) // 1of11 .. don't close the menu
gRequestDisplayScreen = DISPLAY_MAIN;
gUpdateStatus = true;
gUpdateDisplay = true;
}

View File

@ -195,12 +195,12 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
gWasFKeyPressed = false;
gFlagStartScan = true;
gScanSingleFrequency = false;
gBackupCROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
gUpdateStatus = true;
if (beep)
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
// if (beep)
// gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
break;
@ -700,7 +700,7 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld)
// scan the CTCSS/DCS code
gFlagStartScan = true;
gScanSingleFrequency = true;
gBackupCROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
}
@ -821,31 +821,25 @@ void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
}
#endif
if (gDTMF_InputMode && bKeyPressed)
if (gDTMF_InputMode && bKeyPressed && !bKeyHeld)
{
if (!bKeyHeld)
{
const char Character = DTMF_GetCharacter(Key);
if (Character != 0xFF)
{ // add key to DTMF string
DTMF_Append(Character);
gKeyInputCountdown = key_input_timeout_500ms;
gRequestDisplayScreen = DISPLAY_MAIN;
gPttWasReleased = true;
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
return;
}
const char Character = DTMF_GetCharacter(Key);
if (Character != 0xFF)
{ // add key to DTMF string
DTMF_Append(Character);
gKeyInputCountdown = key_input_timeout_500ms;
gRequestDisplayScreen = DISPLAY_MAIN;
gPttWasReleased = true;
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
return;
}
}
// TODO: ???
if (Key > KEY_PTT)
{
Key = KEY_SIDE2; // what's this doing ???
}
// if (Key > KEY_PTT)
// {
// Key = KEY_SIDE2; // what's this doing ???
// }
switch (Key)
{

View File

@ -314,8 +314,8 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax)
break;
case MENU_D_HOLD:
*pMin = 5;
*pMax = 60;
*pMin = DTMF_HOLD_MIN;
*pMax = DTMF_HOLD_MAX;
break;
case MENU_D_PRE:
@ -1079,6 +1079,30 @@ void MENU_ShowCurrentSetting(void)
case MENU_D_HOLD:
gSubMenuSelection = gEeprom.DTMF_auto_reset_time;
if (gSubMenuSelection <= DTMF_HOLD_MIN)
gSubMenuSelection = DTMF_HOLD_MIN;
else
if (gSubMenuSelection <= 10)
gSubMenuSelection = 10;
else
if (gSubMenuSelection <= 20)
gSubMenuSelection = 20;
else
if (gSubMenuSelection <= 30)
gSubMenuSelection = 30;
else
if (gSubMenuSelection <= 40)
gSubMenuSelection = 40;
else
if (gSubMenuSelection <= 50)
gSubMenuSelection = 50;
else
if (gSubMenuSelection < DTMF_HOLD_MAX)
gSubMenuSelection = 50;
else
gSubMenuSelection = DTMF_HOLD_MAX;
break;
case MENU_D_PRE:

View File

@ -95,7 +95,7 @@ static void SCANNER_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
case SCAN_EDIT_STATE_NONE:
gRequestDisplayScreen = DISPLAY_MAIN;
gEeprom.CROSS_BAND_RX_TX = gBackupCROSS_BAND_RX_TX;
gEeprom.CROSS_BAND_RX_TX = gBackup_CROSS_BAND_RX_TX;
gUpdateStatus = true;
gFlagStopScan = true;
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
@ -166,8 +166,6 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
{
#if 0
// can't make head nor tail of what's being done here :(
uint32_t Freq250 = FREQUENCY_FloorToStep(gScanFrequency, 250, 0);
uint32_t Freq625 = FREQUENCY_FloorToStep(gScanFrequency, 625, 0);
@ -207,6 +205,7 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
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];
@ -254,12 +253,13 @@ static void SCANNER_Key_MENU(bool bKeyPressed, bool bKeyHeld)
gScannerEditState = SCAN_EDIT_STATE_DONE;
}
gScanCssState = SCAN_CSS_STATE_FOUND;
#ifdef ENABLE_VOICE
gAnotherVoiceID = VOICE_ID_MEMORY_CHANNEL;
#endif
gRequestDisplayScreen = DISPLAY_SCANNER;
gScanCssState = SCAN_CSS_STATE_FOUND;
#ifdef ENABLE_VOICE
gAnotherVoiceID = VOICE_ID_MEMORY_CHANNEL;
#endif
gRequestDisplayScreen = DISPLAY_SCANNER;
gUpdateStatus = true;
break;
@ -452,7 +452,7 @@ void SCANNER_Start(void)
DTMF_clear_RX();
gScanDelay_10ms = scan_delay_10ms;
gScanDelay_10ms = scan_freq_css_delay_10ms;
gScanCssResultCode = 0xFF;
gScanCssResultType = 0xFF;
gScanHitCount = 0;
@ -467,6 +467,7 @@ void SCANNER_Start(void)
g_SquelchLost = false;
gScannerEditState = SCAN_EDIT_STATE_NONE;
gScanProgressIndicator = 0;
// gFlagStartScan = false;
gUpdateStatus = true;
}
@ -475,6 +476,9 @@ void SCANNER_Stop(void)
{
const uint8_t Previous = gRestoreMrChannel;
if (gScanStateDir == SCAN_OFF)
return; // but, but, we weren't !
gScanStateDir = SCAN_OFF;
if (!bScanKeepFrequency)

File diff suppressed because it is too large Load Diff

View File

@ -31,6 +31,7 @@
#include "../font.h"
#include "../frequencies.h"
#include "../helper/battery.h"
#include "../helper/measurements.h"
#include "../misc.h"
#include "../radio.h"
#include "../settings.h"
@ -41,17 +42,19 @@
static const uint8_t DrawingEndY = 40;
static const uint8_t U8RssiMap[] = {
121, 115, 109, 103, 97, 91, 85, 79, 73, 63,
};
static const uint16_t scanStepValues[] = {
1, 10, 50, 100,
250, 500, 625, 833, 1000, 1250, 2500, 10000,
};
static const uint16_t scanStepBWRegValues[] = {
static const uint8_t gStepSettingToIndex[] = {
[STEP_2_5kHz] = 4, [STEP_5_0kHz] = 5, [STEP_6_25kHz] = 6,
[STEP_10_0kHz] = 8, [STEP_12_5kHz] = 9, [STEP_25_0kHz] = 10,
[STEP_8_33kHz] = 7,
};
static const uint16_t scanStepBWRegValues[12] = {
// RX RXw TX BW
// 0b0 000 000 001 01 1000
// 1
@ -122,17 +125,16 @@ typedef enum ScanStep {
} ScanStep;
typedef struct SpectrumSettings {
uint32_t frequencyChangeStep;
StepsCount stepsCount;
ScanStep scanStepIndex;
uint32_t frequencyChangeStep;
uint16_t scanDelay;
uint16_t rssiTriggerLevel;
bool backlightState;
BK4819_FilterBandwidth_t bw;
BK4819_FilterBandwidth_t listenBw;
int dbMin;
int dbMax;
ModulationType modulationType;
bool backlightState;
} SpectrumSettings;
typedef struct KeyboardState {
@ -150,7 +152,7 @@ typedef struct ScanInfo {
} ScanInfo;
typedef struct RegisterSpec {
char *name;
const char *name;
uint8_t num;
uint8_t offset;
uint16_t maxValue;
@ -160,10 +162,56 @@ typedef struct RegisterSpec {
typedef struct PeakInfo {
uint16_t t;
uint16_t rssi;
uint32_t f;
uint8_t i;
uint32_t f;
} PeakInfo;
typedef struct MovingAverage {
uint16_t mean[128];
uint16_t buf[4][128];
uint16_t min, mid, max;
uint16_t t;
} MovingAverage;
typedef struct FreqPreset {
char name[16];
uint32_t fStart;
uint32_t fEnd;
StepsCount stepsCountIndex;
uint8_t stepSizeIndex;
ModulationType modulationType;
BK4819_FilterBandwidth_t listenBW;
} FreqPreset;
static const FreqPreset freqPresets[] = {
{"17m", 1806800, 1831800, STEPS_128, S_STEP_1_0kHz, MOD_USB,
BK4819_FILTER_BW_NARROWER},
{"15m", 2100000, 2145000, STEPS_128, S_STEP_1_0kHz, MOD_USB,
BK4819_FILTER_BW_NARROWER},
{"12m", 2489000, 2514000, STEPS_128, S_STEP_1_0kHz, MOD_USB,
BK4819_FILTER_BW_NARROWER},
{"CB", 2697500, 2785500, STEPS_128, S_STEP_5_0kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"10m", 2800000, 2970000, STEPS_128, S_STEP_1_0kHz, MOD_USB,
BK4819_FILTER_BW_NARROWER},
{"AIR", 11800000, 13500000, STEPS_128, S_STEP_100_0kHz, MOD_AM,
BK4819_FILTER_BW_NARROW},
{"2m", 14400000, 14600000, STEPS_128, S_STEP_25_0kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"JD1", 15175000, 15400000, STEPS_128, S_STEP_25_0kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"JD2", 15500000, 15600000, STEPS_64, S_STEP_25_0kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"LPD", 43307500, 43477500, STEPS_128, S_STEP_25_0kHz, MOD_FM,
BK4819_FILTER_BW_WIDE},
{"PMR", 44600625, 44620000, STEPS_16, S_STEP_12_5kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"FRS/GM 462", 46256250, 46272500, STEPS_16, S_STEP_12_5kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
{"FRS/GM 467", 46756250, 46771250, STEPS_16, S_STEP_12_5kHz, MOD_FM,
BK4819_FILTER_BW_NARROW},
};
void APP_RunSpectrum(void);
#endif /* ifndef SPECTRUM_H */