0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-28 14:21:25 +03:00

Fix F+3 and F+* search freq step size when saving result

This commit is contained in:
OneOfEleven 2023-10-13 15:12:32 +01:00
parent bc416c7433
commit 7f7c9490eb
30 changed files with 652 additions and 571 deletions

View File

@ -88,10 +88,10 @@ void ACTION_Monitor(void)
g_monitor_enabled = false; g_monitor_enabled = false;
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ {
g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_scan_pause_mode = true; g_scan_pause_mode = true;
} }
@ -171,7 +171,7 @@ void ACTION_Scan(bool bRestart)
} }
#endif #endif
if (g_screen_to_display != DISPLAY_SCANNER) if (g_screen_to_display != DISPLAY_SEARCH)
{ // not scanning { // not scanning
g_monitor_enabled = false; g_monitor_enabled = false;
@ -189,10 +189,10 @@ void ACTION_Scan(bool bRestart)
{ {
GUI_SelectNextDisplay(DISPLAY_MAIN); GUI_SelectNextDisplay(DISPLAY_MAIN);
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ // already scanning { // already scanning
if (g_next_channel <= USER_CHANNEL_LAST) if (g_scan_next_channel <= USER_CHANNEL_LAST)
{ // channel mode { // channel mode
// keep scanning but toggle between scan lists // keep scanning but toggle between scan lists
@ -201,14 +201,14 @@ void ACTION_Scan(bool bRestart)
// jump to the next channel // jump to the next channel
CHANNEL_Next(true, g_scan_state_dir); CHANNEL_Next(true, g_scan_state_dir);
g_scan_pause_delay_in_10ms = 1; g_scan_pause_delay_in_10ms = 1;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_update_status = true; g_update_status = true;
} }
else else
{ // stop scanning { // stop scanning
SCANNER_Stop(); SCAN_Stop();
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_SCANNING_STOP; g_another_voice_id = VOICE_ID_SCANNING_STOP;
@ -218,7 +218,7 @@ void ACTION_Scan(bool bRestart)
else else
{ // start scanning { // start scanning
CHANNEL_Next(true, SCAN_FWD); CHANNEL_Next(true, SCAN_STATE_DIR_FORWARD);
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN);
@ -236,14 +236,14 @@ void ACTION_Scan(bool bRestart)
} }
else else
// if (!bRestart) // if (!bRestart)
if (!bRestart && g_next_channel <= USER_CHANNEL_LAST) if (!bRestart && g_scan_next_channel <= USER_CHANNEL_LAST)
{ // channel mode, keep scanning but toggle between scan lists { // channel mode, keep scanning but toggle between scan lists
g_eeprom.scan_list_default = (g_eeprom.scan_list_default + 1) % 3; g_eeprom.scan_list_default = (g_eeprom.scan_list_default + 1) % 3;
// jump to the next channel // jump to the next channel
CHANNEL_Next(true, g_scan_state_dir); CHANNEL_Next(true, g_scan_state_dir);
g_scan_pause_delay_in_10ms = 1; g_scan_pause_delay_in_10ms = 1;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_update_status = true; g_update_status = true;
} }
@ -251,7 +251,7 @@ void ACTION_Scan(bool bRestart)
{ // stop scanning { // stop scanning
g_monitor_enabled = false; g_monitor_enabled = false;
SCANNER_Stop(); SCAN_Stop();
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_SCANNING_STOP; g_another_voice_id = VOICE_ID_SCANNING_STOP;

View File

@ -84,7 +84,7 @@ void AIRCOPY_start_FSK_tx(const uint8_t request_packet)
// TX the packet // TX the packet
RADIO_SetTxParameters(); RADIO_SetTxParameters();
BK4819_SetupPowerAmplifier(0, g_current_vfo->pTX->frequency); // VERY low TX power BK4819_SetupPowerAmplifier(0, g_current_vfo->p_tx->frequency); // VERY low TX power
// turn the RED LED on // turn the RED LED on
BK4819_set_GPIO_pin(BK4819_GPIO1_PIN29_RED, true); BK4819_set_GPIO_pin(BK4819_GPIO1_PIN29_RED, true);

338
app/app.c
View File

@ -97,14 +97,14 @@ static void APP_CheckForIncoming(void)
// squelch is open // squelch is open
if (g_scan_state_dir == SCAN_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF)
{ // not RF scanning { // not RF scanning
if (g_css_scan_mode != CSS_SCAN_MODE_OFF && g_rx_reception_mode == RX_MODE_NONE) if (g_css_scan_mode != CSS_SCAN_MODE_OFF && g_rx_reception_mode == RX_MODE_NONE)
{ // CTCSS/DTS scanning { // CTCSS/DTS scanning
g_scan_pause_delay_in_10ms = scan_pause_delay_in_5_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_5_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_rx_reception_mode = RX_MODE_DETECTED; g_rx_reception_mode = RX_MODE_DETECTED;
} }
@ -169,7 +169,7 @@ static void APP_CheckForIncoming(void)
} }
g_scan_pause_delay_in_10ms = scan_pause_delay_in_3_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_3_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
} }
g_rx_reception_mode = RX_MODE_DETECTED; g_rx_reception_mode = RX_MODE_DETECTED;
@ -202,7 +202,7 @@ static void APP_HandleIncoming(void)
return; return;
} }
flag = (g_scan_state_dir == SCAN_OFF && g_current_code_type == CODE_TYPE_NONE); flag = (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_current_code_type == CODE_TYPE_NONE);
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_count_down_10ms > 0) if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_count_down_10ms > 0)
@ -212,13 +212,13 @@ static void APP_HandleIncoming(void)
} }
#endif #endif
if (g_CTCSS_lost && g_current_code_type == CODE_TYPE_CONTINUOUS_TONE) if (g_ctcss_lost && g_current_code_type == CODE_TYPE_CONTINUOUS_TONE)
{ {
flag = true; flag = true;
g_found_CTCSS = false; g_found_CTCSS = false;
} }
if (g_CDCSS_lost && g_CDCSS_code_type == CDCSS_POSITIVE_CODE && (g_current_code_type == CODE_TYPE_DIGITAL || g_current_code_type == CODE_TYPE_REVERSE_DIGITAL)) if (g_cdcss_lost && g_cdcss_code_type == CDCSS_POSITIVE_CODE && (g_current_code_type == CODE_TYPE_DIGITAL || g_current_code_type == CODE_TYPE_REVERSE_DIGITAL))
{ {
g_found_CDCSS = false; g_found_CDCSS = false;
} }
@ -226,7 +226,7 @@ static void APP_HandleIncoming(void)
if (!flag) if (!flag)
return; return;
if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF)
{ // not scanning { // not scanning
if (g_rx_vfo->dtmf_decoding_enable || g_setting_killed) if (g_rx_vfo->dtmf_decoding_enable || g_setting_killed)
{ // DTMF DCD is enabled { // DTMF DCD is enabled
@ -270,7 +270,7 @@ static void APP_HandleReceive(void)
goto Skip; goto Skip;
} }
if (g_scan_state_dir != SCAN_OFF && IS_FREQ_CHANNEL(g_next_channel)) if (g_scan_state_dir != SCAN_STATE_DIR_OFF && IS_FREQ_CHANNEL(g_scan_next_channel))
{ {
if (g_squelch_lost) if (g_squelch_lost)
return; return;
@ -320,16 +320,16 @@ static void APP_HandleReceive(void)
case CODE_TYPE_NONE: case CODE_TYPE_NONE:
if (g_eeprom.squelch_level) if (g_eeprom.squelch_level)
{ {
if (g_CxCSS_tail_found) if (g_cxcss_tail_found)
{ {
Mode = END_OF_RX_MODE_TTE; Mode = END_OF_RX_MODE_TTE;
g_CxCSS_tail_found = false; g_cxcss_tail_found = false;
} }
} }
break; break;
case CODE_TYPE_CONTINUOUS_TONE: case CODE_TYPE_CONTINUOUS_TONE:
if (g_CTCSS_lost) if (g_ctcss_lost)
{ {
g_found_CTCSS = false; g_found_CTCSS = false;
} }
@ -340,16 +340,16 @@ static void APP_HandleReceive(void)
g_found_CTCSS_count_down_10ms = 100; // 1 sec g_found_CTCSS_count_down_10ms = 100; // 1 sec
} }
if (g_CxCSS_tail_found) if (g_cxcss_tail_found)
{ {
Mode = END_OF_RX_MODE_TTE; Mode = END_OF_RX_MODE_TTE;
g_CxCSS_tail_found = false; g_cxcss_tail_found = false;
} }
break; break;
case CODE_TYPE_DIGITAL: case CODE_TYPE_DIGITAL:
case CODE_TYPE_REVERSE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL:
if (g_CDCSS_lost && g_CDCSS_code_type == CDCSS_POSITIVE_CODE) if (g_cdcss_lost && g_cdcss_code_type == CDCSS_POSITIVE_CODE)
{ {
g_found_CDCSS = false; g_found_CDCSS = false;
} }
@ -360,12 +360,12 @@ static void APP_HandleReceive(void)
g_found_CDCSS_count_down_10ms = 100; // 1 sec g_found_CDCSS_count_down_10ms = 100; // 1 sec
} }
if (g_CxCSS_tail_found) if (g_cxcss_tail_found)
{ {
if (BK4819_GetCTCType() == 1) if (BK4819_GetCTCType() == 1)
Mode = END_OF_RX_MODE_TTE; Mode = END_OF_RX_MODE_TTE;
g_CxCSS_tail_found = false; g_cxcss_tail_found = false;
} }
break; break;
@ -405,7 +405,7 @@ Skip:
g_update_display = true; g_update_display = true;
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ {
switch (g_eeprom.scan_resume_mode) switch (g_eeprom.scan_resume_mode)
{ {
@ -414,11 +414,11 @@ Skip:
case SCAN_RESUME_CO: case SCAN_RESUME_CO:
g_scan_pause_delay_in_10ms = scan_pause_delay_in_7_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_7_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
break; break;
case SCAN_RESUME_SE: case SCAN_RESUME_SE:
SCANNER_Stop(); SCAN_Stop();
break; break;
} }
} }
@ -494,7 +494,7 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
if (g_setting_backlight_on_tx_rx >= 2) if (g_setting_backlight_on_tx_rx >= 2)
backlight_turn_on(); backlight_turn_on();
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ {
switch (g_eeprom.scan_resume_mode) switch (g_eeprom.scan_resume_mode)
{ {
@ -502,7 +502,7 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
if (!g_scan_pause_mode) if (!g_scan_pause_mode)
{ {
g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_1_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_scan_pause_mode = true; g_scan_pause_mode = true;
} }
break; break;
@ -510,7 +510,7 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
case SCAN_RESUME_CO: case SCAN_RESUME_CO:
case SCAN_RESUME_SE: case SCAN_RESUME_SE:
g_scan_pause_delay_in_10ms = 0; g_scan_pause_delay_in_10ms = 0;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
break; break;
} }
@ -521,8 +521,8 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_is_noaa_mode) if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_is_noaa_mode)
{ {
g_rx_vfo->channel_save = g_noaa_channel + NOAA_CHANNEL_FIRST; g_rx_vfo->channel_save = g_noaa_channel + NOAA_CHANNEL_FIRST;
g_rx_vfo->pRX->frequency = NoaaFrequencyTable[g_noaa_channel]; g_rx_vfo->p_rx->frequency = NOAA_FREQUENCY_TABLE[g_noaa_channel];
g_rx_vfo->pTX->frequency = NoaaFrequencyTable[g_noaa_channel]; g_rx_vfo->p_tx->frequency = NOAA_FREQUENCY_TABLE[g_noaa_channel];
g_eeprom.screen_channel[chan] = g_rx_vfo->channel_save; g_eeprom.screen_channel[chan] = g_rx_vfo->channel_save;
g_noaa_count_down_10ms = 500; // 5 sec g_noaa_count_down_10ms = 500; // 5 sec
g_schedule_noaa = false; g_schedule_noaa = false;
@ -532,7 +532,7 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
if (g_css_scan_mode != CSS_SCAN_MODE_OFF) if (g_css_scan_mode != CSS_SCAN_MODE_OFF)
g_css_scan_mode = CSS_SCAN_MODE_FOUND; g_css_scan_mode = CSS_SCAN_MODE_FOUND;
if (g_scan_state_dir == SCAN_OFF && if (g_scan_state_dir == SCAN_STATE_DIR_OFF &&
g_css_scan_mode == CSS_SCAN_MODE_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF &&
g_eeprom.dual_watch != DUAL_WATCH_OFF) g_eeprom.dual_watch != DUAL_WATCH_OFF)
{ // not scanning, dual watch is enabled { // not scanning, dual watch is enabled
@ -632,6 +632,51 @@ uint32_t APP_SetFrequencyByStep(vfo_info_t *pInfo, int8_t Step)
return Frequency; return Frequency;
} }
void SCAN_Stop(void)
{
const uint8_t Previous = g_scan_restore_channel;
if (g_scan_state_dir == SCAN_STATE_DIR_OFF)
return; // but, but, we weren't doing anything !
g_scan_state_dir = SCAN_STATE_DIR_OFF;
if (!g_scan_keep_frequency)
{
if (g_scan_next_channel <= USER_CHANNEL_LAST)
{
g_eeprom.user_channel[g_eeprom.rx_vfo] = g_scan_restore_channel;
g_eeprom.screen_channel[g_eeprom.rx_vfo] = Previous;
RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD);
}
else
{
g_rx_vfo->freq_config_rx.frequency = g_scan_restore_frequency;
RADIO_ApplyOffset(g_rx_vfo);
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
}
RADIO_SetupRegisters(true);
g_update_display = true;
return;
}
if (g_rx_vfo->channel_save > USER_CHANNEL_LAST)
{
RADIO_ApplyOffset(g_rx_vfo);
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
SETTINGS_SaveChannel(g_rx_vfo->channel_save, g_eeprom.rx_vfo, g_rx_vfo, 1);
return;
}
SETTINGS_SaveVfoIndices();
g_update_status = true;
}
static void FREQ_NextChannel(void) static void FREQ_NextChannel(void)
{ {
g_rx_vfo->freq_config_rx.frequency = APP_SetFrequencyByStep(g_rx_vfo, g_scan_state_dir); g_rx_vfo->freq_config_rx.frequency = APP_SetFrequencyByStep(g_rx_vfo, g_scan_state_dir);
@ -656,7 +701,7 @@ static void USER_NextChannel(void)
const bool enabled = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_enabled[g_eeprom.scan_list_default] : true; const bool enabled = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_enabled[g_eeprom.scan_list_default] : true;
const int chan1 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch1[g_eeprom.scan_list_default] : -1; const int chan1 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch1[g_eeprom.scan_list_default] : -1;
const int chan2 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch2[g_eeprom.scan_list_default] : -1; const int chan2 = (g_eeprom.scan_list_default < 2) ? g_eeprom.scan_list_priority_ch2[g_eeprom.scan_list_default] : -1;
const unsigned int prev_chan = g_next_channel; const unsigned int prev_chan = g_scan_next_channel;
unsigned int chan = 0; unsigned int chan = 0;
if (enabled) if (enabled)
@ -664,17 +709,17 @@ static void USER_NextChannel(void)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
switch (g_current_scan_list) switch (g_scan_current_scan_list)
{ {
case SCAN_NEXT_CHAN_SCANLIST1: case SCAN_NEXT_CHAN_SCANLIST1:
prevChannel = g_next_channel; prevChannel = g_scan_next_channel;
if (chan1 >= 0) if (chan1 >= 0)
{ {
if (RADIO_CheckValidChannel(chan1, false, 0)) if (RADIO_CheckValidChannel(chan1, false, 0))
{ {
g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; g_scan_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1;
g_next_channel = chan1; g_scan_next_channel = chan1;
break; break;
} }
} }
@ -684,8 +729,8 @@ static void USER_NextChannel(void)
{ {
if (RADIO_CheckValidChannel(chan2, false, 0)) if (RADIO_CheckValidChannel(chan2, false, 0))
{ {
g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST2; g_scan_current_scan_list = SCAN_NEXT_CHAN_SCANLIST2;
g_next_channel = chan2; g_scan_next_channel = chan2;
break; break;
} }
} }
@ -699,16 +744,16 @@ static void USER_NextChannel(void)
// chan = g_eeprom.screen_channel[chan]; // chan = g_eeprom.screen_channel[chan];
// if (chan <= USER_CHANNEL_LAST) // if (chan <= USER_CHANNEL_LAST)
// { // {
// g_current_scan_list = SCAN_NEXT_CHAN_DUAL_WATCH; // g_scan_current_scan_list = SCAN_NEXT_CHAN_DUAL_WATCH;
// g_next_channel = chan; // g_scan_next_channel = chan;
// break; // break;
// } // }
// } // }
default: default:
case SCAN_NEXT_CHAN_USER: case SCAN_NEXT_CHAN_USER:
g_current_scan_list = SCAN_NEXT_CHAN_USER; g_scan_current_scan_list = SCAN_NEXT_CHAN_USER;
g_next_channel = prevChannel; g_scan_next_channel = prevChannel;
chan = 0xff; chan = 0xff;
break; break;
} }
@ -718,7 +763,7 @@ static void USER_NextChannel(void)
if (!enabled || chan == 0xff) if (!enabled || chan == 0xff)
{ {
chan = RADIO_FindNextChannel(g_next_channel + g_scan_state_dir, g_scan_state_dir, (g_eeprom.scan_list_default < 2) ? true : false, g_eeprom.scan_list_default); chan = RADIO_FindNextChannel(g_scan_next_channel + g_scan_state_dir, g_scan_state_dir, (g_eeprom.scan_list_default < 2) ? true : false, g_eeprom.scan_list_default);
if (chan == 0xFF) if (chan == 0xFF)
{ // no valid channel found { // no valid channel found
@ -726,13 +771,13 @@ static void USER_NextChannel(void)
// return; // return;
} }
g_next_channel = chan; g_scan_next_channel = chan;
} }
if (g_next_channel != prev_chan) if (g_scan_next_channel != prev_chan)
{ {
g_eeprom.user_channel[g_eeprom.rx_vfo] = g_next_channel; g_eeprom.user_channel[g_eeprom.rx_vfo] = g_scan_next_channel;
g_eeprom.screen_channel[g_eeprom.rx_vfo] = g_next_channel; g_eeprom.screen_channel[g_eeprom.rx_vfo] = g_scan_next_channel;
RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD); RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD);
RADIO_SetupRegisters(true); RADIO_SetupRegisters(true);
@ -749,14 +794,14 @@ static void USER_NextChannel(void)
g_scan_keep_frequency = false; g_scan_keep_frequency = false;
if (enabled) if (enabled)
if (++g_current_scan_list >= SCAN_NEXT_NUM) if (++g_scan_current_scan_list >= SCAN_NEXT_NUM)
g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; // back round we go g_scan_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; // back round we go
} }
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
static void NOAA_IncreaseChannel(void) static void NOAA_IncreaseChannel(void)
{ {
if (++g_noaa_channel >= ARRAY_SIZE(NoaaFrequencyTable)) if (++g_noaa_channel >= ARRAY_SIZE(NOAA_FREQUENCY_TABLE))
g_noaa_channel = 0; g_noaa_channel = 0;
} }
#endif #endif
@ -800,7 +845,7 @@ static void DUALWATCH_Alternate(void)
void APP_CheckRadioInterrupts(void) void APP_CheckRadioInterrupts(void)
{ {
if (g_screen_to_display == DISPLAY_SCANNER) if (g_screen_to_display == DISPLAY_SEARCH)
return; return;
while (BK4819_ReadRegister(BK4819_REG_0C) & 1u) while (BK4819_ReadRegister(BK4819_REG_0C) & 1u)
@ -820,7 +865,7 @@ void APP_CheckRadioInterrupts(void)
// 3 = 240deg phase shift // 3 = 240deg phase shift
// const uint8_t ctcss_shift = BK4819_GetCTCShift(); // const uint8_t ctcss_shift = BK4819_GetCTCShift();
// if (ctcss_shift > 0) // if (ctcss_shift > 0)
// g_CTCSS_lost = true; // g_ctcss_lost = true;
if (interrupt_status_bits & BK4819_REG_02_DTMF_5TONE_FOUND) if (interrupt_status_bits & BK4819_REG_02_DTMF_5TONE_FOUND)
{ // save the RX'ed DTMF character { // save the RX'ed DTMF character
@ -862,22 +907,22 @@ void APP_CheckRadioInterrupts(void)
} }
if (interrupt_status_bits & BK4819_REG_02_CxCSS_TAIL) if (interrupt_status_bits & BK4819_REG_02_CxCSS_TAIL)
g_CxCSS_tail_found = true; g_cxcss_tail_found = true;
if (interrupt_status_bits & BK4819_REG_02_CDCSS_LOST) if (interrupt_status_bits & BK4819_REG_02_CDCSS_LOST)
{ {
g_CDCSS_lost = true; g_cdcss_lost = true;
g_CDCSS_code_type = BK4819_get_CDCSS_code_type(); g_cdcss_code_type = BK4819_get_CDCSS_code_type();
} }
if (interrupt_status_bits & BK4819_REG_02_CDCSS_FOUND) if (interrupt_status_bits & BK4819_REG_02_CDCSS_FOUND)
g_CDCSS_lost = false; g_cdcss_lost = false;
if (interrupt_status_bits & BK4819_REG_02_CTCSS_LOST) if (interrupt_status_bits & BK4819_REG_02_CTCSS_LOST)
g_CTCSS_lost = true; g_ctcss_lost = true;
if (interrupt_status_bits & BK4819_REG_02_CTCSS_FOUND) if (interrupt_status_bits & BK4819_REG_02_CTCSS_FOUND)
g_CTCSS_lost = false; g_ctcss_lost = false;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
if (interrupt_status_bits & BK4819_REG_02_VOX_LOST) if (interrupt_status_bits & BK4819_REG_02_VOX_LOST)
@ -942,7 +987,7 @@ void APP_EndTransmission(void)
RADIO_SendEndOfTransmission(); RADIO_SendEndOfTransmission();
if (g_current_vfo->pTX->code_type != CODE_TYPE_NONE) if (g_current_vfo->p_tx->code_type != CODE_TYPE_NONE)
{ // CTCSS/DCS is enabled { // CTCSS/DCS is enabled
//if (g_eeprom.tail_note_elimination && g_eeprom.repeater_tail_tone_elimination > 0) //if (g_eeprom.tail_note_elimination && g_eeprom.repeater_tail_tone_elimination > 0)
@ -988,7 +1033,7 @@ void APP_EndTransmission(void)
if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR) if (g_current_function == FUNCTION_RECEIVE || g_current_function == FUNCTION_MONITOR)
return; return;
if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF)
return; return;
if (g_vox_noise_detected) if (g_vox_noise_detected)
@ -1084,13 +1129,13 @@ void APP_Update(void)
if (g_voice_write_index == 0) if (g_voice_write_index == 0)
#endif #endif
{ {
if (g_screen_to_display != DISPLAY_SCANNER && if (g_screen_to_display != DISPLAY_SEARCH &&
g_scan_state_dir != SCAN_OFF && g_scan_state_dir != SCAN_STATE_DIR_OFF &&
g_schedule_scan_listen && g_scan_schedule_scan_listen &&
!g_ptt_is_pressed) !g_ptt_is_pressed)
{ // scanning { // scanning
if (IS_FREQ_CHANNEL(g_next_channel)) if (IS_FREQ_CHANNEL(g_scan_next_channel))
{ {
if (g_current_function == FUNCTION_INCOMING) if (g_current_function == FUNCTION_INCOMING)
APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true); APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true);
@ -1107,19 +1152,19 @@ void APP_Update(void)
g_scan_pause_mode = false; g_scan_pause_mode = false;
g_rx_reception_mode = RX_MODE_NONE; g_rx_reception_mode = RX_MODE_NONE;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
} }
} }
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_schedule_scan_listen && g_voice_write_index == 0) if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_scan_schedule_scan_listen && g_voice_write_index == 0)
#else #else
if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_schedule_scan_listen) if (g_css_scan_mode == CSS_SCAN_MODE_SCANNING && g_scan_schedule_scan_listen)
#endif #endif
{ {
MENU_SelectNextCode(); MENU_SelectNextCode();
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
} }
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
@ -1139,7 +1184,7 @@ void APP_Update(void)
#endif #endif
// toggle between the VFO's if dual watch is enabled // toggle between the VFO's if dual watch is enabled
if (g_screen_to_display != DISPLAY_SCANNER && g_eeprom.dual_watch != DUAL_WATCH_OFF) if (g_screen_to_display != DISPLAY_SEARCH && g_eeprom.dual_watch != DUAL_WATCH_OFF)
{ {
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
//UART_SendText("dual watch\r\n"); //UART_SendText("dual watch\r\n");
@ -1151,7 +1196,7 @@ void APP_Update(void)
{ {
if (g_schedule_dual_watch) if (g_schedule_dual_watch)
{ {
if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF)
{ {
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
if (!g_fm_radio_mode) if (!g_fm_radio_mode)
@ -1204,7 +1249,7 @@ void APP_Update(void)
g_ptt_is_pressed || g_ptt_is_pressed ||
g_key_held || g_key_held ||
g_eeprom.battery_save == 0 || g_eeprom.battery_save == 0 ||
g_scan_state_dir != SCAN_OFF || g_scan_state_dir != SCAN_STATE_DIR_OFF ||
g_css_scan_mode != CSS_SCAN_MODE_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF ||
g_screen_to_display != DISPLAY_MAIN || g_screen_to_display != DISPLAY_MAIN ||
g_dtmf_call_state != DTMF_CALL_STATE_NONE) g_dtmf_call_state != DTMF_CALL_STATE_NONE)
@ -1230,7 +1275,7 @@ void APP_Update(void)
g_ptt_is_pressed || g_ptt_is_pressed ||
g_key_held || g_key_held ||
g_eeprom.battery_save == 0 || g_eeprom.battery_save == 0 ||
g_scan_state_dir != SCAN_OFF || g_scan_state_dir != SCAN_STATE_DIR_OFF ||
g_css_scan_mode != CSS_SCAN_MODE_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF ||
g_screen_to_display != DISPLAY_MAIN || g_screen_to_display != DISPLAY_MAIN ||
g_dtmf_call_state != DTMF_CALL_STATE_NONE) g_dtmf_call_state != DTMF_CALL_STATE_NONE)
@ -1266,7 +1311,7 @@ void APP_Update(void)
#endif #endif
if (g_eeprom.dual_watch != DUAL_WATCH_OFF && if (g_eeprom.dual_watch != DUAL_WATCH_OFF &&
g_scan_state_dir == SCAN_OFF && g_scan_state_dir == SCAN_STATE_DIR_OFF &&
g_css_scan_mode == CSS_SCAN_MODE_OFF) g_css_scan_mode == CSS_SCAN_MODE_OFF)
{ // dual watch mode, toggle between the two VFO's { // dual watch mode, toggle between the two VFO's
DUALWATCH_Alternate(); DUALWATCH_Alternate();
@ -1281,7 +1326,7 @@ void APP_Update(void)
} }
else else
if (g_eeprom.dual_watch == DUAL_WATCH_OFF || if (g_eeprom.dual_watch == DUAL_WATCH_OFF ||
g_scan_state_dir != SCAN_OFF || g_scan_state_dir != SCAN_STATE_DIR_OFF ||
g_css_scan_mode != CSS_SCAN_MODE_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF ||
g_update_rssi) g_update_rssi)
{ // dual watch mode, go back to sleep { // dual watch mode, go back to sleep
@ -1723,46 +1768,46 @@ void APP_TimeSlice10ms(void)
} }
#endif #endif
if (g_screen_to_display == DISPLAY_SCANNER) if (g_screen_to_display == DISPLAY_SEARCH)
{ {
uint32_t Result; uint32_t Result;
int32_t Delta; int32_t Delta;
uint16_t CtcssFreq; uint16_t CtcssFreq;
BK4819_CSS_scan_result_t ScanResult; BK4819_CSS_scan_result_t ScanResult;
g_scan_freq_css_timer_10ms++; g_search_freq_css_timer_10ms++;
if (g_scan_delay_10ms > 0) if (g_search_delay_10ms > 0)
{ {
if (--g_scan_delay_10ms > 0) if (--g_search_delay_10ms > 0)
{ {
APP_CheckKeys(); APP_CheckKeys();
return; return;
} }
} }
if (g_scanner_edit_state != SCAN_EDIT_STATE_NONE) if (g_search_edit_state != SEARCH_EDIT_STATE_NONE)
{ // waiting for user input choice { // waiting for user input choice
APP_CheckKeys(); APP_CheckKeys();
return; return;
} }
g_update_display = true; g_update_display = true;
GUI_SelectNextDisplay(DISPLAY_SCANNER); GUI_SelectNextDisplay(DISPLAY_SEARCH);
switch (g_scan_css_state) switch (g_search_css_state)
{ {
case SCAN_CSS_STATE_OFF: case SEARCH_CSS_STATE_OFF:
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms) if (g_search_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
{ // FREQ/CTCSS/CDCSS search timeout { // FREQ/CTCSS/CDCSS search timeout
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ // FREQ search timeout { // FREQ search timeout
#ifdef ENABLE_FREQ_SEARCH_TIMEOUT #ifdef ENABLE_FREQ_SEARCH_TIMEOUT
BK4819_DisableFrequencyScan(); BK4819_DisableFrequencyScan();
g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED; g_search_css_state = SEARCH_CSS_STATE_FREQ_FAILED;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1775,7 +1820,7 @@ void APP_TimeSlice10ms(void)
#ifdef ENABLE_CODE_SEARCH_TIMEOUT #ifdef ENABLE_CODE_SEARCH_TIMEOUT
BK4819_DisableFrequencyScan(); BK4819_DisableFrequencyScan();
g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED; g_search_css_state = SEARCH_CSS_STATE_FREQ_FAILED;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1789,14 +1834,14 @@ void APP_TimeSlice10ms(void)
break; // still scanning break; // still scanning
// accept only within 1kHz // accept only within 1kHz
Delta = Result - g_scan_frequency; Delta = Result - g_search_frequency;
g_scan_hit_count = (abs(Delta) < 100) ? g_scan_hit_count + 1 : 0; g_search_hit_count = (abs(Delta) < 100) ? g_search_hit_count + 1 : 0;
BK4819_DisableFrequencyScan(); BK4819_DisableFrequencyScan();
g_scan_frequency = Result; g_search_frequency = Result;
if (g_scan_hit_count < 3) if (g_search_hit_count < 3)
{ // keep scanning for an RF carrier { // keep scanning for an RF carrier
BK4819_EnableFrequencyScan(); BK4819_EnableFrequencyScan();
} }
@ -1804,32 +1849,32 @@ void APP_TimeSlice10ms(void)
{ // RF carrier found { // RF carrier found
// stop RF the scan and move on too the CTCSS/CDCSS scan // stop RF the scan and move on too the CTCSS/CDCSS scan
BK4819_SetScanFrequency(g_scan_frequency); BK4819_SetScanFrequency(g_search_frequency);
g_scan_css_result_type = CODE_TYPE_NONE; g_search_css_result_type = CODE_TYPE_NONE;
g_scan_css_result_code = 0xff; g_search_css_result_code = 0xff;
g_scan_hit_count = 0; g_search_hit_count = 0;
g_scan_use_css_result = false; g_search_use_css_result = false;
g_scan_freq_css_timer_10ms = 0; g_search_freq_css_timer_10ms = 0;
g_scan_css_state = SCAN_CSS_STATE_SCANNING; g_search_css_state = SEARCH_CSS_STATE_SCANNING;
GUI_SelectNextDisplay(DISPLAY_SCANNER); GUI_SelectNextDisplay(DISPLAY_SEARCH);
g_update_status = true; g_update_status = true;
g_update_display = true; g_update_display = true;
} }
g_scan_delay_10ms = scan_freq_css_delay_10ms; g_search_delay_10ms = scan_freq_css_delay_10ms;
break; break;
case SCAN_CSS_STATE_SCANNING: case SEARCH_CSS_STATE_SCANNING:
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms) if (g_search_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
{ // CTCSS/CDCSS search timeout { // CTCSS/CDCSS search timeout
#if defined(ENABLE_CODE_SEARCH_TIMEOUT) #if defined(ENABLE_CODE_SEARCH_TIMEOUT)
BK4819_Disable(); BK4819_Disable();
g_scan_css_state = SCAN_CSS_STATE_FAILED; g_search_css_state = SEARCH_CSS_STATE_FAILED;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1837,10 +1882,10 @@ void APP_TimeSlice10ms(void)
break; break;
#else #else
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ {
BK4819_Disable(); BK4819_Disable();
g_scan_css_state = SCAN_CSS_STATE_FAILED; g_search_css_state = SEARCH_CSS_STATE_FAILED;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1861,10 +1906,10 @@ void APP_TimeSlice10ms(void)
const uint8_t Code = DCS_GetCdcssCode(Result); const uint8_t Code = DCS_GetCdcssCode(Result);
if (Code != 0xFF) if (Code != 0xFF)
{ {
g_scan_css_result_code = Code; g_search_css_result_code = Code;
g_scan_css_result_type = CODE_TYPE_DIGITAL; g_search_css_result_type = CODE_TYPE_DIGITAL;
g_scan_css_state = SCAN_CSS_STATE_FOUND; g_search_css_state = SEARCH_CSS_STATE_FOUND;
g_scan_use_css_result = true; g_search_use_css_result = true;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1877,13 +1922,13 @@ void APP_TimeSlice10ms(void)
const uint8_t code = DCS_GetCtcssCode(CtcssFreq); const uint8_t code = DCS_GetCtcssCode(CtcssFreq);
if (code != 0xFF) if (code != 0xFF)
{ {
if (code == g_scan_css_result_code && if (code == g_search_css_result_code &&
g_scan_css_result_type == CODE_TYPE_CONTINUOUS_TONE) g_search_css_result_type == CODE_TYPE_CONTINUOUS_TONE)
{ {
if (++g_scan_hit_count >= 2) if (++g_search_hit_count >= 2)
{ {
g_scan_css_state = SCAN_CSS_STATE_FOUND; g_search_css_state = SEARCH_CSS_STATE_FOUND;
g_scan_use_css_result = true; g_search_use_css_result = true;
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
g_update_status = true; g_update_status = true;
@ -1891,26 +1936,26 @@ void APP_TimeSlice10ms(void)
} }
} }
else else
g_scan_hit_count = 0; g_search_hit_count = 0;
g_scan_css_result_type = CODE_TYPE_CONTINUOUS_TONE; g_search_css_result_type = CODE_TYPE_CONTINUOUS_TONE;
g_scan_css_result_code = code; g_search_css_result_code = code;
} }
} }
if (g_scan_css_state == SCAN_CSS_STATE_OFF || if (g_search_css_state == SEARCH_CSS_STATE_OFF ||
g_scan_css_state == SCAN_CSS_STATE_SCANNING) g_search_css_state == SEARCH_CSS_STATE_SCANNING)
{ // re-start scan { // re-start scan
BK4819_SetScanFrequency(g_scan_frequency); BK4819_SetScanFrequency(g_search_frequency);
g_scan_delay_10ms = scan_freq_css_delay_10ms; g_search_delay_10ms = scan_freq_css_delay_10ms;
} }
GUI_SelectNextDisplay(DISPLAY_SCANNER); GUI_SelectNextDisplay(DISPLAY_SEARCH);
break; break;
//case SCAN_CSS_STATE_FOUND: //case SEARCH_CSS_STATE_FOUND:
//case SCAN_CSS_STATE_FAILED: //case SEARCH_CSS_STATE_FAILED:
//case SCAN_CSS_STATE_REPEAT: //case SEARCH_CSS_STATE_REPEAT:
default: default:
break; break;
} }
@ -2077,11 +2122,11 @@ void APP_TimeSlice500ms(void)
#endif #endif
{ {
if (g_css_scan_mode == CSS_SCAN_MODE_OFF && if (g_css_scan_mode == CSS_SCAN_MODE_OFF &&
g_scan_state_dir == SCAN_OFF && g_scan_state_dir == SCAN_STATE_DIR_OFF &&
(g_screen_to_display != DISPLAY_SCANNER || (g_screen_to_display != DISPLAY_SEARCH ||
g_scan_css_state == SCAN_CSS_STATE_FOUND || g_search_css_state == SEARCH_CSS_STATE_FOUND ||
g_scan_css_state == SCAN_CSS_STATE_FAILED || g_search_css_state == SEARCH_CSS_STATE_FAILED ||
g_scan_css_state == SCAN_CSS_STATE_REPEAT)) g_search_css_state == SEARCH_CSS_STATE_REPEAT))
{ {
if (g_eeprom.auto_keypad_lock && if (g_eeprom.auto_keypad_lock &&
@ -2110,7 +2155,7 @@ void APP_TimeSlice500ms(void)
if (g_input_box_index > 0 || g_dtmf_input_mode) if (g_input_box_index > 0 || g_dtmf_input_mode)
AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL);
/* /*
if (g_screen_to_display == DISPLAY_SCANNER) if (g_screen_to_display == DISPLAY_SEARCH)
{ {
BK4819_StopScan(); BK4819_StopScan();
@ -2147,7 +2192,7 @@ void APP_TimeSlice500ms(void)
if (disp == DISPLAY_INVALID) if (disp == DISPLAY_INVALID)
{ {
#ifndef ENABLE_CODE_SEARCH_TIMEOUT #ifndef ENABLE_CODE_SEARCH_TIMEOUT
if (g_screen_to_display != DISPLAY_SCANNER) if (g_screen_to_display != DISPLAY_SEARCH)
#endif #endif
disp = DISPLAY_MAIN; disp = DISPLAY_MAIN;
} }
@ -2313,27 +2358,28 @@ void CHANNEL_Next(const bool flag, const scan_state_dir_t scan_direction)
{ {
RADIO_SelectVfos(); RADIO_SelectVfos();
g_next_channel = g_rx_vfo->channel_save; g_scan_next_channel = g_rx_vfo->channel_save;
g_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1; g_scan_current_scan_list = SCAN_NEXT_CHAN_SCANLIST1;
g_scan_state_dir = scan_direction; g_scan_state_dir = scan_direction;
if (g_next_channel <= USER_CHANNEL_LAST) if (g_scan_next_channel <= USER_CHANNEL_LAST)
{ // channel mode { // channel mode
if (flag) if (flag)
g_restore_channel = g_next_channel; g_scan_restore_channel = g_scan_next_channel;
USER_NextChannel(); USER_NextChannel();
} }
else else
{ // frequency mode { // frequency mode
if (flag) if (flag)
g_restore_frequency = g_rx_vfo->freq_config_rx.frequency; g_scan_restore_frequency = g_rx_vfo->freq_config_rx.frequency;
FREQ_NextChannel(); FREQ_NextChannel();
} }
g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
g_rx_reception_mode = RX_MODE_NONE; g_scan_pause_mode = false;
g_scan_pause_mode = false; g_rx_reception_mode = RX_MODE_NONE;
g_scan_keep_frequency = false; g_scan_keep_frequency = false;
} }
@ -2457,7 +2503,7 @@ static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const b
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits" #pragma GCC diagnostic ignored "-Wtype-limits"
if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF)
{ // FREQ/CTCSS/CDCSS scanning { // FREQ/CTCSS/CDCSS scanning
if ((Key >= KEY_0 && Key <= KEY_9) || Key == KEY_F) if ((Key >= KEY_0 && Key <= KEY_9) || Key == KEY_F)
@ -2603,8 +2649,8 @@ static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const b
MENU_ProcessKeys(Key, key_pressed, key_held); MENU_ProcessKeys(Key, key_pressed, key_held);
break; break;
case DISPLAY_SCANNER: case DISPLAY_SEARCH:
SCANNER_ProcessKeys(Key, key_pressed, key_held); SEARCH_ProcessKeys(Key, key_pressed, key_held);
break; break;
#ifdef ENABLE_AIRCOPY #ifdef ENABLE_AIRCOPY
@ -2620,9 +2666,9 @@ static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const b
} }
else else
#ifdef ENABLE_AIRCOPY #ifdef ENABLE_AIRCOPY
if (g_screen_to_display != DISPLAY_SCANNER && g_screen_to_display != DISPLAY_AIRCOPY) if (g_screen_to_display != DISPLAY_SEARCH && g_screen_to_display != DISPLAY_AIRCOPY)
#else #else
if (g_screen_to_display != DISPLAY_SCANNER) if (g_screen_to_display != DISPLAY_SEARCH)
#endif #endif
{ {
ACTION_Handle(Key, key_pressed, key_held); ACTION_Handle(Key, key_pressed, key_held);
@ -2654,10 +2700,10 @@ Skip:
g_flag_AcceptSetting = false; g_flag_AcceptSetting = false;
} }
if (g_flag_stop_scan) if (g_search_flag_stop_scan)
{ {
BK4819_StopScan(); BK4819_StopScan();
g_flag_stop_scan = false; g_search_flag_stop_scan = false;
} }
if (g_request_save_settings) if (g_request_save_settings)
@ -2696,7 +2742,7 @@ Skip:
{ {
SETTINGS_SaveChannel(g_tx_vfo->channel_save, g_eeprom.tx_vfo, g_tx_vfo, g_request_save_channel); SETTINGS_SaveChannel(g_tx_vfo->channel_save, g_eeprom.tx_vfo, g_tx_vfo, g_request_save_channel);
if (g_screen_to_display != DISPLAY_SCANNER) if (g_screen_to_display != DISPLAY_SEARCH)
if (g_vfo_configure_mode == VFO_CONFIGURE_NONE) // 'if' is so as we don't wipe out previously setting this variable elsewhere if (g_vfo_configure_mode == VFO_CONFIGURE_NONE) // 'if' is so as we don't wipe out previously setting this variable elsewhere
g_vfo_configure_mode = VFO_CONFIGURE; g_vfo_configure_mode = VFO_CONFIGURE;
} }
@ -2761,9 +2807,9 @@ Skip:
MENU_ShowCurrentSetting(); MENU_ShowCurrentSetting();
} }
if (g_flag_start_scan) if (g_search_flag_start_scan)
{ {
g_flag_start_scan = false; g_search_flag_start_scan = false;
g_monitor_enabled = false; g_monitor_enabled = false;
@ -2772,9 +2818,7 @@ Skip:
AUDIO_PlaySingleVoice(true); AUDIO_PlaySingleVoice(true);
#endif #endif
SCANNER_Start(); SEARCH_Start();
g_request_display_screen = DISPLAY_SCANNER;
} }
if (g_flag_prepare_tx) if (g_flag_prepare_tx)

View File

@ -29,6 +29,7 @@ extern const uint8_t orig_mixer;
extern const uint8_t orig_pga; extern const uint8_t orig_pga;
void APP_EndTransmission(void); void APP_EndTransmission(void);
void SCAN_Stop(void);
void CHANNEL_Next(const bool flag, const scan_state_dir_t scan_direction); void CHANNEL_Next(const bool flag, const scan_state_dir_t scan_direction);
void APP_StartListening(function_type_t Function, const bool reset_am_fix); void APP_StartListening(function_type_t Function, const bool reset_am_fix);
uint32_t APP_SetFrequencyByStep(vfo_info_t *pInfo, int8_t Step); uint32_t APP_SetFrequencyByStep(vfo_info_t *pInfo, int8_t Step);

View File

@ -209,7 +209,7 @@ void DTMF_HandleRequest(void)
if (!g_dtmf_rx_pending) if (!g_dtmf_rx_pending)
return; // nothing new received return; // nothing new received
if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode != CSS_SCAN_MODE_OFF)
{ // we're busy scanning { // we're busy scanning
DTMF_clear_RX(); DTMF_clear_RX();
return; return;

View File

@ -138,22 +138,22 @@ void GENERIC_Key_PTT(bool key_pressed)
// UART_printf("gene key 1 %u\r\n", key_pressed); // UART_printf("gene key 1 %u\r\n", key_pressed);
#endif #endif
if (g_scan_state_dir != SCAN_OFF || // frequency/channel scanning if (g_scan_state_dir != SCAN_STATE_DIR_OFF || // frequency/channel scanning
g_screen_to_display == DISPLAY_SCANNER || // CTCSS/CDCSS scanning g_screen_to_display == DISPLAY_SEARCH || // CTCSS/CDCSS scanning
g_css_scan_mode != CSS_SCAN_MODE_OFF) // " " g_css_scan_mode != CSS_SCAN_MODE_OFF) // " "
{ // we're scanning .. stop { // we're scanning .. stop
if (g_screen_to_display == DISPLAY_SCANNER) if (g_screen_to_display == DISPLAY_SEARCH)
{ // CTCSS/CDCSS scanning .. stop { // CTCSS/CDCSS scanning .. stop
g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx; g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx;
g_flag_stop_scan = true; g_search_flag_stop_scan = true;
g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD;
g_flag_reset_vfos = true; g_flag_reset_vfos = true;
} }
else else
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ // frequency/channel scanning . .stop { // frequency/channel scanning . .stop
SCANNER_Stop(); SCAN_Stop();
} }
else else
if (g_css_scan_mode != CSS_SCAN_MODE_OFF) if (g_css_scan_mode != CSS_SCAN_MODE_OFF)

View File

@ -41,7 +41,7 @@
void toggle_chan_scanlist(void) void toggle_chan_scanlist(void)
{ // toggle the selected channels scanlist setting { // toggle the selected channels scanlist setting
if (g_screen_to_display == DISPLAY_SCANNER || !IS_USER_CHANNEL(g_tx_vfo->channel_save)) if (g_screen_to_display == DISPLAY_SEARCH || !IS_USER_CHANNEL(g_tx_vfo->channel_save))
return; return;
if (g_tx_vfo->scanlist_1_participation) if (g_tx_vfo->scanlist_1_participation)
@ -78,7 +78,8 @@ static void processFKeyFunction(const key_code_t Key)
switch (Key) switch (Key)
{ {
case KEY_0: case KEY_0: // FM
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
ACTION_FM(); ACTION_FM();
#else #else
@ -90,12 +91,13 @@ static void processFKeyFunction(const key_code_t Key)
#endif #endif
break; break;
case KEY_1: case KEY_1: // BAND
if (!IS_FREQ_CHANNEL(g_tx_vfo->channel_save)) if (!IS_FREQ_CHANNEL(g_tx_vfo->channel_save))
{ {
g_fkey_pressed = false; g_fkey_pressed = false;
g_update_status = true; g_update_status = true;
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
return; return;
} }
@ -120,7 +122,8 @@ static void processFKeyFunction(const key_code_t Key)
g_request_display_screen = DISPLAY_MAIN; g_request_display_screen = DISPLAY_MAIN;
break; break;
case KEY_2: case KEY_2: // A/B
if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_CHAN_A) if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_CHAN_A)
g_eeprom.cross_vfo_rx_tx = CROSS_BAND_CHAN_B; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_CHAN_B;
else else
@ -143,7 +146,7 @@ static void processFKeyFunction(const key_code_t Key)
g_request_display_screen = DISPLAY_MAIN; g_request_display_screen = DISPLAY_MAIN;
break; break;
case KEY_3: case KEY_3: // VFO/MR
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (g_eeprom.vfo_open && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) if (g_eeprom.vfo_open && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save))
#else #else
@ -190,10 +193,11 @@ static void processFKeyFunction(const key_code_t Key)
break; break;
case KEY_4: case KEY_4: // FC
g_fkey_pressed = false; g_fkey_pressed = false;
g_flag_start_scan = true; g_search_flag_start_scan = true;
g_scan_single_frequency = false; g_search_single_frequency = false;
g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx;
g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF;
g_update_status = true; g_update_status = true;
@ -201,7 +205,8 @@ static void processFKeyFunction(const key_code_t Key)
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
break; break;
case KEY_5: case KEY_5: // NOAA
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) if (IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save))
@ -227,12 +232,14 @@ static void processFKeyFunction(const key_code_t Key)
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
break; break;
case KEY_6: case KEY_6: // H/M/L
ACTION_Power(); ACTION_Power();
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
break; break;
case KEY_7: case KEY_7: // VOX
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
ACTION_Vox(); ACTION_Vox();
#else #else
@ -241,13 +248,15 @@ static void processFKeyFunction(const key_code_t Key)
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
break; break;
case KEY_8: case KEY_8: // R
g_tx_vfo->frequency_reverse = g_tx_vfo->frequency_reverse == false; g_tx_vfo->frequency_reverse = g_tx_vfo->frequency_reverse == false;
g_request_save_channel = 1; g_request_save_channel = 1;
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
break; break;
case KEY_9: case KEY_9: // CALL
if (RADIO_CheckValidChannel(g_eeprom.chan_1_call, false, 0)) if (RADIO_CheckValidChannel(g_eeprom.chan_1_call, false, 0))
{ {
g_eeprom.user_channel[Vfo] = g_eeprom.chan_1_call; g_eeprom.user_channel[Vfo] = g_eeprom.chan_1_call;
@ -268,6 +277,7 @@ static void processFKeyFunction(const key_code_t Key)
default: default:
g_update_status = true; g_update_status = true;
g_fkey_pressed = false; g_fkey_pressed = false;
g_fkey_pressed = false;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
if (!g_fm_radio_mode) if (!g_fm_radio_mode)
@ -382,10 +392,10 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
Frequency = FREQ_BAND_TABLE[0].lower; Frequency = FREQ_BAND_TABLE[0].lower;
} }
else else
if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower)
{ {
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2; const uint32_t center = (BX4819_BAND1.upper + BX4819_BAND2.lower) / 2;
Frequency = (Frequency < center) ? BX4819_band1.upper : BX4819_band2.lower; Frequency = (Frequency < center) ? BX4819_BAND1.upper : BX4819_BAND2.lower;
} }
else else
if (Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) if (Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper)
@ -394,7 +404,7 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
} }
{ {
const FREQUENCY_Band_t band = FREQUENCY_GetBand(Frequency); const frequency_band_t band = FREQUENCY_GetBand(Frequency);
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = (voice_id_t)Key; g_another_voice_id = (voice_id_t)Key;
@ -416,10 +426,10 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
Frequency = FREQUENCY_FloorToStep(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->band].lower); Frequency = FREQUENCY_FloorToStep(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->band].lower);
if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower)
{ // clamp the frequency to the limit { // clamp the frequency to the limit
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2; const uint32_t center = (BX4819_BAND1.upper + BX4819_BAND2.lower) / 2;
Frequency = (Frequency < center) ? BX4819_band1.upper - g_tx_vfo->step_freq : BX4819_band2.lower; Frequency = (Frequency < center) ? BX4819_BAND1.upper - g_tx_vfo->step_freq : BX4819_BAND2.lower;
} }
g_tx_vfo->freq_config_rx.frequency = Frequency; g_tx_vfo->freq_config_rx.frequency = Frequency;
@ -448,7 +458,7 @@ static void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
g_input_box_index = 0; g_input_box_index = 0;
Channel = (g_input_box[0] * 10) + g_input_box[1]; Channel = (g_input_box[0] * 10) + g_input_box[1];
if (Channel >= 1 && Channel <= ARRAY_SIZE(NoaaFrequencyTable)) if (Channel >= 1 && Channel <= ARRAY_SIZE(NOAA_FREQUENCY_TABLE))
{ {
Channel += NOAA_CHANNEL_FIRST; Channel += NOAA_CHANNEL_FIRST;
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
@ -492,7 +502,7 @@ static void MAIN_Key_EXIT(bool key_pressed, bool key_held)
if (!g_fm_radio_mode) if (!g_fm_radio_mode)
#endif #endif
{ {
if (g_scan_state_dir == SCAN_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF)
{ {
if (g_input_box_index == 0) if (g_input_box_index == 0)
return; return;
@ -507,7 +517,7 @@ static void MAIN_Key_EXIT(bool key_pressed, bool key_held)
} }
else else
{ {
SCANNER_Stop(); SCAN_Stop();
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_SCANNING_STOP; g_another_voice_id = VOICE_ID_SCANNING_STOP;
@ -570,7 +580,7 @@ static void MAIN_Key_MENU(const bool key_pressed, const bool key_held)
if (g_eeprom.vfo_open && g_css_scan_mode == CSS_SCAN_MODE_OFF) if (g_eeprom.vfo_open && g_css_scan_mode == CSS_SCAN_MODE_OFF)
{ {
if (g_scan_state_dir != SCAN_OFF) if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
{ {
if (g_current_function != FUNCTION_INCOMING || if (g_current_function != FUNCTION_INCOMING ||
g_rx_reception_mode == RX_MODE_NONE || g_rx_reception_mode == RX_MODE_NONE ||
@ -672,9 +682,9 @@ static void MAIN_Key_STAR(bool key_pressed, bool key_held)
{ // pressed without the F-key { // pressed without the F-key
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (g_scan_state_dir == SCAN_OFF && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save)) if (g_scan_state_dir == SCAN_STATE_DIR_OFF && IS_NOT_NOAA_CHANNEL(g_tx_vfo->channel_save))
#else #else
if (g_scan_state_dir == SCAN_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF)
#endif #endif
{ // start entering a DTMF string { // start entering a DTMF string
@ -703,8 +713,8 @@ static void MAIN_Key_STAR(bool key_pressed, bool key_held)
#endif #endif
// scan the CTCSS/DCS code // scan the CTCSS/DCS code
g_flag_start_scan = true; g_search_flag_start_scan = true;
g_scan_single_frequency = true; g_search_single_frequency = true;
g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx; g_backup_cross_vfo_rx_tx = g_eeprom.cross_vfo_rx_tx;
g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF; g_eeprom.cross_vfo_rx_tx = CROSS_BAND_OFF;
} }
@ -751,7 +761,7 @@ static void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t D
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
} }
if (g_scan_state_dir == SCAN_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF)
{ {
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (IS_NOT_NOAA_CHANNEL(Channel)) if (IS_NOT_NOAA_CHANNEL(Channel))
@ -810,7 +820,7 @@ static void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t D
// jump to the next channel // jump to the next channel
CHANNEL_Next(false, Direction); CHANNEL_Next(false, Direction);
g_scan_pause_delay_in_10ms = 1; g_scan_pause_delay_in_10ms = 1;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
// g_ptt_was_released = true; // why is this being set ? // g_ptt_was_released = true; // why is this being set ?
} }

View File

@ -88,7 +88,7 @@ void MENU_StartCssScan(int8_t Direction)
MENU_SelectNextCode(); MENU_SelectNextCode();
g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms; g_scan_pause_delay_in_10ms = scan_pause_delay_in_2_10ms;
g_schedule_scan_listen = false; g_scan_schedule_scan_listen = false;
} }
void MENU_StopCssScan(void) void MENU_StopCssScan(void)

View File

@ -18,6 +18,7 @@
#include "app/generic.h" #include "app/generic.h"
#include "app/scanner.h" #include "app/scanner.h"
#include "audio.h" #include "audio.h"
#include "board.h"
#include "driver/bk4819.h" #include "driver/bk4819.h"
#include "driver/uart.h" #include "driver/uart.h"
#include "frequencies.h" #include "frequencies.h"
@ -27,30 +28,33 @@
#include "ui/inputbox.h" #include "ui/inputbox.h"
#include "ui/ui.h" #include "ui/ui.h"
dcs_code_type_t g_scan_css_result_type; search_css_state_t g_search_css_state;
uint8_t g_scan_css_result_code; bool g_search_use_css_result;
bool g_flag_start_scan; dcs_code_type_t g_search_css_result_type;
bool g_flag_stop_scan; uint8_t g_search_css_result_code;
bool g_scan_single_frequency;
scan_edit_state_t g_scanner_edit_state;
uint8_t g_scan_channel;
uint32_t g_scan_frequency;
bool g_scan_pause_mode;
scan_css_state_t g_scan_css_state;
volatile bool g_schedule_scan_listen = true;
volatile uint16_t g_scan_pause_delay_in_10ms;
uint16_t g_scan_freq_css_timer_10ms;
uint8_t g_scan_hit_count;
bool g_scan_use_css_result;
scan_state_dir_t g_scan_state_dir;
bool g_scan_keep_frequency;
static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) bool g_search_flag_start_scan;
bool g_search_flag_stop_scan;
uint8_t g_search_show_chan_prefix;
bool g_search_single_frequency;
uint16_t g_search_freq_css_timer_10ms;
uint8_t g_search_delay_10ms;
uint8_t g_search_hit_count;
search_edit_state_t g_search_edit_state;
uint8_t g_search_channel;
uint32_t g_search_frequency;
step_setting_t g_search_step_setting;
static void SEARCH_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
{ {
if (key_held || key_pressed) if (key_held || key_pressed)
return; return;
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE_CHAN) if (g_search_edit_state == SEARCH_EDIT_STATE_SAVE_CHAN)
{ {
uint16_t Channel; uint16_t Channel;
@ -58,7 +62,7 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
INPUTBOX_Append(Key); INPUTBOX_Append(Key);
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
if (g_input_box_index < 3) if (g_input_box_index < 3)
{ {
@ -76,8 +80,8 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = (voice_id_t)Key; g_another_voice_id = (voice_id_t)Key;
#endif #endif
g_show_chan_prefix = RADIO_CheckValidChannel(Channel, false, 0); g_search_show_chan_prefix = RADIO_CheckValidChannel(Channel, false, 0);
g_scan_channel = (uint8_t)Channel; g_search_channel = (uint8_t)Channel;
return; return;
} }
} }
@ -85,21 +89,24 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
} }
static void SCANNER_Key_EXIT(bool key_pressed, bool key_held) static void SEARCH_Key_EXIT(bool key_pressed, bool key_held)
{ {
if (key_held || key_pressed) if (key_held || key_pressed)
return; return;
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
switch (g_scanner_edit_state) #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
switch (g_search_edit_state)
{ {
case SCAN_EDIT_STATE_NONE: case SEARCH_EDIT_STATE_NONE:
g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx; g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx;
g_update_status = true; g_update_status = true;
g_flag_stop_scan = true;
g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD;
g_flag_reset_vfos = true; g_flag_reset_vfos = true;
g_search_flag_stop_scan = true;
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_CANCEL; g_another_voice_id = VOICE_ID_CANCEL;
@ -109,20 +116,18 @@ static void SCANNER_Key_EXIT(bool key_pressed, bool key_held)
g_update_display = true; g_update_display = true;
break; break;
case SCAN_EDIT_STATE_SAVE_CHAN: case SEARCH_EDIT_STATE_SAVE_CHAN:
if (g_input_box_index > 0) if (g_input_box_index > 0)
{ {
g_input_box[--g_input_box_index] = 10; g_input_box[--g_input_box_index] = 10;
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
g_update_display = true; g_update_display = true;
break; break;
} }
// Fallthrough case SEARCH_EDIT_STATE_SAVE_CONFIRM:
g_search_edit_state = SEARCH_EDIT_STATE_NONE;
case SCAN_EDIT_STATE_SAVE_CONFIRM:
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_CANCEL; g_another_voice_id = VOICE_ID_CANCEL;
@ -132,31 +137,33 @@ static void SCANNER_Key_EXIT(bool key_pressed, bool key_held)
g_update_display = true; g_update_display = true;
break; break;
} }
#pragma GCC diagnostic pop
} }
static void SCANNER_Key_MENU(bool key_pressed, bool key_held) static void SEARCH_Key_MENU(bool key_pressed, bool key_held)
{ {
uint8_t Channel; uint8_t Channel;
if (key_held || key_pressed) if (key_held || key_pressed)
return; return;
if (g_scan_css_state == SCAN_CSS_STATE_OFF && !g_scan_single_frequency) if (g_search_css_state == SEARCH_CSS_STATE_OFF && !g_search_single_frequency)
{ {
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
return; return;
} }
if (g_scan_css_state == SCAN_CSS_STATE_SCANNING) if (g_search_css_state == SEARCH_CSS_STATE_SCANNING)
{ {
if (g_scan_single_frequency) if (g_search_single_frequency)
{ {
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
return; return;
} }
} }
if (g_scan_css_state == SCAN_CSS_STATE_FAILED && g_scan_single_frequency) if (g_search_css_state == SEARCH_CSS_STATE_FAILED && g_search_single_frequency)
{ {
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
return; return;
@ -167,17 +174,18 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
switch (g_scanner_edit_state) switch (g_search_edit_state)
{ {
case SCAN_EDIT_STATE_NONE: case SEARCH_EDIT_STATE_NONE:
if (!g_scan_single_frequency)
if (!g_search_single_frequency)
{ {
#if 0 #if 0
uint32_t Freq250 = FREQUENCY_FloorToStep(g_scan_frequency, 250, 0); uint32_t Freq250 = FREQUENCY_FloorToStep(g_search_frequency, 250, 0);
uint32_t Freq625 = FREQUENCY_FloorToStep(g_scan_frequency, 625, 0); uint32_t Freq625 = FREQUENCY_FloorToStep(g_search_frequency, 625, 0);
int16_t Delta250 = (int16_t)g_scan_frequency - (int16_t)Freq250; int16_t Delta250 = (int16_t)g_search_frequency - (int16_t)Freq250;
int16_t Delta625; int16_t Delta625;
if (125 < Delta250) if (125 < Delta250)
@ -186,7 +194,7 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
Freq250 += 250; Freq250 += 250;
} }
Delta625 = (int16_t)g_scan_frequency - (int16_t)Freq625; Delta625 = (int16_t)g_search_frequency - (int16_t)Freq625;
if (312 < Delta625) if (312 < Delta625)
{ {
@ -196,16 +204,16 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
if (Delta625 < Delta250) if (Delta625 < Delta250)
{ {
g_step_setting = STEP_6_25kHz; g_search_step_setting = STEP_6_25kHz;
g_scan_frequency = Freq625; g_search_frequency = Freq625;
} }
else else
{ {
g_step_setting = STEP_2_5kHz; g_search_step_setting = STEP_2_5kHz;
g_scan_frequency = Freq250; g_search_frequency = Freq250;
} }
#elif 1 #elif 0
#ifdef ENABLE_1250HZ_STEP #ifdef ENABLE_1250HZ_STEP
const step_setting_t small_step = STEP_1_25kHz; const step_setting_t small_step = STEP_1_25kHz;
@ -218,11 +226,11 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
const uint32_t small_step_freq = STEP_FREQ_TABLE[small_step]; const uint32_t small_step_freq = STEP_FREQ_TABLE[small_step];
const uint32_t big_step_freq = STEP_FREQ_TABLE[big_step]; const uint32_t big_step_freq = STEP_FREQ_TABLE[big_step];
uint32_t freq_small_step = FREQUENCY_FloorToStep(g_scan_frequency, small_step_freq, 0); uint32_t freq_small_step = FREQUENCY_FloorToStep(g_search_frequency, small_step_freq, 0);
uint32_t freq_big_step = FREQUENCY_FloorToStep(g_scan_frequency, big_step_freq, 0); uint32_t freq_big_step = FREQUENCY_FloorToStep(g_search_frequency, big_step_freq, 0);
int32_t delta_small_step = (int32_t)g_scan_frequency - freq_small_step; int32_t delta_small_step = (int32_t)g_search_frequency - freq_small_step;
int32_t delta_big_step = (int32_t)g_scan_frequency - freq_big_step; int32_t delta_big_step = (int32_t)g_search_frequency - freq_big_step;
if (delta_small_step > 125) if (delta_small_step > 125)
{ {
@ -230,7 +238,7 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
freq_big_step += small_step_freq; freq_big_step += small_step_freq;
} }
delta_big_step = (int32_t)g_scan_frequency - freq_big_step; delta_big_step = (int32_t)g_search_frequency - freq_big_step;
if (delta_big_step > 312) if (delta_big_step > 312)
{ {
@ -240,13 +248,24 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
if (delta_small_step >= delta_big_step) if (delta_small_step >= delta_big_step)
{ {
g_step_setting = small_step; g_search_step_setting = small_step;
g_scan_frequency = freq_small_step; g_search_frequency = freq_small_step;
} }
else else
{ {
g_step_setting = big_step; g_search_step_setting = big_step;
g_scan_frequency = freq_big_step; g_search_frequency = freq_big_step;
}
#else
// determine what the current step size is for the detected frequency
// use the 7 VFO channels/bands to determine it
const unsigned int band = (unsigned int)FREQUENCY_GetBand(g_search_frequency);
g_search_step_setting = BOARD_fetchFrequencyStepSetting(band, g_eeprom.tx_vfo);
{ // round to nearest step size
const uint16_t step_size = STEP_FREQ_TABLE[g_search_step_setting];
g_search_frequency = ((g_search_frequency + (step_size / 2)) / step_size) * step_size;
} }
#endif #endif
@ -254,30 +273,30 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST) if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
{ // save to channel { // save to channel
g_scan_channel = g_tx_vfo->channel_save; g_search_channel = g_tx_vfo->channel_save;
g_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0); g_search_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0);
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CHAN; g_search_edit_state = SEARCH_EDIT_STATE_SAVE_CHAN;
} }
else else
{ // save to VFO { // save to VFO
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CONFIRM; g_search_edit_state = SEARCH_EDIT_STATE_SAVE_CONFIRM;
} }
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
//UART_SendText("edit none\r\n"); //UART_SendText("edit none\r\n");
#endif #endif
g_scan_css_state = SCAN_CSS_STATE_FOUND; g_search_css_state = SEARCH_CSS_STATE_FOUND;
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
g_another_voice_id = VOICE_ID_MEMORY_CHANNEL; g_another_voice_id = VOICE_ID_MEMORY_CHANNEL;
#endif #endif
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
g_update_status = true; g_update_status = true;
break; break;
case SCAN_EDIT_STATE_SAVE_CHAN: case SEARCH_EDIT_STATE_SAVE_CHAN:
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_SendText("edit save chan\r\n"); UART_SendText("edit save chan\r\n");
#endif #endif
@ -287,52 +306,52 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
if (g_input_box_index == 0) if (g_input_box_index == 0)
{ {
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CONFIRM; g_search_edit_state = SEARCH_EDIT_STATE_SAVE_CONFIRM;
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
} }
// break; // break;
case SCAN_EDIT_STATE_SAVE_CONFIRM: case SEARCH_EDIT_STATE_SAVE_CONFIRM:
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_SendText("edit save confirm\r\n"); UART_SendText("edit save confirm\r\n");
#endif #endif
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ { // save to VFO
RADIO_InitInfo(g_tx_vfo, g_tx_vfo->channel_save, g_scan_frequency); RADIO_InitInfo(g_tx_vfo, g_tx_vfo->channel_save, g_search_frequency);
if (g_scan_use_css_result) if (g_search_use_css_result)
{ {
g_tx_vfo->freq_config_rx.code_type = g_scan_css_result_type; g_tx_vfo->freq_config_rx.code_type = g_search_css_result_type;
g_tx_vfo->freq_config_rx.code = g_scan_css_result_code; g_tx_vfo->freq_config_rx.code = g_search_css_result_code;
} }
g_tx_vfo->freq_config_tx = g_tx_vfo->freq_config_rx; g_tx_vfo->freq_config_tx = g_tx_vfo->freq_config_rx;
g_tx_vfo->step_setting = g_step_setting; g_tx_vfo->step_setting = g_search_step_setting;
} }
else else
{ {
RADIO_ConfigureChannel(0, VFO_CONFIGURE_RELOAD); RADIO_ConfigureChannel(0, VFO_CONFIGURE_RELOAD);
RADIO_ConfigureChannel(1, VFO_CONFIGURE_RELOAD); RADIO_ConfigureChannel(1, VFO_CONFIGURE_RELOAD);
g_tx_vfo->freq_config_rx.code_type = g_scan_css_result_type; g_tx_vfo->freq_config_rx.code_type = g_search_css_result_type;
g_tx_vfo->freq_config_rx.code = g_scan_css_result_code; g_tx_vfo->freq_config_rx.code = g_search_css_result_code;
g_tx_vfo->freq_config_tx.code_type = g_scan_css_result_type; g_tx_vfo->freq_config_tx.code_type = g_search_css_result_type;
g_tx_vfo->freq_config_tx.code = g_scan_css_result_code; g_tx_vfo->freq_config_tx.code = g_search_css_result_code;
} }
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST) if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
{ {
Channel = g_scan_channel; Channel = g_search_channel;
g_eeprom.user_channel[g_eeprom.tx_vfo] = Channel; g_eeprom.user_channel[g_eeprom.tx_vfo] = Channel;
} }
else else
{ {
Channel = g_tx_vfo->band + FREQ_CHANNEL_FIRST; Channel = FREQ_CHANNEL_FIRST + g_tx_vfo->band;
g_eeprom.freq_channel[g_eeprom.tx_vfo] = Channel; g_eeprom.freq_channel[g_eeprom.tx_vfo] = Channel;
} }
@ -344,16 +363,16 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
g_another_voice_id = VOICE_ID_CONFIRM; g_another_voice_id = VOICE_ID_CONFIRM;
#endif #endif
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ // FREQ/CTCSS/CDCSS search mode .. do another search { // FREQ/CTCSS/CDCSS search mode .. do another search
g_scan_css_state = SCAN_CSS_STATE_REPEAT; g_search_css_state = SEARCH_CSS_STATE_REPEAT;
g_scanner_edit_state = SCAN_EDIT_STATE_NONE; g_search_edit_state = SEARCH_EDIT_STATE_NONE;
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
} }
else else
{ // CTCSS/CDCSS search mode .. only do a single search { // CTCSS/CDCSS search mode .. only do a single search
g_scan_css_state = SCAN_CSS_STATE_OFF; g_search_css_state = SEARCH_CSS_STATE_OFF;
g_scanner_edit_state = SCAN_EDIT_STATE_NONE; g_search_edit_state = SEARCH_EDIT_STATE_NONE;
g_request_display_screen = DISPLAY_MAIN; g_request_display_screen = DISPLAY_MAIN;
} }
@ -369,16 +388,16 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
} }
static void SCANNER_Key_STAR(bool key_pressed, bool key_held) static void SEARCH_Key_STAR(bool key_pressed, bool key_held)
{ {
if (key_held || key_pressed) if (key_held || key_pressed)
return; return;
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
g_flag_start_scan = true; g_search_flag_start_scan = true;
} }
static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Direction) static void SEARCH_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Direction)
{ {
if (pKeyHeld) if (pKeyHeld)
{ {
@ -394,17 +413,17 @@ static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Directio
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
} }
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE_CHAN) if (g_search_edit_state == SEARCH_EDIT_STATE_SAVE_CHAN)
{ {
g_scan_channel = NUMBER_AddWithWraparound(g_scan_channel, Direction, 0, USER_CHANNEL_LAST); g_search_channel = NUMBER_AddWithWraparound(g_search_channel, Direction, 0, USER_CHANNEL_LAST);
g_show_chan_prefix = RADIO_CheckValidChannel(g_scan_channel, false, 0); g_search_show_chan_prefix = RADIO_CheckValidChannel(g_search_channel, false, 0);
g_request_display_screen = DISPLAY_SCANNER; g_request_display_screen = DISPLAY_SEARCH;
} }
else else
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
} }
void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held) void SEARCH_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held)
{ {
switch (Key) switch (Key)
{ {
@ -418,22 +437,22 @@ void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held)
case KEY_7: case KEY_7:
case KEY_8: case KEY_8:
case KEY_9: case KEY_9:
SCANNER_Key_DIGITS(Key, key_pressed, key_held); SEARCH_Key_DIGITS(Key, key_pressed, key_held);
break; break;
case KEY_MENU: case KEY_MENU:
SCANNER_Key_MENU(key_pressed, key_held); SEARCH_Key_MENU(key_pressed, key_held);
break; break;
case KEY_UP: case KEY_UP:
SCANNER_Key_UP_DOWN(key_pressed, key_held, 1); SEARCH_Key_UP_DOWN(key_pressed, key_held, 1);
break; break;
case KEY_DOWN: case KEY_DOWN:
SCANNER_Key_UP_DOWN(key_pressed, key_held, -1); SEARCH_Key_UP_DOWN(key_pressed, key_held, -1);
break; break;
case KEY_EXIT: case KEY_EXIT:
SCANNER_Key_EXIT(key_pressed, key_held); SEARCH_Key_EXIT(key_pressed, key_held);
break; break;
case KEY_STAR: case KEY_STAR:
SCANNER_Key_STAR(key_pressed, key_held); SEARCH_Key_STAR(key_pressed, key_held);
break; break;
case KEY_PTT: case KEY_PTT:
GENERIC_Key_PTT(key_pressed); GENERIC_Key_PTT(key_pressed);
@ -445,7 +464,7 @@ void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held)
} }
} }
void SCANNER_Start(void) void SEARCH_Start(void)
{ {
uint8_t BackupStep; uint8_t BackupStep;
uint16_t BackupStepFreq; uint16_t BackupStepFreq;
@ -462,7 +481,7 @@ void SCANNER_Start(void)
BackupStep = g_rx_vfo->step_setting; BackupStep = g_rx_vfo->step_setting;
BackupStepFreq = g_rx_vfo->step_freq; BackupStepFreq = g_rx_vfo->step_freq;
RADIO_InitInfo(g_rx_vfo, g_rx_vfo->channel_save, g_rx_vfo->pRX->frequency); RADIO_InitInfo(g_rx_vfo, g_rx_vfo->channel_save, g_rx_vfo->p_rx->frequency);
g_rx_vfo->step_setting = BackupStep; g_rx_vfo->step_setting = BackupStep;
g_rx_vfo->step_freq = BackupStepFreq; g_rx_vfo->step_freq = BackupStepFreq;
@ -473,19 +492,19 @@ void SCANNER_Start(void)
g_is_noaa_mode = false; g_is_noaa_mode = false;
#endif #endif
if (g_scan_single_frequency) if (g_search_single_frequency)
{ {
g_scan_css_state = SCAN_CSS_STATE_SCANNING; g_search_css_state = SEARCH_CSS_STATE_SCANNING;
g_scan_frequency = g_rx_vfo->pRX->frequency; g_search_frequency = g_rx_vfo->p_rx->frequency;
g_step_setting = g_rx_vfo->step_setting; g_search_step_setting = g_rx_vfo->step_setting;
BK4819_PickRXFilterPathBasedOnFrequency(g_scan_frequency); BK4819_PickRXFilterPathBasedOnFrequency(g_search_frequency);
BK4819_SetScanFrequency(g_scan_frequency); BK4819_SetScanFrequency(g_search_frequency);
} }
else else
{ {
g_scan_css_state = SCAN_CSS_STATE_OFF; g_search_css_state = SEARCH_CSS_STATE_OFF;
g_scan_frequency = 0xFFFFFFFF; g_search_frequency = 0xFFFFFFFF;
BK4819_PickRXFilterPathBasedOnFrequency(0xFFFFFFFF); BK4819_PickRXFilterPathBasedOnFrequency(0xFFFFFFFF);
BK4819_EnableFrequencyScan(); BK4819_EnableFrequencyScan();
@ -493,67 +512,25 @@ void SCANNER_Start(void)
DTMF_clear_RX(); DTMF_clear_RX();
g_scan_delay_10ms = scan_freq_css_delay_10ms;
g_scan_css_result_type = CODE_TYPE_NONE;
g_scan_css_result_code = 0xff;
g_scan_hit_count = 0;
g_scan_use_css_result = false;
g_CxCSS_tail_found = false;
g_CDCSS_lost = false;
g_CDCSS_code_type = 0;
g_CTCSS_lost = false;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
g_vox_lost = false; g_vox_lost = false;
#endif #endif
g_squelch_lost = false;
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
g_scan_freq_css_timer_10ms = 0;
// g_flag_start_scan = false;
g_update_status = true; g_cxcss_tail_found = false;
} g_cdcss_lost = false;
g_cdcss_code_type = 0;
void SCANNER_Stop(void) g_ctcss_lost = false;
{
const uint8_t Previous = g_restore_channel; g_squelch_lost = false;
g_search_delay_10ms = scan_freq_css_delay_10ms;
if (g_scan_state_dir == SCAN_OFF) g_search_css_result_type = CODE_TYPE_NONE;
return; // but, but, we weren't doing anything ! g_search_css_result_code = 0xff;
g_search_hit_count = 0;
g_scan_state_dir = SCAN_OFF; g_search_use_css_result = false;
g_search_edit_state = SEARCH_EDIT_STATE_NONE;
if (!g_scan_keep_frequency) g_search_freq_css_timer_10ms = 0;
{ // g_search_flag_start_scan = false;
if (g_next_channel <= USER_CHANNEL_LAST)
{ g_request_display_screen = DISPLAY_SEARCH;
g_eeprom.user_channel[g_eeprom.rx_vfo] = g_restore_channel; g_update_status = true;
g_eeprom.screen_channel[g_eeprom.rx_vfo] = Previous;
RADIO_ConfigureChannel(g_eeprom.rx_vfo, VFO_CONFIGURE_RELOAD);
}
else
{
g_rx_vfo->freq_config_rx.frequency = g_restore_frequency;
RADIO_ApplyOffset(g_rx_vfo);
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
}
RADIO_SetupRegisters(true);
g_update_display = true;
return;
}
if (g_rx_vfo->channel_save > USER_CHANNEL_LAST)
{
RADIO_ApplyOffset(g_rx_vfo);
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
SETTINGS_SaveChannel(g_rx_vfo->channel_save, g_eeprom.rx_vfo, g_rx_vfo, 1);
return;
}
SETTINGS_SaveVfoIndices();
g_update_status = true;
} }

View File

@ -14,58 +14,49 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef APP_SCANNER_H #ifndef APP_SEARCH_H
#define APP_SCANNER_H #define APP_SEARCH_H
#include "dcs.h" #include "dcs.h"
#include "driver/keyboard.h" #include "driver/keyboard.h"
#include "frequencies.h"
enum scan_css_state_e enum search_css_state_e
{ {
SCAN_CSS_STATE_OFF = 0, SEARCH_CSS_STATE_OFF = 0,
SCAN_CSS_STATE_SCANNING, SEARCH_CSS_STATE_SCANNING,
SCAN_CSS_STATE_FOUND, SEARCH_CSS_STATE_FOUND,
SCAN_CSS_STATE_FAILED, SEARCH_CSS_STATE_FAILED,
SCAN_CSS_STATE_FREQ_FAILED, SEARCH_CSS_STATE_FREQ_FAILED,
SCAN_CSS_STATE_REPEAT SEARCH_CSS_STATE_REPEAT
}; };
typedef enum scan_css_state_e scan_css_state_t; typedef enum search_css_state_e search_css_state_t;
enum scan_state_dir_e { enum search_edit_state_e {
SCAN_REV = -1, SEARCH_EDIT_STATE_NONE = 0,
SCAN_OFF = 0, SEARCH_EDIT_STATE_SAVE_CHAN,
SCAN_FWD = +1 SEARCH_EDIT_STATE_SAVE_CONFIRM
}; };
typedef enum scan_state_dir_e scan_state_dir_t; typedef enum search_edit_state_e search_edit_state_t;
enum scan_edit_state_e { extern search_css_state_t g_search_css_state;
SCAN_EDIT_STATE_NONE = 0, extern dcs_code_type_t g_search_css_result_type;
SCAN_EDIT_STATE_SAVE_CHAN, extern uint8_t g_search_css_result_code;
SCAN_EDIT_STATE_SAVE_CONFIRM extern bool g_search_flag_start_scan;
}; extern bool g_search_flag_stop_scan;
typedef enum scan_edit_state_e scan_edit_state_t; extern uint8_t g_search_show_chan_prefix;
extern bool g_search_single_frequency;
extern search_edit_state_t g_search_edit_state;
extern uint8_t g_search_channel;
extern uint32_t g_search_frequency;
extern step_setting_t g_search_step_setting;
extern uint16_t g_search_freq_css_timer_10ms;
extern uint8_t g_search_delay_10ms;
extern uint8_t g_search_hit_count;
extern bool g_search_use_css_result;
extern dcs_code_type_t g_scan_css_result_type; void SEARCH_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held);
extern uint8_t g_scan_css_result_code; void SEARCH_Start(void);
extern bool g_flag_start_scan;
extern bool g_flag_stop_scan;
extern bool g_scan_single_frequency;
extern scan_edit_state_t g_scanner_edit_state;
extern uint8_t g_scan_channel;
extern uint32_t g_scan_frequency;
extern bool g_scan_pause_mode;
extern scan_css_state_t g_scan_css_state;
extern volatile bool g_schedule_scan_listen;
extern volatile uint16_t g_scan_pause_delay_in_10ms;
extern uint16_t g_scan_freq_css_timer_10ms;
extern uint8_t g_scan_hit_count;
extern bool g_scan_use_css_result;
extern scan_state_dir_t g_scan_state_dir;
extern bool g_scan_keep_frequency;
void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held);
void SCANNER_Start(void);
void SCANNER_Stop(void);
#endif #endif

View File

@ -416,7 +416,7 @@ static void ToggleTX(bool on) {
RegBackupSet(BK4819_REG_51, 0x0000); RegBackupSet(BK4819_REG_51, 0x0000);
BK4819_SetupPowerAmplifier(gCurrentVfo->TXP_CalculatedSetting, BK4819_SetupPowerAmplifier(gCurrentVfo->TXP_CalculatedSetting,
gCurrentVfo->pTX->Frequency); gCurrentVfo->p_tx->Frequency);
} else { } else {
RADIO_SendEndOfTransmission(); RADIO_SendEndOfTransmission();
RADIO_EnableCxCSS(); RADIO_EnableCxCSS();
@ -1328,7 +1328,7 @@ void APP_RunSpectrum() {
BackupRegisters(); BackupRegisters();
// TX here coz it always? set to active VFO // TX here coz it always? set to active VFO
VFO_Info_t vfo = g_eeprom.vfo_info[g_eeprom.TX_CHANNEL]; VFO_Info_t vfo = g_eeprom.vfo_info[g_eeprom.TX_CHANNEL];
initialFreq = vfo.pRX->Frequency; initialFreq = vfo.p_rx->Frequency;
currentFreq = initialFreq; currentFreq = initialFreq;
settings.scanStepIndex = gStepSettingToIndex[vfo.STEP_SETTING]; settings.scanStepIndex = gStepSettingToIndex[vfo.STEP_SETTING];
settings.listenBw = vfo.CHANNEL_BANDWIDTH == BANDWIDTH_WIDE settings.listenBw = vfo.CHANNEL_BANDWIDTH == BANDWIDTH_WIDE

View File

@ -452,8 +452,8 @@ static void cmd_052F(const uint8_t *pBuffer)
g_eeprom.rx_vfo = 0; g_eeprom.rx_vfo = 0;
g_eeprom.dtmf_side_tone = false; g_eeprom.dtmf_side_tone = false;
g_eeprom.vfo_info[0].frequency_reverse = false; g_eeprom.vfo_info[0].frequency_reverse = false;
g_eeprom.vfo_info[0].pRX = &g_eeprom.vfo_info[0].freq_config_rx; g_eeprom.vfo_info[0].p_rx = &g_eeprom.vfo_info[0].freq_config_rx;
g_eeprom.vfo_info[0].pTX = &g_eeprom.vfo_info[0].freq_config_tx; g_eeprom.vfo_info[0].p_tx = &g_eeprom.vfo_info[0].freq_config_tx;
g_eeprom.vfo_info[0].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF; g_eeprom.vfo_info[0].tx_offset_freq_dir = TX_OFFSET_FREQ_DIR_OFF;
g_eeprom.vfo_info[0].dtmf_ptt_id_tx_mode = PTT_ID_OFF; g_eeprom.vfo_info[0].dtmf_ptt_id_tx_mode = PTT_ID_OFF;
g_eeprom.vfo_info[0].dtmf_decoding_enable = false; g_eeprom.vfo_info[0].dtmf_decoding_enable = false;

49
board.c
View File

@ -840,11 +840,57 @@ uint32_t BOARD_fetchChannelFrequency(const int channel)
uint32_t offset; uint32_t offset;
} __attribute__((packed)) info; } __attribute__((packed)) info;
if (channel < 0 || channel > (int)FREQ_CHANNEL_LAST)
return 0;
if (!RADIO_CheckValidChannel(channel, false, 0))
return 0;
EEPROM_ReadBuffer(channel * 16, &info, sizeof(info)); EEPROM_ReadBuffer(channel * 16, &info, sizeof(info));
return info.frequency; return info.frequency;
} }
unsigned int BOARD_fetchChannelStepSetting(const int channel)
{
uint8_t data[8];
unsigned int step_setting = 0;
if (channel < 0)
return 0;
if (channel <= USER_CHANNEL_LAST)
{
EEPROM_ReadBuffer(channel * 16, &data, sizeof(data));
}
else
if (channel <= FREQ_CHANNEL_LAST)
{
EEPROM_ReadBuffer(channel * 16, &data, sizeof(data));
}
step_setting = (data[6] >= ARRAY_SIZE(STEP_FREQ_TABLE)) ? STEP_12_5kHz : data[6];
// step_size = STEP_FREQ_TABLE[step_setting];
return step_setting;
}
unsigned int BOARD_fetchFrequencyStepSetting(const int channel, const int vfo)
{
uint8_t data[8];
unsigned int step_setting = 0;
if (channel < 0 || channel > (FREQ_CHANNEL_LAST - FREQ_CHANNEL_FIRST) || vfo < 0 || vfo >= 2)
return 0;
EEPROM_ReadBuffer(FREQ_CHANNEL_FIRST + (channel * 16 * 2) + vfo, &data, sizeof(data));
step_setting = (data[6] >= ARRAY_SIZE(STEP_FREQ_TABLE)) ? STEP_12_5kHz : data[6];
// step_size = STEP_FREQ_TABLE[step_setting];
return step_setting;
}
void BOARD_fetchChannelName(char *s, const int channel) void BOARD_fetchChannelName(char *s, const int channel)
{ {
int i; int i;
@ -854,13 +900,12 @@ void BOARD_fetchChannelName(char *s, const int channel)
memset(s, 0, 11); // 's' had better be large enough ! memset(s, 0, 11); // 's' had better be large enough !
if (channel < 0) if (channel < 0 || channel > (int)USER_CHANNEL_LAST)
return; return;
if (!RADIO_CheckValidChannel(channel, false, 0)) if (!RADIO_CheckValidChannel(channel, false, 0))
return; return;
EEPROM_ReadBuffer(0x0F50 + (channel * 16), s + 0, 8); EEPROM_ReadBuffer(0x0F50 + (channel * 16), s + 0, 8);
EEPROM_ReadBuffer(0x0F58 + (channel * 16), s + 8, 2); EEPROM_ReadBuffer(0x0F58 + (channel * 16), s + 8, 2);

24
board.h
View File

@ -19,17 +19,19 @@
#include <stdint.h> #include <stdint.h>
void BOARD_FLASH_Init(void); void BOARD_FLASH_Init(void);
void BOARD_GPIO_Init(void); void BOARD_GPIO_Init(void);
void BOARD_PORTCON_Init(void); void BOARD_PORTCON_Init(void);
void BOARD_ADC_Init(void); void BOARD_ADC_Init(void);
void BOARD_ADC_GetBatteryInfo(uint16_t *pVoltage, uint16_t *pCurrent); void BOARD_ADC_GetBatteryInfo(uint16_t *pVoltage, uint16_t *pCurrent);
void BOARD_Init(void); void BOARD_Init(void);
void BOARD_EEPROM_load(void); void BOARD_EEPROM_load(void);
void BOARD_EEPROM_LoadMoreSettings(void); void BOARD_EEPROM_LoadMoreSettings(void);
uint32_t BOARD_fetchChannelFrequency(const int channel); uint32_t BOARD_fetchChannelFrequency(const int channel);
void BOARD_fetchChannelName(char *s, const int channel); unsigned int BOARD_fetchChannelStepSetting(const int channel);
void BOARD_FactoryReset(bool bIsAll); void BOARD_fetchChannelName(char *s, const int channel);
unsigned int BOARD_fetchFrequencyStepSetting(const int channel, const int vfo);
void BOARD_FactoryReset(bool bIsAll);
#endif #endif

Binary file not shown.

Binary file not shown.

View File

@ -18,12 +18,12 @@
#include "misc.h" #include "misc.h"
#include "settings.h" #include "settings.h"
// the initial AIRCOPY frequency to use // the default AIRCOPY frequency to use
uint32_t g_aircopy_freq = 41002500; uint32_t g_aircopy_freq = 41002500;
// the BK4819 has 2 bands it covers, 18MHz ~ 630MHz and 760MHz ~ 1300MHz // the BK4819 has 2 bands it covers, 18MHz ~ 630MHz and 760MHz ~ 1300MHz
const freq_band_table_t BX4819_band1 = { 1800000, 63000000}; const freq_band_table_t BX4819_BAND1 = { 1800000, 63000000};
const freq_band_table_t BX4819_band2 = {84000000, 130000000}; const freq_band_table_t BX4819_BAND2 = {84000000, 130000000};
const freq_band_table_t FREQ_BAND_TABLE[7] = const freq_band_table_t FREQ_BAND_TABLE[7] =
{ {
@ -49,7 +49,7 @@ const freq_band_table_t FREQ_BAND_TABLE[7] =
}; };
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
const uint32_t NoaaFrequencyTable[10] = const uint32_t NOAA_FREQUENCY_TABLE[10] =
{ {
16255000, 16255000,
16240000, 16240000,
@ -72,13 +72,13 @@ const freq_band_table_t FREQ_BAND_TABLE[7] =
const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833}; const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833};
#endif #endif
FREQUENCY_Band_t FREQUENCY_GetBand(uint32_t Frequency) frequency_band_t FREQUENCY_GetBand(uint32_t Frequency)
{ {
int band; int band;
for (band = ARRAY_SIZE(FREQ_BAND_TABLE) - 1; band >= 0; band--) for (band = ARRAY_SIZE(FREQ_BAND_TABLE) - 1; band >= 0; band--)
if (Frequency >= FREQ_BAND_TABLE[band].lower) if (Frequency >= FREQ_BAND_TABLE[band].lower)
// if (Frequency < FREQ_BAND_TABLE[band].upper) // if (Frequency < FREQ_BAND_TABLE[band].upper)
return (FREQUENCY_Band_t)band; return (frequency_band_t)band;
return BAND1_50MHz; return BAND1_50MHz;
// return BAND_NONE; // return BAND_NONE;
@ -134,7 +134,7 @@ int TX_freq_check(const uint32_t Frequency)
if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper)
return -1; // not allowed outside this range return -1; // not allowed outside this range
if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower)
return -1; // BX chip does not work in this range return -1; // BX chip does not work in this range
switch (g_setting_freq_lock) switch (g_setting_freq_lock)
@ -202,7 +202,7 @@ int RX_freq_check(const uint32_t Frequency)
if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) if (Frequency < FREQ_BAND_TABLE[0].lower || Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper)
return -1; return -1;
if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower)
return -1; return -1;
return 0; // OK frequency return 0; // OK frequency

View File

@ -21,19 +21,7 @@
#include "frequencies.h" #include "frequencies.h"
typedef struct { enum frequency_band_e {
const uint32_t lower;
const uint32_t upper;
} freq_band_table_t;
extern uint32_t g_aircopy_freq;
extern const freq_band_table_t BX4819_band1;
extern const freq_band_table_t BX4819_band2;
extern const freq_band_table_t FREQ_BAND_TABLE[7];
enum FREQUENCY_Band_t {
BAND_NONE = -1, BAND_NONE = -1,
BAND1_50MHz = 0, BAND1_50MHz = 0,
BAND2_108MHz, BAND2_108MHz,
@ -43,11 +31,23 @@ enum FREQUENCY_Band_t {
BAND6_400MHz, BAND6_400MHz,
BAND7_470MHz BAND7_470MHz
}; };
typedef enum FREQUENCY_Band_t FREQUENCY_Band_t; typedef enum frequency_band_e frequency_band_t;
typedef struct {
const uint32_t lower;
const uint32_t upper;
} freq_band_table_t;
extern uint32_t g_aircopy_freq;
extern const freq_band_table_t BX4819_BAND1;
extern const freq_band_table_t BX4819_BAND2;
extern const freq_band_table_t FREQ_BAND_TABLE[7];
#ifdef ENABLE_1250HZ_STEP #ifdef ENABLE_1250HZ_STEP
// includes 1.25kHz step // includes 1.25kHz step
enum step_setting_t { enum step_setting_e {
STEP_1_25kHz = 0, STEP_1_25kHz = 0,
STEP_2_5kHz, STEP_2_5kHz,
STEP_6_25kHz, STEP_6_25kHz,
@ -58,7 +58,7 @@ typedef enum FREQUENCY_Band_t FREQUENCY_Band_t;
}; };
#else #else
// QS steps // QS steps
enum step_setting_t { enum step_setting_e {
STEP_2_5kHz = 0, STEP_2_5kHz = 0,
STEP_5_0kHz, STEP_5_0kHz,
STEP_6_25kHz, STEP_6_25kHz,
@ -68,15 +68,15 @@ typedef enum FREQUENCY_Band_t FREQUENCY_Band_t;
STEP_8_33kHz STEP_8_33kHz
}; };
#endif #endif
typedef enum step_setting_t step_setting_t; typedef enum step_setting_e step_setting_t;
extern const uint16_t STEP_FREQ_TABLE[7]; extern const uint16_t STEP_FREQ_TABLE[7];
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
extern const uint32_t NoaaFrequencyTable[10]; extern const uint32_t NOAA_FREQUENCY_TABLE[10];
#endif #endif
FREQUENCY_Band_t FREQUENCY_GetBand(uint32_t Frequency); frequency_band_t FREQUENCY_GetBand(uint32_t Frequency);
uint8_t FREQUENCY_CalculateOutputPower(uint8_t TxpLow, uint8_t TxpMid, uint8_t TxpHigh, int32_t LowerLimit, int32_t Middle, int32_t UpperLimit, int32_t Frequency); uint8_t FREQUENCY_CalculateOutputPower(uint8_t TxpLow, uint8_t TxpMid, uint8_t TxpHigh, int32_t LowerLimit, int32_t Middle, int32_t UpperLimit, int32_t Frequency);
uint32_t FREQUENCY_FloorToStep(uint32_t Upper, uint32_t Step, uint32_t Lower); uint32_t FREQUENCY_FloorToStep(uint32_t Upper, uint32_t Step, uint32_t Lower);

View File

@ -49,7 +49,7 @@ void FUNCTION_Init(void)
{ {
g_current_code_type = g_selected_code_type; g_current_code_type = g_selected_code_type;
if (g_css_scan_mode == CSS_SCAN_MODE_OFF) if (g_css_scan_mode == CSS_SCAN_MODE_OFF)
g_current_code_type = g_rx_vfo->am_mode ? CODE_TYPE_NONE : g_rx_vfo->pRX->code_type; g_current_code_type = g_rx_vfo->am_mode ? CODE_TYPE_NONE : g_rx_vfo->p_rx->code_type;
} }
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
else else
@ -58,9 +58,9 @@ void FUNCTION_Init(void)
DTMF_clear_RX(); DTMF_clear_RX();
g_CxCSS_tail_found = false; g_cxcss_tail_found = false;
g_CDCSS_lost = false; g_cdcss_lost = false;
g_CTCSS_lost = false; g_ctcss_lost = false;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
g_vox_lost = false; g_vox_lost = false;

25
misc.c
View File

@ -156,6 +156,11 @@ volatile bool g_tx_timeout_reached;
volatile uint16_t g_tail_tone_elimination_count_down_10ms; volatile uint16_t g_tail_tone_elimination_count_down_10ms;
bool g_scan_pause_mode;
volatile bool g_scan_schedule_scan_listen = true;
volatile uint16_t g_scan_pause_delay_in_10ms;
scan_state_dir_t g_scan_state_dir;
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
volatile uint16_t g_noaa_count_down_10ms; volatile uint16_t g_noaa_count_down_10ms;
#endif #endif
@ -201,10 +206,10 @@ bool g_flag_save_channel;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
bool g_flag_SaveFM; bool g_flag_SaveFM;
#endif #endif
bool g_CDCSS_lost; bool g_cdcss_lost;
uint8_t g_CDCSS_code_type; uint8_t g_cdcss_code_type;
bool g_CTCSS_lost; bool g_ctcss_lost;
bool g_CxCSS_tail_found; bool g_cxcss_tail_found;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
bool g_vox_lost; bool g_vox_lost;
bool g_vox_noise_detected; bool g_vox_noise_detected;
@ -216,12 +221,13 @@ uint8_t g_flash_light_state;
volatile uint16_t g_flash_light_blink_counter; volatile uint16_t g_flash_light_blink_counter;
bool g_flag_end_tx; bool g_flag_end_tx;
uint16_t g_low_batteryCountdown; uint16_t g_low_batteryCountdown;
uint8_t g_next_channel;
reception_mode_t g_rx_reception_mode; reception_mode_t g_rx_reception_mode;
uint8_t g_restore_channel; uint8_t g_scan_next_channel;
scan_next_chan_t g_current_scan_list; uint8_t g_scan_restore_channel;
uint32_t g_restore_frequency; scan_next_chan_t g_scan_current_scan_list;
uint32_t g_scan_restore_frequency;
bool g_scan_keep_frequency;
bool g_rx_vfo_is_active; bool g_rx_vfo_is_active;
#ifdef ENABLE_ALARM #ifdef ENABLE_ALARM
@ -230,7 +236,6 @@ bool g_rx_vfo_is_active;
#endif #endif
uint8_t g_menu_list_count; uint8_t g_menu_list_count;
uint8_t g_backup_cross_vfo_rx_tx; uint8_t g_backup_cross_vfo_rx_tx;
uint8_t g_scan_delay_10ms;
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
bool g_is_noaa_mode; bool g_is_noaa_mode;
@ -241,8 +246,6 @@ bool g_update_display;
bool g_unhide_hidden = false; bool g_unhide_hidden = false;
uint8_t g_show_chan_prefix;
volatile bool g_next_time_slice; volatile bool g_next_time_slice;
volatile uint8_t g_found_CDCSS_count_down_10ms; volatile uint8_t g_found_CDCSS_count_down_10ms;
volatile uint8_t g_found_CTCSS_count_down_10ms; volatile uint8_t g_found_CTCSS_count_down_10ms;

31
misc.h
View File

@ -101,6 +101,13 @@ enum scan_next_chan_e {
}; };
typedef enum scan_next_chan_e scan_next_chan_t; typedef enum scan_next_chan_e scan_next_chan_t;
enum scan_state_dir_e {
SCAN_STATE_DIR_REVERSE = -1,
SCAN_STATE_DIR_OFF = 0,
SCAN_STATE_DIR_FORWARD = +1
};
typedef enum scan_state_dir_e scan_state_dir_t;
extern const uint8_t obfuscate_array[16]; extern const uint8_t obfuscate_array[16];
extern const uint8_t fm_resume_countdown_500ms; extern const uint8_t fm_resume_countdown_500ms;
@ -231,6 +238,11 @@ extern volatile bool g_tx_timeout_reached;
extern volatile uint16_t g_tail_tone_elimination_count_down_10ms; extern volatile uint16_t g_tail_tone_elimination_count_down_10ms;
extern bool g_scan_pause_mode;
extern volatile bool g_scan_schedule_scan_listen;
extern volatile uint16_t g_scan_pause_delay_in_10ms;
extern scan_state_dir_t g_scan_state_dir;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
extern volatile uint16_t g_fm_play_count_down_10ms; extern volatile uint16_t g_fm_play_count_down_10ms;
#endif #endif
@ -276,10 +288,10 @@ extern bool g_flag_save_channel;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
extern bool g_flag_SaveFM; extern bool g_flag_SaveFM;
#endif #endif
extern bool g_CDCSS_lost; extern bool g_cdcss_lost;
extern uint8_t g_CDCSS_code_type; extern uint8_t g_cdcss_code_type;
extern bool g_CTCSS_lost; extern bool g_ctcss_lost;
extern bool g_CxCSS_tail_found; extern bool g_cxcss_tail_found;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX
extern bool g_vox_lost; extern bool g_vox_lost;
extern bool g_vox_noise_detected; extern bool g_vox_noise_detected;
@ -291,19 +303,19 @@ extern uint8_t g_flash_light_state;
extern volatile uint16_t g_flash_light_blink_counter; extern volatile uint16_t g_flash_light_blink_counter;
extern bool g_flag_end_tx; extern bool g_flag_end_tx;
extern uint16_t g_low_batteryCountdown; extern uint16_t g_low_batteryCountdown;
extern uint8_t g_next_channel;
extern reception_mode_t g_rx_reception_mode; extern reception_mode_t g_rx_reception_mode;
extern uint8_t g_restore_channel; extern uint8_t g_scan_next_channel;
extern scan_next_chan_t g_current_scan_list; extern uint8_t g_scan_restore_channel;
extern uint32_t g_restore_frequency; extern scan_next_chan_t g_scan_current_scan_list;
extern uint32_t g_scan_restore_frequency;
extern bool g_scan_keep_frequency;
extern bool g_rx_vfo_is_active; extern bool g_rx_vfo_is_active;
extern uint8_t g_alarm_tone_counter; extern uint8_t g_alarm_tone_counter;
extern uint16_t g_alarm_running_counter; extern uint16_t g_alarm_running_counter;
extern uint8_t g_menu_list_count; extern uint8_t g_menu_list_count;
extern uint8_t g_backup_cross_vfo_rx_tx; extern uint8_t g_backup_cross_vfo_rx_tx;
extern uint8_t g_scan_delay_10ms;
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
extern bool g_is_noaa_mode; extern bool g_is_noaa_mode;
extern uint8_t g_noaa_channel; extern uint8_t g_noaa_channel;
@ -314,7 +326,6 @@ extern bool g_unhide_hidden;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
extern uint8_t g_fm_channel_position; extern uint8_t g_fm_channel_position;
#endif #endif
extern uint8_t g_show_chan_prefix;
extern volatile uint8_t g_found_CDCSS_count_down_10ms; extern volatile uint8_t g_found_CDCSS_count_down_10ms;
extern volatile uint8_t g_found_CTCSS_count_down_10ms; extern volatile uint8_t g_found_CTCSS_count_down_10ms;
#ifdef ENABLE_VOX #ifdef ENABLE_VOX

61
radio.c
View File

@ -41,7 +41,6 @@ vfo_info_t *g_current_vfo;
dcs_code_type_t g_selected_code_type; dcs_code_type_t g_selected_code_type;
dcs_code_type_t g_current_code_type; dcs_code_type_t g_current_code_type;
uint8_t g_selected_code; uint8_t g_selected_code;
step_setting_t g_step_setting;
vfo_state_t g_vfo_state[2]; vfo_state_t g_vfo_state[2];
bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO) bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
@ -119,17 +118,17 @@ void RADIO_InitInfo(vfo_info_t *pInfo, const uint8_t ChannelSave, const uint32_t
memset(pInfo, 0, sizeof(*pInfo)); memset(pInfo, 0, sizeof(*pInfo));
pInfo->band = FREQUENCY_GetBand(Frequency); pInfo->band = FREQUENCY_GetBand(Frequency);
pInfo->scanlist_1_participation = true; pInfo->scanlist_1_participation = true;
pInfo->scanlist_2_participation = true; pInfo->scanlist_2_participation = true;
pInfo->step_setting = STEP_12_5kHz; pInfo->step_setting = STEP_12_5kHz;
pInfo->step_freq = STEP_FREQ_TABLE[pInfo->step_setting]; pInfo->step_freq = STEP_FREQ_TABLE[pInfo->step_setting];
pInfo->channel_save = ChannelSave; pInfo->channel_save = ChannelSave;
pInfo->frequency_reverse = false; pInfo->frequency_reverse = false;
pInfo->output_power = OUTPUT_POWER_LOW; pInfo->output_power = OUTPUT_POWER_LOW;
pInfo->freq_config_rx.frequency = Frequency; pInfo->freq_config_rx.frequency = Frequency;
pInfo->freq_config_tx.frequency = Frequency; pInfo->freq_config_tx.frequency = Frequency;
pInfo->pRX = &pInfo->freq_config_rx; pInfo->p_rx = &pInfo->freq_config_rx;
pInfo->pTX = &pInfo->freq_config_tx; pInfo->p_tx = &pInfo->freq_config_tx;
pInfo->compander = 0; // off pInfo->compander = 0; // off
if (ChannelSave == (FREQ_CHANNEL_FIRST + BAND2_108MHz)) if (ChannelSave == (FREQ_CHANNEL_FIRST + BAND2_108MHz))
@ -164,7 +163,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (Channel >= NOAA_CHANNEL_FIRST) if (Channel >= NOAA_CHANNEL_FIRST)
{ {
RADIO_InitInfo(pRadio, g_eeprom.screen_channel[VFO], NoaaFrequencyTable[Channel - NOAA_CHANNEL_FIRST]); RADIO_InitInfo(pRadio, g_eeprom.screen_channel[VFO], NOAA_FREQUENCY_TABLE[Channel - NOAA_CHANNEL_FIRST]);
if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) if (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF)
return; return;
@ -178,7 +177,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
if (Channel <= USER_CHANNEL_LAST) if (Channel <= USER_CHANNEL_LAST)
{ {
Channel = RADIO_FindNextChannel(Channel, SCAN_FWD, false, VFO); Channel = RADIO_FindNextChannel(Channel, SCAN_STATE_DIR_FORWARD, false, VFO);
if (Channel == 0xFF) if (Channel == 0xFF)
{ {
Channel = g_eeprom.freq_channel[VFO]; Channel = g_eeprom.freq_channel[VFO];
@ -394,18 +393,18 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
if (!g_eeprom.vfo_info[VFO].frequency_reverse) if (!g_eeprom.vfo_info[VFO].frequency_reverse)
{ {
g_eeprom.vfo_info[VFO].pRX = &g_eeprom.vfo_info[VFO].freq_config_rx; g_eeprom.vfo_info[VFO].p_rx = &g_eeprom.vfo_info[VFO].freq_config_rx;
g_eeprom.vfo_info[VFO].pTX = &g_eeprom.vfo_info[VFO].freq_config_tx; g_eeprom.vfo_info[VFO].p_tx = &g_eeprom.vfo_info[VFO].freq_config_tx;
} }
else else
{ {
g_eeprom.vfo_info[VFO].pRX = &g_eeprom.vfo_info[VFO].freq_config_tx; g_eeprom.vfo_info[VFO].p_rx = &g_eeprom.vfo_info[VFO].freq_config_tx;
g_eeprom.vfo_info[VFO].pTX = &g_eeprom.vfo_info[VFO].freq_config_rx; g_eeprom.vfo_info[VFO].p_tx = &g_eeprom.vfo_info[VFO].freq_config_rx;
} }
if (!g_setting_350_enable) if (!g_setting_350_enable)
{ {
freq_config_t *pConfig = g_eeprom.vfo_info[VFO].pRX; freq_config_t *pConfig = g_eeprom.vfo_info[VFO].p_rx;
if (pConfig->frequency >= 35000000 && pConfig->frequency < 40000000) // not allowed in this range if (pConfig->frequency >= 35000000 && pConfig->frequency < 40000000) // not allowed in this range
pConfig->frequency = 43300000; // hop onto the ham band pConfig->frequency = 43300000; // hop onto the ham band
} }
@ -426,12 +425,12 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo) void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo)
{ {
uint8_t TX_power[3]; uint8_t TX_power[3];
FREQUENCY_Band_t Band; frequency_band_t Band;
// ******************************* // *******************************
// squelch // squelch
Band = FREQUENCY_GetBand(pInfo->pRX->frequency); Band = FREQUENCY_GetBand(pInfo->p_rx->frequency);
uint16_t Base = (Band < BAND4_174MHz) ? 0x1E60 : 0x1E00; uint16_t Base = (Band < BAND4_174MHz) ? 0x1E60 : 0x1E00;
if (g_eeprom.squelch_level == 0) if (g_eeprom.squelch_level == 0)
@ -522,7 +521,7 @@ void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo)
// 1F20 5A 5A 5A 64 64 64 8F 91 8A FF FF FF FF FF FF FF .. 400 MHz // 1F20 5A 5A 5A 64 64 64 8F 91 8A FF FF FF FF FF FF FF .. 400 MHz
// 1F30 32 32 32 64 64 64 8C 8C 8C FF FF FF FF FF FF FF .. 470 MHz // 1F30 32 32 32 64 64 64 8C 8C 8C FF FF FF FF FF FF FF .. 470 MHz
Band = FREQUENCY_GetBand(pInfo->pTX->frequency); Band = FREQUENCY_GetBand(pInfo->p_tx->frequency);
EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->output_power * 3), TX_power, 3); EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->output_power * 3), TX_power, 3);
@ -533,7 +532,7 @@ void RADIO_ConfigureSquelchAndOutputPower(vfo_info_t *pInfo)
FREQ_BAND_TABLE[Band].lower, FREQ_BAND_TABLE[Band].lower,
(FREQ_BAND_TABLE[Band].lower + FREQ_BAND_TABLE[Band].upper) / 2, (FREQ_BAND_TABLE[Band].lower + FREQ_BAND_TABLE[Band].upper) / 2,
FREQ_BAND_TABLE[Band].upper, FREQ_BAND_TABLE[Band].upper,
pInfo->pTX->frequency); pInfo->p_tx->frequency);
// ******************************* // *******************************
} }
@ -633,11 +632,11 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) || !g_is_noaa_mode) if (IS_NOT_NOAA_CHANNEL(g_rx_vfo->channel_save) || !g_is_noaa_mode)
Frequency = g_rx_vfo->pRX->frequency; Frequency = g_rx_vfo->p_rx->frequency;
else else
Frequency = NoaaFrequencyTable[g_noaa_channel]; Frequency = NOAA_FREQUENCY_TABLE[g_noaa_channel];
#else #else
Frequency = g_rx_vfo->pRX->frequency; Frequency = g_rx_vfo->p_rx->frequency;
#endif #endif
BK4819_SetFrequency(Frequency); BK4819_SetFrequency(Frequency);
@ -666,8 +665,8 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
uint8_t Code = g_selected_code; uint8_t Code = g_selected_code;
if (g_css_scan_mode == CSS_SCAN_MODE_OFF) if (g_css_scan_mode == CSS_SCAN_MODE_OFF)
{ {
code_type = g_rx_vfo->pRX->code_type; code_type = g_rx_vfo->p_rx->code_type;
Code = g_rx_vfo->pRX->code; Code = g_rx_vfo->p_rx->code;
} }
switch (code_type) switch (code_type)
@ -865,7 +864,7 @@ void RADIO_SetTxParameters(void)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
BK4819_SetFrequency(g_current_vfo->pTX->frequency); BK4819_SetFrequency(g_current_vfo->p_tx->frequency);
// TX compressor // TX compressor
BK4819_SetCompander((g_rx_vfo->am_mode == 0 && (g_rx_vfo->compander == 1 || g_rx_vfo->compander >= 3)) ? g_rx_vfo->compander : 0); BK4819_SetCompander((g_rx_vfo->am_mode == 0 && (g_rx_vfo->compander == 1 || g_rx_vfo->compander >= 3)) ? g_rx_vfo->compander : 0);
@ -874,17 +873,17 @@ void RADIO_SetTxParameters(void)
SYSTEM_DelayMs(10); SYSTEM_DelayMs(10);
BK4819_PickRXFilterPathBasedOnFrequency(g_current_vfo->pTX->frequency); BK4819_PickRXFilterPathBasedOnFrequency(g_current_vfo->p_tx->frequency);
BK4819_set_GPIO_pin(BK4819_GPIO5_PIN1, true); BK4819_set_GPIO_pin(BK4819_GPIO5_PIN1, true);
SYSTEM_DelayMs(5); SYSTEM_DelayMs(5);
BK4819_SetupPowerAmplifier(g_current_vfo->txp_calculated_setting, g_current_vfo->pTX->frequency); BK4819_SetupPowerAmplifier(g_current_vfo->txp_calculated_setting, g_current_vfo->p_tx->frequency);
SYSTEM_DelayMs(10); SYSTEM_DelayMs(10);
switch (g_current_vfo->pTX->code_type) switch (g_current_vfo->p_tx->code_type)
{ {
default: default:
case CODE_TYPE_NONE: case CODE_TYPE_NONE:
@ -892,12 +891,12 @@ void RADIO_SetTxParameters(void)
break; break;
case CODE_TYPE_CONTINUOUS_TONE: case CODE_TYPE_CONTINUOUS_TONE:
BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[g_current_vfo->pTX->code]); BK4819_SetCTCSSFrequency(CTCSS_OPTIONS[g_current_vfo->p_tx->code]);
break; break;
case CODE_TYPE_DIGITAL: case CODE_TYPE_DIGITAL:
case CODE_TYPE_REVERSE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL:
BK4819_SetCDCSSCodeWord(DCS_GetGolayCodeWord(g_current_vfo->pTX->code_type, g_current_vfo->pTX->code)); BK4819_SetCDCSSCodeWord(DCS_GetGolayCodeWord(g_current_vfo->p_tx->code_type, g_current_vfo->p_tx->code));
break; break;
} }
} }
@ -981,7 +980,7 @@ void RADIO_PrepareTX(void)
State = VFO_STATE_TX_DISABLE; State = VFO_STATE_TX_DISABLE;
} }
else else
if (TX_freq_check(g_current_vfo->pTX->frequency) == 0) if (TX_freq_check(g_current_vfo->p_tx->frequency) == 0)
{ // TX frequency is allowed { // TX frequency is allowed
if (g_current_vfo->busy_channel_lock && g_current_function == FUNCTION_RECEIVE) if (g_current_vfo->busy_channel_lock && g_current_function == FUNCTION_RECEIVE)
State = VFO_STATE_BUSY; // busy RX'ing a station State = VFO_STATE_BUSY; // busy RX'ing a station
@ -1052,7 +1051,7 @@ void RADIO_PrepareTX(void)
void RADIO_EnableCxCSS(void) void RADIO_EnableCxCSS(void)
{ {
switch (g_current_vfo->pTX->code_type) switch (g_current_vfo->p_tx->code_type)
{ {
default: default:
case CODE_TYPE_NONE: case CODE_TYPE_NONE:

View File

@ -20,7 +20,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "app/scanner.h" #include "misc.h"
#include "dcs.h" #include "dcs.h"
#include "frequencies.h" #include "frequencies.h"
@ -74,8 +74,8 @@ typedef struct vfo_info_t
{ {
freq_config_t freq_config_rx; freq_config_t freq_config_rx;
freq_config_t freq_config_tx; freq_config_t freq_config_tx;
freq_config_t *pRX; freq_config_t *p_rx;
freq_config_t *pTX; freq_config_t *p_tx;
uint32_t tx_offset_freq; uint32_t tx_offset_freq;
uint16_t step_freq; uint16_t step_freq;
@ -124,8 +124,6 @@ extern dcs_code_type_t g_selected_code_type;
extern dcs_code_type_t g_current_code_type; extern dcs_code_type_t g_current_code_type;
extern uint8_t g_selected_code; extern uint8_t g_selected_code;
extern step_setting_t g_step_setting;
extern vfo_state_t g_vfo_state[2]; extern vfo_state_t g_vfo_state[2];
bool RADIO_CheckValidChannel(uint16_t ChNum, bool bCheckScanList, uint8_t RadioNum); bool RADIO_CheckValidChannel(uint16_t ChNum, bool bCheckScanList, uint8_t RadioNum);

View File

@ -78,20 +78,20 @@ void SystickHandler(void)
if (g_current_function == FUNCTION_POWER_SAVE) if (g_current_function == FUNCTION_POWER_SAVE)
DECREMENT_AND_TRIGGER(g_power_save_10ms, g_power_save_expired); DECREMENT_AND_TRIGGER(g_power_save_10ms, g_power_save_expired);
if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch != DUAL_WATCH_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch != DUAL_WATCH_OFF)
if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT && g_current_function != FUNCTION_RECEIVE) if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT && g_current_function != FUNCTION_RECEIVE)
DECREMENT_AND_TRIGGER(g_dual_watch_count_down_10ms, g_schedule_dual_watch); DECREMENT_AND_TRIGGER(g_dual_watch_count_down_10ms, g_schedule_dual_watch);
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
if (g_scan_state_dir == SCAN_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch == DUAL_WATCH_OFF) if (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF && g_eeprom.dual_watch == DUAL_WATCH_OFF)
if (g_is_noaa_mode && g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT) if (g_is_noaa_mode && g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT)
if (g_current_function != FUNCTION_RECEIVE) if (g_current_function != FUNCTION_RECEIVE)
DECREMENT_AND_TRIGGER(g_noaa_count_down_10ms, g_schedule_noaa); DECREMENT_AND_TRIGGER(g_noaa_count_down_10ms, g_schedule_noaa);
#endif #endif
if (g_scan_state_dir != SCAN_OFF || g_css_scan_mode == CSS_SCAN_MODE_SCANNING) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_css_scan_mode == CSS_SCAN_MODE_SCANNING)
if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT) if (g_current_function != FUNCTION_MONITOR && g_current_function != FUNCTION_TRANSMIT)
DECREMENT_AND_TRIGGER(g_scan_pause_delay_in_10ms, g_schedule_scan_listen); DECREMENT_AND_TRIGGER(g_scan_pause_delay_in_10ms, g_scan_schedule_scan_listen);
DECREMENT_AND_TRIGGER(g_tail_tone_elimination_count_down_10ms, g_flag_tail_tone_elimination_complete); DECREMENT_AND_TRIGGER(g_tail_tone_elimination_count_down_10ms, g_flag_tail_tone_elimination_complete);

View File

@ -599,12 +599,12 @@ void UI_DisplayMain(void)
} }
else else
{ {
uint32_t frequency = g_eeprom.vfo_info[vfo_num].pRX->frequency; uint32_t frequency = g_eeprom.vfo_info[vfo_num].p_rx->frequency;
if (g_current_function == FUNCTION_TRANSMIT) if (g_current_function == FUNCTION_TRANSMIT)
{ // transmitting { // transmitting
channel = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo; channel = (g_eeprom.cross_vfo_rx_tx == CROSS_BAND_OFF) ? g_eeprom.rx_vfo : g_eeprom.tx_vfo;
if (channel == vfo_num) if (channel == vfo_num)
frequency = g_eeprom.vfo_info[vfo_num].pTX->frequency; frequency = g_eeprom.vfo_info[vfo_num].p_tx->frequency;
} }
if (g_eeprom.screen_channel[vfo_num] <= USER_CHANNEL_LAST) if (g_eeprom.screen_channel[vfo_num] <= USER_CHANNEL_LAST)
@ -741,7 +741,7 @@ void UI_DisplayMain(void)
} }
else else
{ // or show the CTCSS/DCS symbol { // or show the CTCSS/DCS symbol
const freq_config_t *pConfig = (mode == 1) ? g_eeprom.vfo_info[vfo_num].pTX : g_eeprom.vfo_info[vfo_num].pRX; const freq_config_t *pConfig = (mode == 1) ? g_eeprom.vfo_info[vfo_num].p_tx : g_eeprom.vfo_info[vfo_num].p_rx;
const unsigned int code_type = pConfig->code_type; const unsigned int code_type = pConfig->code_type;
const char *code_list[] = {"", "CT", "DCS", "DCR"}; const char *code_list[] = {"", "CT", "DCS", "DCR"};
if (code_type < ARRAY_SIZE(code_list)) if (code_type < ARRAY_SIZE(code_list))

View File

@ -29,12 +29,12 @@
#include "ui/scanner.h" #include "ui/scanner.h"
#include "ui/ui.h" #include "ui/ui.h"
void UI_DisplayScanner(void) void UI_DisplaySearch(void)
{ {
char String[17]; char String[17];
bool text_centered = false; bool text_centered = false;
if (g_screen_to_display != DISPLAY_SCANNER) if (g_screen_to_display != DISPLAY_SEARCH)
return; return;
// clear display buffer // clear display buffer
@ -46,27 +46,27 @@ void UI_DisplayScanner(void)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
switch (g_scan_css_state) switch (g_search_css_state)
{ {
default: default:
case SCAN_CSS_STATE_OFF: case SEARCH_CSS_STATE_OFF:
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ {
strcpy(String, "FREQ scanning"); strcpy(String, "FREQ scanning");
break; break;
} }
case SCAN_CSS_STATE_SCANNING: case SEARCH_CSS_STATE_SCANNING:
case SCAN_CSS_STATE_FOUND: case SEARCH_CSS_STATE_FOUND:
case SCAN_CSS_STATE_FAILED: case SEARCH_CSS_STATE_FAILED:
case SCAN_CSS_STATE_REPEAT: case SEARCH_CSS_STATE_REPEAT:
{ {
const uint32_t freq = g_scan_frequency; const uint32_t freq = g_search_frequency;
sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000); sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000);
} }
break; break;
case SCAN_CSS_STATE_FREQ_FAILED: case SEARCH_CSS_STATE_FREQ_FAILED:
strcpy(String, "FREQ none found"); strcpy(String, "FREQ none found");
break; break;
} }
@ -80,37 +80,37 @@ void UI_DisplayScanner(void)
memset(String, 0, sizeof(String)); memset(String, 0, sizeof(String));
switch (g_scan_css_state) switch (g_search_css_state)
{ {
default: default:
case SCAN_CSS_STATE_OFF: case SEARCH_CSS_STATE_OFF:
strcpy(String, "CODE"); strcpy(String, "CODE");
break; break;
case SCAN_CSS_STATE_SCANNING: case SEARCH_CSS_STATE_SCANNING:
strcpy(String, "CODE scanning"); strcpy(String, "CODE scanning");
break; break;
case SCAN_CSS_STATE_FOUND: case SEARCH_CSS_STATE_FOUND:
case SCAN_CSS_STATE_REPEAT: case SEARCH_CSS_STATE_REPEAT:
switch (g_scan_css_result_type) switch (g_search_css_result_type)
{ {
default: default:
case CODE_TYPE_NONE: case CODE_TYPE_NONE:
strcpy(String, "CODE none found"); strcpy(String, "CODE none found");
break; break;
case CODE_TYPE_CONTINUOUS_TONE: case CODE_TYPE_CONTINUOUS_TONE:
sprintf(String, "CTCSS %u.%uHz", CTCSS_OPTIONS[g_scan_css_result_code] / 10, CTCSS_OPTIONS[g_scan_css_result_code] % 10); sprintf(String, "CTCSS %u.%uHz", CTCSS_OPTIONS[g_search_css_result_code] / 10, CTCSS_OPTIONS[g_search_css_result_code] % 10);
break; break;
case CODE_TYPE_DIGITAL: case CODE_TYPE_DIGITAL:
case CODE_TYPE_REVERSE_DIGITAL: case CODE_TYPE_REVERSE_DIGITAL:
sprintf(String, "CDCSS D%03oN", DCS_OPTIONS[g_scan_css_result_code]); sprintf(String, "CDCSS D%03oN", DCS_OPTIONS[g_search_css_result_code]);
break; break;
} }
break; break;
case SCAN_CSS_STATE_FAILED: case SEARCH_CSS_STATE_FAILED:
strcpy(String, "CODE none found"); strcpy(String, "CODE none found");
break; break;
} }
@ -125,36 +125,36 @@ void UI_DisplayScanner(void)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough=" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
switch (g_scanner_edit_state) switch (g_search_edit_state)
{ {
default: default:
case SCAN_EDIT_STATE_NONE: case SEARCH_EDIT_STATE_NONE:
switch (g_scan_css_state) switch (g_search_css_state)
{ {
default: default:
case SCAN_CSS_STATE_OFF: case SEARCH_CSS_STATE_OFF:
case SCAN_CSS_STATE_SCANNING: // rolling indicator case SEARCH_CSS_STATE_SCANNING: // rolling indicator
memset(String, 0, sizeof(String)); memset(String, 0, sizeof(String));
memset(String, '.', 15); memset(String, '.', 15);
String[(g_scan_freq_css_timer_10ms / 32) % 15] = '#'; String[(g_search_freq_css_timer_10ms / 32) % 15] = '#';
break; break;
case SCAN_CSS_STATE_FOUND: case SEARCH_CSS_STATE_FOUND:
strcpy(String, "* repeat M save"); strcpy(String, "* repeat M save");
text_centered = true; text_centered = true;
break; break;
case SCAN_CSS_STATE_FAILED: case SEARCH_CSS_STATE_FAILED:
if (!g_scan_single_frequency) if (!g_search_single_frequency)
{ {
strcpy(String, "* repeat M save"); strcpy(String, "* repeat M save");
text_centered = true; text_centered = true;
break; break;
} }
case SCAN_CSS_STATE_FREQ_FAILED: case SEARCH_CSS_STATE_FREQ_FAILED:
case SCAN_CSS_STATE_REPEAT: case SEARCH_CSS_STATE_REPEAT:
strcpy(String, "* repeat"); strcpy(String, "* repeat");
text_centered = true; text_centered = true;
break; break;
@ -162,18 +162,18 @@ void UI_DisplayScanner(void)
break; break;
case SCAN_EDIT_STATE_SAVE_CHAN: case SEARCH_EDIT_STATE_SAVE_CHAN:
strcpy(String, "SAVE "); strcpy(String, "SAVE ");
{ {
char s[11]; char s[11];
BOARD_fetchChannelName(s, g_scan_channel); BOARD_fetchChannelName(s, g_search_channel);
if (s[0] == 0) if (s[0] == 0)
UI_GenerateChannelStringEx(s, g_show_chan_prefix ? "CH-" : "", g_scan_channel); UI_GenerateChannelStringEx(s, g_search_show_chan_prefix ? "CH-" : "", g_search_channel);
strcat(String, s); strcat(String, s);
} }
break; break;
case SCAN_EDIT_STATE_SAVE_CONFIRM: case SEARCH_EDIT_STATE_SAVE_CONFIRM:
strcpy(String, "* repeat Save ?"); strcpy(String, "* repeat Save ?");
text_centered = true; text_centered = true;
break; break;

View File

@ -17,7 +17,7 @@
#ifndef UI_SCANNER_H #ifndef UI_SCANNER_H
#define UI_SCANNER_H #define UI_SCANNER_H
void UI_DisplayScanner(void); void UI_DisplaySearch(void);
#endif #endif

View File

@ -95,9 +95,9 @@ void UI_DisplayStatus(const bool test_display)
else else
#endif #endif
// SCAN indicator // SCAN indicator
if (g_scan_state_dir != SCAN_OFF || g_screen_to_display == DISPLAY_SCANNER || test_display) if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_screen_to_display == DISPLAY_SEARCH || test_display)
{ {
if (g_next_channel <= USER_CHANNEL_LAST) if (g_scan_next_channel <= USER_CHANNEL_LAST)
{ // channel mode { // channel mode
if (g_eeprom.scan_list_default == 0) if (g_eeprom.scan_list_default == 0)
UI_PrintStringSmallBuffer("1", line + x); UI_PrintStringSmallBuffer("1", line + x);

View File

@ -61,8 +61,8 @@ void GUI_DisplayScreen(void)
UI_DisplayMenu(); UI_DisplayMenu();
break; break;
case DISPLAY_SCANNER: case DISPLAY_SEARCH:
UI_DisplayScanner(); UI_DisplaySearch();
break; break;
#ifdef ENABLE_AIRCOPY #ifdef ENABLE_AIRCOPY
@ -88,7 +88,7 @@ void GUI_SelectNextDisplay(gui_display_type_t Display)
g_input_box_index = 0; g_input_box_index = 0;
g_is_in_sub_menu = false; g_is_in_sub_menu = false;
g_css_scan_mode = CSS_SCAN_MODE_OFF; g_css_scan_mode = CSS_SCAN_MODE_OFF;
g_scan_state_dir = SCAN_OFF; g_scan_state_dir = SCAN_STATE_DIR_OFF;
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
g_fm_scan_state = FM_SCAN_OFF; g_fm_scan_state = FM_SCAN_OFF;
#endif #endif

View File

@ -25,7 +25,7 @@ enum gui_display_type_e
DISPLAY_MAIN = 0, DISPLAY_MAIN = 0,
DISPLAY_FM, DISPLAY_FM,
DISPLAY_MENU, DISPLAY_MENU,
DISPLAY_SCANNER, DISPLAY_SEARCH,
DISPLAY_AIRCOPY, DISPLAY_AIRCOPY,
DISPLAY_INVALID // 0xff DISPLAY_INVALID // 0xff
}; };