mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 14:21:25 +03:00
Fixed F+4 and F+* freq/ctcss/cdcss search functions
This commit is contained in:
parent
75d4f13d7b
commit
bc416c7433
12
Makefile
12
Makefile
@ -31,8 +31,8 @@ ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1
|
||||
ENABLE_BOOT_BEEPS := 0
|
||||
ENABLE_SHOW_CHARGE_LEVEL := 0
|
||||
ENABLE_REVERSE_BAT_SYMBOL := 1
|
||||
ENABLE_CODE_SCAN_TIMEOUT := 0
|
||||
ENABLE_FREQ_CODE_SCAN_TIMEOUT := 1
|
||||
ENABLE_FREQ_SEARCH_TIMEOUT := 0
|
||||
ENABLE_CODE_SEARCH_TIMEOUT := 1
|
||||
ENABLE_AM_FIX := 1
|
||||
ENABLE_AM_FIX_SHOW_DATA := 1
|
||||
ENABLE_SQUELCH_MORE_SENSITIVE := 1
|
||||
@ -312,11 +312,11 @@ endif
|
||||
ifeq ($(ENABLE_REVERSE_BAT_SYMBOL),1)
|
||||
CFLAGS += -DENABLE_REVERSE_BAT_SYMBOL
|
||||
endif
|
||||
ifeq ($(ENABLE_CODE_SCAN_TIMEOUT),1)
|
||||
CFLAGS += -DENABLE_CODE_SCAN_TIMEOUT
|
||||
ifeq ($(ENABLE_CODE_SEARCH_TIMEOUT),1)
|
||||
CFLAGS += -DENABLE_CODE_SEARCH_TIMEOUT
|
||||
endif
|
||||
ifeq ($(ENABLE_FREQ_CODE_SCAN_TIMEOUT),1)
|
||||
CFLAGS += -DENABLE_FREQ_CODE_SCAN_TIMEOUT
|
||||
ifeq ($(ENABLE_FREQ_SEARCH_TIMEOUT),1)
|
||||
CFLAGS += -DENABLE_FREQ_SEARCH_TIMEOUT
|
||||
endif
|
||||
ifeq ($(ENABLE_AM_FIX),1)
|
||||
CFLAGS += -DENABLE_AM_FIX
|
||||
|
@ -50,7 +50,7 @@ ENABLE_VOX := 1 voice operated transmission
|
||||
ENABLE_ALARM := 1 TX alarms
|
||||
ENABLE_1750HZ := 1 side key 1750Hz TX tone (older style repeater access)
|
||||
ENABLE_PWRON_PASSWORD := 0 '1' = allow power-on password
|
||||
ENABLE_RESET_AES_KEY := 1 '1' = reset/clear the AES key stored in the eeprom
|
||||
ENABLE_RESET_AES_KEY := 1 '1' = reset/clear the AES key stored in the eeprom (only if it's set)
|
||||
ENABLE_BIG_FREQ := 0 big font frequencies (like original QS firmware)
|
||||
ENABLE_SMALL_BOLD := 1 bold channel name/no. (when name + freq channel display mode)
|
||||
ENABLE_KEEP_MEM_NAME := 1 maintain channel name when (re)saving memory channel
|
||||
@ -62,9 +62,8 @@ ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather
|
||||
ENABLE_BOOT_BEEPS := 0 gives user audio feedback on volume knob position at boot-up
|
||||
ENABLE_SHOW_CHARGE_LEVEL := 0 show the charge level when the radio is on charge
|
||||
ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right)
|
||||
ENABLE_CODE_SCAN_TIMEOUT := 0 timeout if CTCSS/CDCSS is not found
|
||||
ENABLE_FREQ_CODE_SCAN_TIMEOUT := 1 timeout if CTCSS/CDCSS is not found after a successful frequency scan
|
||||
ENABLE_FREQ_CODE_ROUNDING := 0 rounds the detected RF frequency to the nearest step size in use - F+4 scan mode
|
||||
ENABLE_FREQ_SEARCH_TIMEOUT := 1 timeout if FREQ not found
|
||||
ENABLE_CODE_SEARCH_TIMEOUT := 0 timeout if CTCSS/CDCSS not found
|
||||
ENABLE_AM_FIX := 1 dynamically adjust the front end gains when in AM mode to helo prevent AM demodulator saturation, ignore the on-screen RSSI level (for now)
|
||||
ENABLE_AM_FIX_SHOW_DATA := 1 show debug data for the AM fix (still tweaking it)
|
||||
ENABLE_SQUELCH_MORE_SENSITIVE := 1 make squelch levels a little bit more sensitive - I plan to let user adjust the values themselves
|
||||
|
80
app/app.c
80
app/app.c
@ -202,7 +202,7 @@ static void APP_HandleIncoming(void)
|
||||
return;
|
||||
}
|
||||
|
||||
flag = (g_scan_state_dir == SCAN_OFF && g_current_code_type == CODE_TYPE_OFF);
|
||||
flag = (g_scan_state_dir == SCAN_OFF && g_current_code_type == CODE_TYPE_NONE);
|
||||
|
||||
#ifdef ENABLE_NOAA
|
||||
if (IS_NOAA_CHANNEL(g_rx_vfo->channel_save) && g_noaa_count_down_10ms > 0)
|
||||
@ -282,7 +282,7 @@ static void APP_HandleReceive(void)
|
||||
switch (g_current_code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
case CODE_TYPE_NONE:
|
||||
break;
|
||||
|
||||
case CODE_TYPE_CONTINUOUS_TONE:
|
||||
@ -317,7 +317,7 @@ static void APP_HandleReceive(void)
|
||||
{
|
||||
switch (g_current_code_type)
|
||||
{
|
||||
case CODE_TYPE_OFF:
|
||||
case CODE_TYPE_NONE:
|
||||
if (g_eeprom.squelch_level)
|
||||
{
|
||||
if (g_CxCSS_tail_found)
|
||||
@ -942,7 +942,7 @@ void APP_EndTransmission(void)
|
||||
|
||||
RADIO_SendEndOfTransmission();
|
||||
|
||||
if (g_current_vfo->pTX->code_type != CODE_TYPE_OFF)
|
||||
if (g_current_vfo->pTX->code_type != CODE_TYPE_NONE)
|
||||
{ // CTCSS/DCS is enabled
|
||||
|
||||
//if (g_eeprom.tail_note_elimination && g_eeprom.repeater_tail_tone_elimination > 0)
|
||||
@ -1099,7 +1099,7 @@ void APP_Update(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_current_code_type == CODE_TYPE_OFF && g_current_function == FUNCTION_INCOMING)
|
||||
if (g_current_code_type == CODE_TYPE_NONE && g_current_function == FUNCTION_INCOMING)
|
||||
APP_StartListening(g_monitor_enabled ? FUNCTION_MONITOR : FUNCTION_RECEIVE, true);
|
||||
else
|
||||
USER_NextChannel(); // switch to next channel
|
||||
@ -1346,7 +1346,7 @@ void APP_CheckKeys(void)
|
||||
APP_ProcessKey(KEY_PTT, true, false);
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf(" ptt key %3u %u %u\r\n", KEY_PTT, g_ptt_is_pressed, g_ptt_was_released);
|
||||
//UART_printf(" ptt key %3u %u %u\r\n", KEY_PTT, g_ptt_is_pressed, g_ptt_was_released);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -1367,7 +1367,7 @@ void APP_CheckKeys(void)
|
||||
APP_ProcessKey(KEY_PTT, false, false);
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf(" ptt key %3u %u %u\r\n", KEY_PTT, g_ptt_is_pressed, g_ptt_was_released);
|
||||
//UART_printf(" ptt key %3u %u %u\r\n", KEY_PTT, g_ptt_is_pressed, g_ptt_was_released);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -1403,7 +1403,7 @@ void APP_CheckKeys(void)
|
||||
{ // key now fully released
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf(" old key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
//UART_printf(" old key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AIRCOPY
|
||||
@ -1441,7 +1441,7 @@ void APP_CheckKeys(void)
|
||||
g_key_held = false;
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf("\r\n new key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
//UART_printf("\r\n new key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
#endif
|
||||
|
||||
g_key_prev = key;
|
||||
@ -1468,7 +1468,7 @@ void APP_CheckKeys(void)
|
||||
g_key_held = true;
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf("long key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
//UART_printf("long key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AIRCOPY
|
||||
@ -1492,7 +1492,7 @@ void APP_CheckKeys(void)
|
||||
g_key_debounce_repeat -= key_repeat_10ms;
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf("rept key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
//UART_printf("rept key %3u %3u, %3u %3u, %u\r\n", key, g_key_prev, g_key_debounce_press, g_key_debounce_repeat, g_key_held);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AIRCOPY
|
||||
@ -1755,15 +1755,35 @@ void APP_TimeSlice10ms(void)
|
||||
case SCAN_CSS_STATE_OFF:
|
||||
|
||||
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
|
||||
{ // freq/css scan timeout
|
||||
#ifdef ENABLE_CODE_SCAN_TIMEOUT
|
||||
{ // FREQ/CTCSS/CDCSS search timeout
|
||||
|
||||
if (!g_scan_single_frequency)
|
||||
{ // FREQ search timeout
|
||||
#ifdef ENABLE_FREQ_SEARCH_TIMEOUT
|
||||
BK4819_DisableFrequencyScan();
|
||||
|
||||
g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{ // CTCSS/CDCSS search timeout
|
||||
#ifdef ENABLE_CODE_SEARCH_TIMEOUT
|
||||
BK4819_DisableFrequencyScan();
|
||||
|
||||
g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (!BK4819_GetFrequencyScanResult(&Result))
|
||||
break; // still scanning
|
||||
@ -1786,14 +1806,15 @@ void APP_TimeSlice10ms(void)
|
||||
|
||||
BK4819_SetScanFrequency(g_scan_frequency);
|
||||
|
||||
g_scan_css_result_code = 0xFF;
|
||||
g_scan_css_result_type = 0xFF;
|
||||
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_scan_freq_css_timer_10ms = 0;
|
||||
g_scan_css_state = SCAN_CSS_STATE_SCANNING;
|
||||
|
||||
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
||||
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
}
|
||||
@ -1804,18 +1825,24 @@ void APP_TimeSlice10ms(void)
|
||||
case SCAN_CSS_STATE_SCANNING:
|
||||
|
||||
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
|
||||
{ // timeout
|
||||
#if defined(ENABLE_CODE_SCAN_TIMEOUT)
|
||||
{ // CTCSS/CDCSS search timeout
|
||||
|
||||
#if defined(ENABLE_CODE_SEARCH_TIMEOUT)
|
||||
BK4819_Disable();
|
||||
g_scan_css_state = SCAN_CSS_STATE_FAILED;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
break;
|
||||
#elif defined(ENABLE_FREQ_CODE_SCAN_TIMEOUT)
|
||||
|
||||
#else
|
||||
if (!g_scan_single_frequency)
|
||||
{
|
||||
BK4819_Disable();
|
||||
g_scan_css_state = SCAN_CSS_STATE_FAILED;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
break;
|
||||
@ -1838,6 +1865,8 @@ void APP_TimeSlice10ms(void)
|
||||
g_scan_css_result_type = CODE_TYPE_DIGITAL;
|
||||
g_scan_css_state = SCAN_CSS_STATE_FOUND;
|
||||
g_scan_use_css_result = true;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
}
|
||||
@ -1855,6 +1884,8 @@ void APP_TimeSlice10ms(void)
|
||||
{
|
||||
g_scan_css_state = SCAN_CSS_STATE_FOUND;
|
||||
g_scan_use_css_result = true;
|
||||
|
||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||
g_update_status = true;
|
||||
g_update_display = true;
|
||||
}
|
||||
@ -1867,7 +1898,8 @@ void APP_TimeSlice10ms(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (g_scan_css_state == SCAN_CSS_STATE_OFF || g_scan_css_state == SCAN_CSS_STATE_SCANNING)
|
||||
if (g_scan_css_state == SCAN_CSS_STATE_OFF ||
|
||||
g_scan_css_state == SCAN_CSS_STATE_SCANNING)
|
||||
{ // re-start scan
|
||||
BK4819_SetScanFrequency(g_scan_frequency);
|
||||
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
||||
@ -1878,7 +1910,7 @@ void APP_TimeSlice10ms(void)
|
||||
|
||||
//case SCAN_CSS_STATE_FOUND:
|
||||
//case SCAN_CSS_STATE_FAILED:
|
||||
//case SCAN_CSS_STATE_FREQ_FAILED:
|
||||
//case SCAN_CSS_STATE_REPEAT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -2049,7 +2081,7 @@ void APP_TimeSlice500ms(void)
|
||||
(g_screen_to_display != DISPLAY_SCANNER ||
|
||||
g_scan_css_state == SCAN_CSS_STATE_FOUND ||
|
||||
g_scan_css_state == SCAN_CSS_STATE_FAILED ||
|
||||
g_scan_css_state == SCAN_CSS_STATE_FREQ_FAILED))
|
||||
g_scan_css_state == SCAN_CSS_STATE_REPEAT))
|
||||
{
|
||||
|
||||
if (g_eeprom.auto_keypad_lock &&
|
||||
@ -2114,7 +2146,7 @@ void APP_TimeSlice500ms(void)
|
||||
|
||||
if (disp == DISPLAY_INVALID)
|
||||
{
|
||||
#ifndef ENABLE_CODE_SCAN_TIMEOUT
|
||||
#ifndef ENABLE_CODE_SEARCH_TIMEOUT
|
||||
if (g_screen_to_display != DISPLAY_SCANNER)
|
||||
#endif
|
||||
disp = DISPLAY_MAIN;
|
||||
@ -2463,12 +2495,12 @@ static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const b
|
||||
}
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf("proc key 1 %3u %u %u %u %u\r\n", Key, key_pressed, key_held, g_fkey_pressed, flag);
|
||||
//UART_printf("proc key 1 %3u %u %u %u %u\r\n", Key, key_pressed, key_held, g_fkey_pressed, flag);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_printf("proc key 2 %3u %u %u %u %u\r\n", Key, key_pressed, key_held, g_fkey_pressed, flag);
|
||||
//UART_printf("proc key 2 %3u %u %u %u %u\r\n", Key, key_pressed, key_held, g_fkey_pressed, flag);
|
||||
#endif
|
||||
|
||||
if (!flag) // this flag is responsible for keys being ignored :(
|
||||
|
@ -411,7 +411,7 @@ void MENU_AcceptSetting(void)
|
||||
return;
|
||||
}
|
||||
Code = 0;
|
||||
pConfig->code_type = CODE_TYPE_OFF;
|
||||
pConfig->code_type = CODE_TYPE_NONE;
|
||||
}
|
||||
else
|
||||
if (g_sub_menu_selection < 105)
|
||||
@ -444,7 +444,7 @@ void MENU_AcceptSetting(void)
|
||||
}
|
||||
Code = 0;
|
||||
pConfig->code = Code;
|
||||
pConfig->code_type = CODE_TYPE_OFF;
|
||||
pConfig->code_type = CODE_TYPE_NONE;
|
||||
|
||||
BK4819_ExitSubAu();
|
||||
}
|
||||
|
109
app/scanner.c
109
app/scanner.c
@ -50,7 +50,7 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
|
||||
if (key_held || key_pressed)
|
||||
return;
|
||||
|
||||
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE)
|
||||
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE_CHAN)
|
||||
{
|
||||
uint16_t Channel;
|
||||
|
||||
@ -95,35 +95,41 @@ static void SCANNER_Key_EXIT(bool key_pressed, bool key_held)
|
||||
switch (g_scanner_edit_state)
|
||||
{
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
g_request_display_screen = DISPLAY_MAIN;
|
||||
|
||||
g_eeprom.cross_vfo_rx_tx = g_backup_cross_vfo_rx_tx;
|
||||
g_update_status = true;
|
||||
g_flag_stop_scan = true;
|
||||
g_vfo_configure_mode = VFO_CONFIGURE_RELOAD;
|
||||
g_flag_reset_vfos = true;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
g_another_voice_id = VOICE_ID_CANCEL;
|
||||
#endif
|
||||
|
||||
g_request_display_screen = DISPLAY_MAIN;
|
||||
g_update_display = true;
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_SAVE:
|
||||
case SCAN_EDIT_STATE_SAVE_CHAN:
|
||||
if (g_input_box_index > 0)
|
||||
{
|
||||
g_input_box[--g_input_box_index] = 10;
|
||||
|
||||
g_request_display_screen = DISPLAY_SCANNER;
|
||||
g_update_display = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// Fallthrough
|
||||
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
case SCAN_EDIT_STATE_SAVE_CONFIRM:
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
g_another_voice_id = VOICE_ID_CANCEL;
|
||||
#endif
|
||||
// g_request_display_screen = DISPLAY_SCANNER;
|
||||
|
||||
g_request_display_screen = DISPLAY_MAIN;
|
||||
g_update_display = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -158,12 +164,16 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
|
||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
|
||||
|
||||
switch (g_scanner_edit_state)
|
||||
{
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
/* if (!g_scan_single_frequency)
|
||||
if (!g_scan_single_frequency)
|
||||
{
|
||||
#if 0
|
||||
|
||||
uint32_t Freq250 = FREQUENCY_FloorToStep(g_scan_frequency, 250, 0);
|
||||
uint32_t Freq625 = FREQUENCY_FloorToStep(g_scan_frequency, 625, 0);
|
||||
|
||||
@ -194,7 +204,8 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
g_step_setting = STEP_2_5kHz;
|
||||
g_scan_frequency = Freq250;
|
||||
}
|
||||
#elif 0
|
||||
|
||||
#elif 1
|
||||
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
const step_setting_t small_step = STEP_1_25kHz;
|
||||
@ -238,40 +249,24 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
g_scan_frequency = freq_big_step;
|
||||
}
|
||||
|
||||
#else
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
g_step_setting = STEP_1_25kHz;
|
||||
#else
|
||||
g_step_setting = STEP_2_5kHz;
|
||||
#endif
|
||||
{ // round to the nearest step size
|
||||
const uint32_t step = STEP_FREQ_TABLE[g_step_setting];
|
||||
g_scan_frequency = ((g_scan_frequency + (step / 2)) / step) * step;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
*/
|
||||
|
||||
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
|
||||
{ // save to channel
|
||||
if (!g_scan_single_frequency)
|
||||
{ // round to the nearest step size
|
||||
const uint32_t step = g_tx_vfo->step_freq;
|
||||
g_scan_frequency = ((g_scan_frequency + (step / 2)) / step) * step;
|
||||
}
|
||||
g_scan_channel = g_tx_vfo->channel_save;
|
||||
g_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0);
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE;
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CHAN;
|
||||
}
|
||||
else
|
||||
{ // save the VFO
|
||||
if (!g_scan_single_frequency)
|
||||
{ // round to the nearest step size
|
||||
const uint32_t step = g_tx_vfo->step_freq;
|
||||
g_scan_frequency = ((g_scan_frequency + (step / 2)) / step) * step;
|
||||
}
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_DONE;
|
||||
{ // save to VFO
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CONFIRM;
|
||||
}
|
||||
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
//UART_SendText("edit none\r\n");
|
||||
#endif
|
||||
|
||||
g_scan_css_state = SCAN_CSS_STATE_FOUND;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
@ -282,18 +277,27 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
g_update_status = true;
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_SAVE:
|
||||
if (g_input_box_index == 0)
|
||||
{
|
||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
g_request_display_screen = DISPLAY_SCANNER;
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_DONE;
|
||||
}
|
||||
case SCAN_EDIT_STATE_SAVE_CHAN:
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_SendText("edit save chan\r\n");
|
||||
#endif
|
||||
|
||||
if (g_input_box_index > 0)
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
if (g_input_box_index == 0)
|
||||
{
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_SAVE_CONFIRM;
|
||||
|
||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
g_request_display_screen = DISPLAY_SCANNER;
|
||||
}
|
||||
|
||||
// break;
|
||||
|
||||
case SCAN_EDIT_STATE_SAVE_CONFIRM:
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
//UART_SendText("edit done\r\n");
|
||||
UART_SendText("edit save confirm\r\n");
|
||||
#endif
|
||||
|
||||
if (!g_scan_single_frequency)
|
||||
@ -316,6 +320,7 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
|
||||
g_tx_vfo->freq_config_rx.code_type = g_scan_css_result_type;
|
||||
g_tx_vfo->freq_config_rx.code = g_scan_css_result_code;
|
||||
|
||||
g_tx_vfo->freq_config_tx.code_type = g_scan_css_result_type;
|
||||
g_tx_vfo->freq_config_tx.code = g_scan_css_result_code;
|
||||
}
|
||||
@ -339,15 +344,29 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||
g_another_voice_id = VOICE_ID_CONFIRM;
|
||||
#endif
|
||||
|
||||
if (!g_scan_single_frequency)
|
||||
{ // FREQ/CTCSS/CDCSS search mode .. do another search
|
||||
g_scan_css_state = SCAN_CSS_STATE_REPEAT;
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
|
||||
|
||||
g_request_display_screen = DISPLAY_SCANNER;
|
||||
}
|
||||
else
|
||||
{ // CTCSS/CDCSS search mode .. only do a single search
|
||||
g_scan_css_state = SCAN_CSS_STATE_OFF;
|
||||
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
|
||||
g_request_display_screen = DISPLAY_MAIN;
|
||||
}
|
||||
|
||||
g_update_display = true;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
break;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
}
|
||||
|
||||
static void SCANNER_Key_STAR(bool key_pressed, bool key_held)
|
||||
@ -375,7 +394,7 @@ static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Directio
|
||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
}
|
||||
|
||||
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE)
|
||||
if (g_scanner_edit_state == SCAN_EDIT_STATE_SAVE_CHAN)
|
||||
{
|
||||
g_scan_channel = NUMBER_AddWithWraparound(g_scan_channel, Direction, 0, USER_CHANNEL_LAST);
|
||||
g_show_chan_prefix = RADIO_CheckValidChannel(g_scan_channel, false, 0);
|
||||
@ -475,8 +494,8 @@ void SCANNER_Start(void)
|
||||
DTMF_clear_RX();
|
||||
|
||||
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
||||
g_scan_css_result_code = 0xFF;
|
||||
g_scan_css_result_type = 0xFF;
|
||||
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;
|
||||
|
@ -23,11 +23,11 @@
|
||||
enum scan_css_state_e
|
||||
{
|
||||
SCAN_CSS_STATE_OFF = 0,
|
||||
// SCAN_CSS_STATE_FREQ_SCANNING,
|
||||
SCAN_CSS_STATE_SCANNING,
|
||||
SCAN_CSS_STATE_FOUND,
|
||||
SCAN_CSS_STATE_FAILED,
|
||||
SCAN_CSS_STATE_FREQ_FAILED
|
||||
SCAN_CSS_STATE_FREQ_FAILED,
|
||||
SCAN_CSS_STATE_REPEAT
|
||||
};
|
||||
typedef enum scan_css_state_e scan_css_state_t;
|
||||
|
||||
@ -40,8 +40,8 @@ typedef enum scan_state_dir_e scan_state_dir_t;
|
||||
|
||||
enum scan_edit_state_e {
|
||||
SCAN_EDIT_STATE_NONE = 0,
|
||||
SCAN_EDIT_STATE_SAVE,
|
||||
SCAN_EDIT_STATE_DONE
|
||||
SCAN_EDIT_STATE_SAVE_CHAN,
|
||||
SCAN_EDIT_STATE_SAVE_CONFIRM
|
||||
};
|
||||
typedef enum scan_edit_state_e scan_edit_state_t;
|
||||
|
||||
|
2
dcs.h
2
dcs.h
@ -21,7 +21,7 @@
|
||||
|
||||
enum dcs_code_type_e
|
||||
{
|
||||
CODE_TYPE_OFF = 0,
|
||||
CODE_TYPE_NONE = 0,
|
||||
CODE_TYPE_CONTINUOUS_TONE,
|
||||
CODE_TYPE_DIGITAL,
|
||||
CODE_TYPE_REVERSE_DIGITAL
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -49,7 +49,7 @@ void FUNCTION_Init(void)
|
||||
{
|
||||
g_current_code_type = g_selected_code_type;
|
||||
if (g_css_scan_mode == CSS_SCAN_MODE_OFF)
|
||||
g_current_code_type = g_rx_vfo->am_mode ? CODE_TYPE_OFF : g_rx_vfo->pRX->code_type;
|
||||
g_current_code_type = g_rx_vfo->am_mode ? CODE_TYPE_NONE : g_rx_vfo->pRX->code_type;
|
||||
}
|
||||
#ifdef ENABLE_NOAA
|
||||
else
|
||||
|
18
radio.c
18
radio.c
@ -273,8 +273,8 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
|
||||
switch (g_eeprom.vfo_info[VFO].freq_config_rx.code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_OFF;
|
||||
case CODE_TYPE_NONE:
|
||||
g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_NONE;
|
||||
Tmp = 0;
|
||||
break;
|
||||
|
||||
@ -295,8 +295,8 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
|
||||
switch (g_eeprom.vfo_info[VFO].freq_config_tx.code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_OFF;
|
||||
case CODE_TYPE_NONE:
|
||||
g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_NONE;
|
||||
Tmp = 0;
|
||||
break;
|
||||
|
||||
@ -414,8 +414,8 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
|
||||
{ // freq/chan is in AM mode
|
||||
g_eeprom.vfo_info[VFO].scrambling_type = 0;
|
||||
// g_eeprom.vfo_info[VFO].dtmf_decoding_enable = false; // no reason to disable DTMF decoding, aircraft use it on SSB
|
||||
g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_OFF;
|
||||
g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_OFF;
|
||||
g_eeprom.vfo_info[VFO].freq_config_rx.code_type = CODE_TYPE_NONE;
|
||||
g_eeprom.vfo_info[VFO].freq_config_tx.code_type = CODE_TYPE_NONE;
|
||||
}
|
||||
|
||||
g_eeprom.vfo_info[VFO].compander = (Attributes & USER_CH_COMPAND) >> 4;
|
||||
@ -673,7 +673,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
|
||||
switch (code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
case CODE_TYPE_NONE:
|
||||
BK4819_SetCTCSSFrequency(670);
|
||||
|
||||
//#ifndef ENABLE_CTCSS_TAIL_PHASE_SHIFT
|
||||
@ -887,7 +887,7 @@ void RADIO_SetTxParameters(void)
|
||||
switch (g_current_vfo->pTX->code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
case CODE_TYPE_NONE:
|
||||
BK4819_ExitSubAu();
|
||||
break;
|
||||
|
||||
@ -1055,7 +1055,7 @@ void RADIO_EnableCxCSS(void)
|
||||
switch (g_current_vfo->pTX->code_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
case CODE_TYPE_NONE:
|
||||
break;
|
||||
|
||||
case CODE_TYPE_CONTINUOUS_TONE:
|
||||
|
@ -577,7 +577,7 @@ void UI_DisplayMenu(void)
|
||||
break;
|
||||
|
||||
Code = 0;
|
||||
pConfig->code_type = CODE_TYPE_OFF;
|
||||
pConfig->code_type = CODE_TYPE_NONE;
|
||||
pConfig->code = Code;
|
||||
|
||||
BK4819_ExitSubAu();
|
||||
|
29
ui/scanner.c
29
ui/scanner.c
@ -59,6 +59,7 @@ void UI_DisplayScanner(void)
|
||||
case SCAN_CSS_STATE_SCANNING:
|
||||
case SCAN_CSS_STATE_FOUND:
|
||||
case SCAN_CSS_STATE_FAILED:
|
||||
case SCAN_CSS_STATE_REPEAT:
|
||||
{
|
||||
const uint32_t freq = g_scan_frequency;
|
||||
sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000);
|
||||
@ -66,7 +67,7 @@ void UI_DisplayScanner(void)
|
||||
break;
|
||||
|
||||
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||
strcpy(String, "FREQ not found");
|
||||
strcpy(String, "FREQ none found");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -83,7 +84,6 @@ void UI_DisplayScanner(void)
|
||||
{
|
||||
default:
|
||||
case SCAN_CSS_STATE_OFF:
|
||||
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||
strcpy(String, "CODE");
|
||||
break;
|
||||
|
||||
@ -92,12 +92,13 @@ void UI_DisplayScanner(void)
|
||||
break;
|
||||
|
||||
case SCAN_CSS_STATE_FOUND:
|
||||
case SCAN_CSS_STATE_REPEAT:
|
||||
|
||||
switch (g_scan_css_result_type)
|
||||
{
|
||||
default:
|
||||
case CODE_TYPE_OFF:
|
||||
strcpy(String, "CODE none");
|
||||
case CODE_TYPE_NONE:
|
||||
strcpy(String, "CODE none found");
|
||||
break;
|
||||
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);
|
||||
@ -110,7 +111,7 @@ void UI_DisplayScanner(void)
|
||||
break;
|
||||
|
||||
case SCAN_CSS_STATE_FAILED:
|
||||
strcpy(String, "CODE none");
|
||||
strcpy(String, "CODE none found");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -121,14 +122,14 @@ void UI_DisplayScanner(void)
|
||||
|
||||
memset(String, 0, sizeof(String));
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
|
||||
|
||||
switch (g_scanner_edit_state)
|
||||
{
|
||||
default:
|
||||
case SCAN_EDIT_STATE_NONE:
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough="
|
||||
|
||||
switch (g_scan_css_state)
|
||||
{
|
||||
default:
|
||||
@ -153,16 +154,15 @@ void UI_DisplayScanner(void)
|
||||
}
|
||||
|
||||
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||
case SCAN_CSS_STATE_REPEAT:
|
||||
strcpy(String, "* repeat");
|
||||
text_centered = true;
|
||||
break;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_SAVE:
|
||||
case SCAN_EDIT_STATE_SAVE_CHAN:
|
||||
strcpy(String, "SAVE ");
|
||||
{
|
||||
char s[11];
|
||||
@ -173,13 +173,14 @@ void UI_DisplayScanner(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case SCAN_EDIT_STATE_DONE:
|
||||
// strcpy(String, "* repeat M save");
|
||||
strcpy(String, "* repeat");
|
||||
case SCAN_EDIT_STATE_SAVE_CONFIRM:
|
||||
strcpy(String, "* repeat Save ?");
|
||||
text_centered = true;
|
||||
break;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
UI_PrintString(String, text_centered ? 0 : 2, text_centered ? 127 : 0, 5, 8);
|
||||
|
||||
// ***********************************
|
||||
|
Loading…
x
Reference in New Issue
Block a user