mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 22:31:25 +03:00
Timeout added to the code scan part of F+4 freq/code scan operation
This commit is contained in:
parent
7a42f332fa
commit
4e4868c212
14
Makefile
14
Makefile
@ -8,7 +8,7 @@ ENABLE_SWD := 0
|
|||||||
ENABLE_OVERLAY := 0
|
ENABLE_OVERLAY := 0
|
||||||
ENABLE_LTO := 1
|
ENABLE_LTO := 1
|
||||||
ENABLE_UART := 1
|
ENABLE_UART := 1
|
||||||
ENABLE_UART_DEBUG := 0
|
ENABLE_UART_DEBUG := 1
|
||||||
ENABLE_AIRCOPY := 1
|
ENABLE_AIRCOPY := 1
|
||||||
ENABLE_FMRADIO := 1
|
ENABLE_FMRADIO := 1
|
||||||
ENABLE_NOAA := 1
|
ENABLE_NOAA := 1
|
||||||
@ -29,6 +29,7 @@ ENABLE_BOOT_BEEPS := 0
|
|||||||
ENABLE_SHOW_CHARGE_LEVEL := 1
|
ENABLE_SHOW_CHARGE_LEVEL := 1
|
||||||
ENABLE_REVERSE_BAT_SYMBOL := 1
|
ENABLE_REVERSE_BAT_SYMBOL := 1
|
||||||
ENABLE_CODE_SCAN_TIMEOUT := 0
|
ENABLE_CODE_SCAN_TIMEOUT := 0
|
||||||
|
ENABLE_FREQ_CODE_SCAN_TIMEOUT := 1
|
||||||
ENABLE_AM_FIX := 1
|
ENABLE_AM_FIX := 1
|
||||||
ENABLE_AM_FIX_SHOW_DATA := 1
|
ENABLE_AM_FIX_SHOW_DATA := 1
|
||||||
ENABLE_SQUELCH_MORE_SENSITIVE := 1
|
ENABLE_SQUELCH_MORE_SENSITIVE := 1
|
||||||
@ -44,6 +45,10 @@ ENABLE_COPY_CHAN_TO_VFO := 1
|
|||||||
|
|
||||||
TARGET = firmware
|
TARGET = firmware
|
||||||
|
|
||||||
|
ifeq ($(ENABLE_UART), 0)
|
||||||
|
ENABLE_UART_DEBUG := 0
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_CLANG),1)
|
ifeq ($(ENABLE_CLANG),1)
|
||||||
# GCC's linker, ld, doesn't understand LLVM's generated bytecode
|
# GCC's linker, ld, doesn't understand LLVM's generated bytecode
|
||||||
ENABLE_LTO := 0
|
ENABLE_LTO := 0
|
||||||
@ -59,10 +64,6 @@ ifeq ($(ENABLE_SHOW_TX_TIMEOUT),1)
|
|||||||
ENABLE_AUDIO_BAR := 0
|
ENABLE_AUDIO_BAR := 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_UART_DEBUG),1)
|
|
||||||
ENABLE_UART := 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
BSP_DEFINITIONS := $(wildcard hardware/*/*.def)
|
BSP_DEFINITIONS := $(wildcard hardware/*/*.def)
|
||||||
BSP_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS))
|
BSP_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS))
|
||||||
BSP_HEADERS := $(patsubst %.def,%.h,$(BSP_HEADERS))
|
BSP_HEADERS := $(patsubst %.def,%.h,$(BSP_HEADERS))
|
||||||
@ -296,6 +297,9 @@ endif
|
|||||||
ifeq ($(ENABLE_CODE_SCAN_TIMEOUT),1)
|
ifeq ($(ENABLE_CODE_SCAN_TIMEOUT),1)
|
||||||
CFLAGS += -DENABLE_CODE_SCAN_TIMEOUT
|
CFLAGS += -DENABLE_CODE_SCAN_TIMEOUT
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(ENABLE_FREQ_CODE_SCAN_TIMEOUT),1)
|
||||||
|
CFLAGS += -DENABLE_FREQ_CODE_SCAN_TIMEOUT
|
||||||
|
endif
|
||||||
ifeq ($(ENABLE_AM_FIX),1)
|
ifeq ($(ENABLE_AM_FIX),1)
|
||||||
CFLAGS += -DENABLE_AM_FIX
|
CFLAGS += -DENABLE_AM_FIX
|
||||||
endif
|
endif
|
||||||
|
@ -55,7 +55,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_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_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_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right)
|
||||||
ENABLE_CODE_SCAN_TIMEOUT := 0 enable/disable 32-sec CTCSS/DCS scan timeout (press exit butt instead of time-out to end scan)
|
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_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 := 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_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
|
ENABLE_SQUELCH_MORE_SENSITIVE := 1 make squelch levels a little bit more sensitive - I plan to let user adjust the values themselves
|
||||||
|
@ -92,7 +92,7 @@ void ACTION_Monitor(void)
|
|||||||
{
|
{
|
||||||
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_schedule_scan_listen = false;
|
||||||
gScanPauseMode = true;
|
g_scan_pause_mode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
|
165
app/app.c
165
app/app.c
@ -495,11 +495,11 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
|
|||||||
switch (g_eeprom.scan_resume_mode)
|
switch (g_eeprom.scan_resume_mode)
|
||||||
{
|
{
|
||||||
case SCAN_RESUME_TO:
|
case SCAN_RESUME_TO:
|
||||||
if (!gScanPauseMode)
|
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_schedule_scan_listen = false;
|
||||||
gScanPauseMode = true;
|
g_scan_pause_mode = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -510,7 +510,7 @@ void APP_StartListening(function_type_t Function, const bool reset_am_fix)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bScanKeepFrequency = true;
|
g_scan_keep_frequency = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
@ -637,7 +637,7 @@ static void FREQ_NextChannel(void)
|
|||||||
g_scan_pause_delay_in_10ms = scan_pause_delay_in_6_10ms;
|
g_scan_pause_delay_in_10ms = scan_pause_delay_in_6_10ms;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bScanKeepFrequency = false;
|
g_scan_keep_frequency = false;
|
||||||
g_update_display = true;
|
g_update_display = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -737,7 +737,7 @@ static void USER_NextChannel(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;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bScanKeepFrequency = false;
|
g_scan_keep_frequency = false;
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
if (++g_current_scan_list >= SCAN_NEXT_NUM)
|
if (++g_current_scan_list >= SCAN_NEXT_NUM)
|
||||||
@ -1094,7 +1094,7 @@ void APP_Update(void)
|
|||||||
USER_NextChannel(); // switch to next channel
|
USER_NextChannel(); // switch to next channel
|
||||||
}
|
}
|
||||||
|
|
||||||
gScanPauseMode = 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_schedule_scan_listen = false;
|
||||||
}
|
}
|
||||||
@ -1149,7 +1149,7 @@ void APP_Update(void)
|
|||||||
GUI_SelectNextDisplay(DISPLAY_MAIN);
|
GUI_SelectNextDisplay(DISPLAY_MAIN);
|
||||||
|
|
||||||
g_rx_vfo_is_active = false;
|
g_rx_vfo_is_active = false;
|
||||||
gScanPauseMode = false;
|
g_scan_pause_mode = false;
|
||||||
g_rx_reception_mode = RX_MODE_NONE;
|
g_rx_reception_mode = RX_MODE_NONE;
|
||||||
g_schedule_dual_watch = false;
|
g_schedule_dual_watch = false;
|
||||||
}
|
}
|
||||||
@ -1559,8 +1559,10 @@ void APP_TimeSlice10ms(void)
|
|||||||
{
|
{
|
||||||
uint32_t Result;
|
uint32_t Result;
|
||||||
int32_t Delta;
|
int32_t Delta;
|
||||||
BK4819_CSS_scan_result_t ScanResult;
|
|
||||||
uint16_t CtcssFreq;
|
uint16_t CtcssFreq;
|
||||||
|
BK4819_CSS_scan_result_t ScanResult;
|
||||||
|
|
||||||
|
g_scan_freq_css_timer_10ms++;
|
||||||
|
|
||||||
if (g_scan_delay_10ms > 0)
|
if (g_scan_delay_10ms > 0)
|
||||||
{
|
{
|
||||||
@ -1571,58 +1573,95 @@ void APP_TimeSlice10ms(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gScannerEditState != SCAN_EDIT_STATE_NONE)
|
if (g_scanner_edit_state != SCAN_EDIT_STATE_NONE)
|
||||||
{
|
{
|
||||||
APP_CheckKeys();
|
APP_CheckKeys();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (gScanCssState)
|
g_update_display = true;
|
||||||
|
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
||||||
|
|
||||||
|
switch (g_scan_css_state)
|
||||||
{
|
{
|
||||||
case SCAN_CSS_STATE_OFF:
|
case SCAN_CSS_STATE_OFF:
|
||||||
|
|
||||||
if (!BK4819_GetFrequencyScanResult(&Result))
|
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
|
||||||
|
{ // freq/css scan timeout
|
||||||
|
#ifdef ENABLE_CODE_SCAN_TIMEOUT
|
||||||
|
BK4819_DisableFrequencyScan();
|
||||||
|
g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED;
|
||||||
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!BK4819_GetFrequencyScanResult(&Result))
|
||||||
|
break; // still scanning
|
||||||
|
|
||||||
// accept only within 1kHz
|
// accept only within 1kHz
|
||||||
Delta = Result - gScanFrequency;
|
Delta = Result - g_scan_frequency;
|
||||||
gScanHitCount = (abs(Delta) < 100) ? gScanHitCount + 1 : 0;
|
g_scan_hit_count = (abs(Delta) < 100) ? g_scan_hit_count + 1 : 0;
|
||||||
|
|
||||||
BK4819_DisableFrequencyScan();
|
BK4819_DisableFrequencyScan();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
gScanFrequency = Result;
|
g_scan_frequency = Result;
|
||||||
#else
|
#else
|
||||||
{ // round to nearest step multiple
|
{ // round to nearest step multiple
|
||||||
const uint32_t step = STEP_FREQ_TABLE[g_step_setting];
|
const uint32_t step = STEP_FREQ_TABLE[g_step_setting];
|
||||||
gScanFrequency = ((Result + (step / 2)) / step) * step;
|
g_scan_frequency = ((Result + (step / 2)) / step) * step;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gScanHitCount < 3)
|
if (g_scan_hit_count < 3)
|
||||||
{ // keep scanning for an RF carrier
|
{ // keep scanning for an RF carrier
|
||||||
BK4819_EnableFrequencyScan();
|
BK4819_EnableFrequencyScan();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // RF carrier found .. stop RF scanning
|
{ // RF carrier found
|
||||||
BK4819_SetScanFrequency(gScanFrequency);
|
// stop RF the scan and move on too the CTCSS/CDCSS scan
|
||||||
|
|
||||||
// start CTCSS/CTDSS scanning
|
BK4819_SetScanFrequency(g_scan_frequency);
|
||||||
gScanCssResultCode = 0xFF;
|
|
||||||
gScanCssResultType = 0xFF;
|
g_scan_css_result_code = 0xFF;
|
||||||
gScanHitCount = 0;
|
g_scan_css_result_type = 0xFF;
|
||||||
gScanUseCssResult = false;
|
g_scan_hit_count = 0;
|
||||||
gScanProgressIndicator = 0;
|
g_scan_use_css_result = false;
|
||||||
gScanCssState = SCAN_CSS_STATE_SCANNING;
|
g_scan_freq_css_timer_10ms = 0;
|
||||||
|
g_scan_css_state = SCAN_CSS_STATE_SCANNING;
|
||||||
|
|
||||||
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
||||||
g_update_status = true;
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCAN_CSS_STATE_SCANNING:
|
case SCAN_CSS_STATE_SCANNING:
|
||||||
|
|
||||||
|
if (g_scan_freq_css_timer_10ms >= scan_freq_css_timeout_10ms)
|
||||||
|
{ // timeout
|
||||||
|
#if defined(ENABLE_CODE_SCAN_TIMEOUT)
|
||||||
|
BK4819_Disable();
|
||||||
|
g_scan_css_state = SCAN_CSS_STATE_FAILED;
|
||||||
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
|
break;
|
||||||
|
#elif defined(ENABLE_FREQ_CODE_SCAN_TIMEOUT)
|
||||||
|
if (!g_scan_single_frequency)
|
||||||
|
{
|
||||||
|
BK4819_Disable();
|
||||||
|
g_scan_css_state = SCAN_CSS_STATE_FAILED;
|
||||||
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
ScanResult = BK4819_GetCxCSSScanResult(&Result, &CtcssFreq);
|
ScanResult = BK4819_GetCxCSSScanResult(&Result, &CtcssFreq);
|
||||||
if (ScanResult == BK4819_CSS_RESULT_NOT_FOUND)
|
if (ScanResult == BK4819_CSS_RESULT_NOT_FOUND)
|
||||||
break;
|
break;
|
||||||
@ -1634,46 +1673,52 @@ void APP_TimeSlice10ms(void)
|
|||||||
const uint8_t Code = DCS_GetCdcssCode(Result);
|
const uint8_t Code = DCS_GetCdcssCode(Result);
|
||||||
if (Code != 0xFF)
|
if (Code != 0xFF)
|
||||||
{
|
{
|
||||||
gScanCssResultCode = Code;
|
g_scan_css_result_code = Code;
|
||||||
gScanCssResultType = CODE_TYPE_DIGITAL;
|
g_scan_css_result_type = CODE_TYPE_DIGITAL;
|
||||||
gScanCssState = SCAN_CSS_STATE_FOUND;
|
g_scan_css_state = SCAN_CSS_STATE_FOUND;
|
||||||
gScanUseCssResult = true;
|
g_scan_use_css_result = true;
|
||||||
g_update_status = true;
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (ScanResult == BK4819_CSS_RESULT_CTCSS)
|
if (ScanResult == BK4819_CSS_RESULT_CTCSS)
|
||||||
{
|
{
|
||||||
const uint8_t Code = DCS_GetCtcssCode(CtcssFreq);
|
const uint8_t code = DCS_GetCtcssCode(CtcssFreq);
|
||||||
if (Code != 0xFF)
|
if (code != 0xFF)
|
||||||
{
|
{
|
||||||
if (Code == gScanCssResultCode && gScanCssResultType == CODE_TYPE_CONTINUOUS_TONE)
|
if (code == g_scan_css_result_code &&
|
||||||
|
g_scan_css_result_type == CODE_TYPE_CONTINUOUS_TONE)
|
||||||
{
|
{
|
||||||
if (++gScanHitCount >= 2)
|
if (++g_scan_hit_count >= 2)
|
||||||
{
|
{
|
||||||
gScanCssState = SCAN_CSS_STATE_FOUND;
|
g_scan_css_state = SCAN_CSS_STATE_FOUND;
|
||||||
gScanUseCssResult = true;
|
g_scan_use_css_result = true;
|
||||||
g_update_status = true;
|
g_update_status = true;
|
||||||
|
g_update_display = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gScanHitCount = 0;
|
g_scan_hit_count = 0;
|
||||||
|
|
||||||
gScanCssResultType = CODE_TYPE_CONTINUOUS_TONE;
|
g_scan_css_result_type = CODE_TYPE_CONTINUOUS_TONE;
|
||||||
gScanCssResultCode = Code;
|
g_scan_css_result_code = code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gScanCssState == SCAN_CSS_STATE_OFF || gScanCssState == SCAN_CSS_STATE_SCANNING)
|
if (g_scan_css_state == SCAN_CSS_STATE_OFF ||
|
||||||
|
g_scan_css_state == SCAN_CSS_STATE_SCANNING)
|
||||||
{ // re-start scan
|
{ // re-start scan
|
||||||
BK4819_SetScanFrequency(gScanFrequency);
|
BK4819_SetScanFrequency(g_scan_frequency);
|
||||||
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
GUI_SelectNextDisplay(DISPLAY_SCANNER);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//case SCAN_CSS_STATE_FOUND:
|
||||||
|
//case SCAN_CSS_STATE_FAILED:
|
||||||
|
//case SCAN_CSS_STATE_FREQ_FAILED:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1835,10 +1880,14 @@ void APP_TimeSlice500ms(void)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_AIRCOPY
|
#ifdef ENABLE_AIRCOPY
|
||||||
if (g_scan_state_dir == SCAN_OFF && g_screen_to_display != DISPLAY_AIRCOPY && (g_screen_to_display != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND))
|
if (g_screen_to_display != DISPLAY_AIRCOPY)
|
||||||
#else
|
|
||||||
if (g_scan_state_dir == SCAN_OFF && (g_screen_to_display != DISPLAY_SCANNER || gScanCssState >= SCAN_CSS_STATE_FOUND))
|
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
if (g_scan_state_dir == SCAN_OFF &&
|
||||||
|
(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))
|
||||||
{
|
{
|
||||||
if (g_eeprom.auto_keypad_lock && g_key_lock_count_down > 0 && !g_dtmf_input_mode)
|
if (g_eeprom.auto_keypad_lock && g_key_lock_count_down > 0 && !g_dtmf_input_mode)
|
||||||
{
|
{
|
||||||
@ -1908,6 +1957,7 @@ void APP_TimeSlice500ms(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT)
|
if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT)
|
||||||
updateRSSI(g_eeprom.rx_vfo);
|
updateRSSI(g_eeprom.rx_vfo);
|
||||||
@ -1983,27 +2033,6 @@ void APP_TimeSlice500ms(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_screen_to_display == DISPLAY_SCANNER &&
|
|
||||||
gScannerEditState == SCAN_EDIT_STATE_NONE &&
|
|
||||||
gScanCssState < SCAN_CSS_STATE_FOUND)
|
|
||||||
{
|
|
||||||
gScanProgressIndicator++;
|
|
||||||
|
|
||||||
#ifdef ENABLE_CODE_SCAN_TIMEOUT
|
|
||||||
if (gScanProgressIndicator > 32)
|
|
||||||
{
|
|
||||||
if (gScanCssState == SCAN_CSS_STATE_SCANNING && !g_scan_single_frequency)
|
|
||||||
gScanCssState = SCAN_CSS_STATE_FOUND;
|
|
||||||
else
|
|
||||||
gScanCssState = SCAN_CSS_STATE_FAILED;
|
|
||||||
|
|
||||||
g_update_status = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
g_update_display = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_current_function != FUNCTION_TRANSMIT)
|
if (g_current_function != FUNCTION_TRANSMIT)
|
||||||
{
|
{
|
||||||
if (g_dtmf_decode_ring_count_down_500ms > 0)
|
if (g_dtmf_decode_ring_count_down_500ms > 0)
|
||||||
@ -2080,7 +2109,7 @@ void APP_TimeSlice500ms(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void CHANNEL_Next(const bool flag, const int8_t scan_direction)
|
void CHANNEL_Next(const bool flag, const scan_state_dir_t scan_direction)
|
||||||
{
|
{
|
||||||
RADIO_SelectVfos();
|
RADIO_SelectVfos();
|
||||||
|
|
||||||
@ -2104,8 +2133,8 @@ void CHANNEL_Next(const bool flag, const int8_t scan_direction)
|
|||||||
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_schedule_scan_listen = false;
|
||||||
g_rx_reception_mode = RX_MODE_NONE;
|
g_rx_reception_mode = RX_MODE_NONE;
|
||||||
gScanPauseMode = false;
|
g_scan_pause_mode = false;
|
||||||
bScanKeepFrequency = false;
|
g_scan_keep_frequency = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const bool key_held)
|
static void APP_ProcessKey(const key_code_t Key, const bool key_pressed, const bool key_held)
|
||||||
|
@ -29,7 +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 CHANNEL_Next(const bool flag, const int8_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);
|
||||||
void APP_Update(void);
|
void APP_Update(void);
|
||||||
|
@ -709,7 +709,7 @@ static void MAIN_Key_STAR(bool key_pressed, bool key_held)
|
|||||||
g_update_status = true;
|
g_update_status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction)
|
static void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t Direction)
|
||||||
{
|
{
|
||||||
uint8_t Channel = g_eeprom.screen_channel[g_eeprom.tx_vfo];
|
uint8_t Channel = g_eeprom.screen_channel[g_eeprom.tx_vfo];
|
||||||
|
|
||||||
|
152
app/scanner.c
152
app/scanner.c
@ -26,29 +26,30 @@
|
|||||||
#include "ui/inputbox.h"
|
#include "ui/inputbox.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
|
||||||
dcs_code_type_t gScanCssResultType;
|
dcs_code_type_t g_scan_css_result_type;
|
||||||
uint8_t gScanCssResultCode;
|
uint8_t g_scan_css_result_code;
|
||||||
bool g_flag_start_scan;
|
bool g_flag_start_scan;
|
||||||
bool g_flag_stop_scan;
|
bool g_flag_stop_scan;
|
||||||
bool g_scan_single_frequency;
|
bool g_scan_single_frequency;
|
||||||
SCAN_edit_state_t gScannerEditState;
|
scan_edit_state_t g_scanner_edit_state;
|
||||||
uint8_t gScanChannel;
|
uint8_t g_scan_channel;
|
||||||
uint32_t gScanFrequency;
|
uint32_t g_scan_frequency;
|
||||||
bool gScanPauseMode;
|
bool g_scan_pause_mode;
|
||||||
SCAN_CssState_t gScanCssState;
|
scan_css_state_t g_scan_css_state;
|
||||||
volatile bool g_schedule_scan_listen = true;
|
volatile bool g_schedule_scan_listen = true;
|
||||||
volatile uint16_t g_scan_pause_delay_in_10ms;
|
volatile uint16_t g_scan_pause_delay_in_10ms;
|
||||||
uint8_t gScanProgressIndicator;
|
uint16_t g_scan_freq_css_timer_10ms;
|
||||||
uint8_t gScanHitCount;
|
uint8_t g_scan_hit_count;
|
||||||
bool gScanUseCssResult;
|
bool g_scan_use_css_result;
|
||||||
int8_t g_scan_state_dir;
|
scan_state_dir_t g_scan_state_dir;
|
||||||
bool bScanKeepFrequency;
|
bool g_scan_keep_frequency;
|
||||||
|
|
||||||
static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
|
static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
|
||||||
{
|
{
|
||||||
if (!key_held && key_pressed)
|
if (key_held || !key_pressed)
|
||||||
{
|
return;
|
||||||
if (gScannerEditState == SCAN_EDIT_STATE_BUSY)
|
|
||||||
|
if (g_scanner_edit_state == SCAN_EDIT_STATE_BUSY)
|
||||||
{
|
{
|
||||||
uint16_t Channel;
|
uint16_t Channel;
|
||||||
|
|
||||||
@ -75,22 +76,22 @@ static void SCANNER_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held)
|
|||||||
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_show_chan_prefix = RADIO_CheckValidChannel(Channel, false, 0);
|
||||||
gScanChannel = (uint8_t)Channel;
|
g_scan_channel = (uint8_t)Channel;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 SCANNER_Key_EXIT(bool key_pressed, bool key_held)
|
||||||
{
|
{
|
||||||
if (!key_held && key_pressed)
|
if (key_held || !key_pressed)
|
||||||
{
|
return;
|
||||||
|
|
||||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
switch (gScannerEditState)
|
switch (g_scanner_edit_state)
|
||||||
{
|
{
|
||||||
case SCAN_EDIT_STATE_NONE:
|
case SCAN_EDIT_STATE_NONE:
|
||||||
g_request_display_screen = DISPLAY_MAIN;
|
g_request_display_screen = DISPLAY_MAIN;
|
||||||
@ -116,7 +117,7 @@ static void SCANNER_Key_EXIT(bool key_pressed, bool key_held)
|
|||||||
// Fallthrough
|
// Fallthrough
|
||||||
|
|
||||||
case SCAN_EDIT_STATE_DONE:
|
case SCAN_EDIT_STATE_DONE:
|
||||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
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;
|
||||||
#endif
|
#endif
|
||||||
@ -124,7 +125,6 @@ static void SCANNER_Key_EXIT(bool key_pressed, bool key_held)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
||||||
{
|
{
|
||||||
@ -136,13 +136,13 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
if (!key_pressed)
|
if (!key_pressed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (gScanCssState == SCAN_CSS_STATE_OFF && !g_scan_single_frequency)
|
if (g_scan_css_state == SCAN_CSS_STATE_OFF && !g_scan_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 (gScanCssState == SCAN_CSS_STATE_SCANNING)
|
if (g_scan_css_state == SCAN_CSS_STATE_SCANNING)
|
||||||
{
|
{
|
||||||
if (g_scan_single_frequency)
|
if (g_scan_single_frequency)
|
||||||
{
|
{
|
||||||
@ -151,7 +151,7 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gScanCssState == SCAN_CSS_STATE_FAILED)
|
if (g_scan_css_state == SCAN_CSS_STATE_FAILED)
|
||||||
{
|
{
|
||||||
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
@ -159,17 +159,17 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
|
|
||||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
switch (gScannerEditState)
|
switch (g_scanner_edit_state)
|
||||||
{
|
{
|
||||||
case SCAN_EDIT_STATE_NONE:
|
case SCAN_EDIT_STATE_NONE:
|
||||||
if (!g_scan_single_frequency)
|
if (!g_scan_single_frequency)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
uint32_t Freq250 = FREQUENCY_FloorToStep(gScanFrequency, 250, 0);
|
uint32_t Freq250 = FREQUENCY_FloorToStep(g_scan_frequency, 250, 0);
|
||||||
uint32_t Freq625 = FREQUENCY_FloorToStep(gScanFrequency, 625, 0);
|
uint32_t Freq625 = FREQUENCY_FloorToStep(g_scan_frequency, 625, 0);
|
||||||
|
|
||||||
int16_t Delta250 = (int16_t)gScanFrequency - (int16_t)Freq250;
|
int16_t Delta250 = (int16_t)g_scan_frequency - (int16_t)Freq250;
|
||||||
int16_t Delta625;
|
int16_t Delta625;
|
||||||
|
|
||||||
if (125 < Delta250)
|
if (125 < Delta250)
|
||||||
@ -178,7 +178,7 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
Freq250 += 250;
|
Freq250 += 250;
|
||||||
}
|
}
|
||||||
|
|
||||||
Delta625 = (int16_t)gScanFrequency - (int16_t)Freq625;
|
Delta625 = (int16_t)g_scan_frequency - (int16_t)Freq625;
|
||||||
|
|
||||||
if (312 < Delta625)
|
if (312 < Delta625)
|
||||||
{
|
{
|
||||||
@ -189,12 +189,12 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
if (Delta625 < Delta250)
|
if (Delta625 < Delta250)
|
||||||
{
|
{
|
||||||
g_step_setting = STEP_6_25kHz;
|
g_step_setting = STEP_6_25kHz;
|
||||||
gScanFrequency = Freq625;
|
g_scan_frequency = Freq625;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_step_setting = STEP_2_5kHz;
|
g_step_setting = STEP_2_5kHz;
|
||||||
gScanFrequency = Freq250;
|
g_scan_frequency = Freq250;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -209,11 +209,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(gScanFrequency, small_step_freq, 0);
|
uint32_t freq_small_step = FREQUENCY_FloorToStep(g_scan_frequency, small_step_freq, 0);
|
||||||
uint32_t freq_big_step = FREQUENCY_FloorToStep(gScanFrequency, big_step_freq, 0);
|
uint32_t freq_big_step = FREQUENCY_FloorToStep(g_scan_frequency, big_step_freq, 0);
|
||||||
|
|
||||||
int32_t delta_small_step = (int32_t)gScanFrequency - freq_small_step;
|
int32_t delta_small_step = (int32_t)g_scan_frequency - freq_small_step;
|
||||||
int32_t delta_big_step = (int32_t)gScanFrequency - freq_big_step;
|
int32_t delta_big_step = (int32_t)g_scan_frequency - freq_big_step;
|
||||||
|
|
||||||
if (delta_small_step > 125)
|
if (delta_small_step > 125)
|
||||||
{
|
{
|
||||||
@ -221,7 +221,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)gScanFrequency - freq_big_step;
|
delta_big_step = (int32_t)g_scan_frequency - freq_big_step;
|
||||||
|
|
||||||
if (delta_big_step > 312)
|
if (delta_big_step > 312)
|
||||||
{
|
{
|
||||||
@ -232,28 +232,28 @@ 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_step_setting = small_step;
|
||||||
gScanFrequency = freq_small_step;
|
g_scan_frequency = freq_small_step;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_step_setting = big_step;
|
g_step_setting = big_step;
|
||||||
gScanFrequency = freq_big_step;
|
g_scan_frequency = freq_big_step;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
|
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
|
||||||
{
|
{
|
||||||
gScannerEditState = SCAN_EDIT_STATE_BUSY;
|
g_scanner_edit_state = SCAN_EDIT_STATE_BUSY;
|
||||||
gScanChannel = g_tx_vfo->channel_save;
|
g_scan_channel = g_tx_vfo->channel_save;
|
||||||
g_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0);
|
g_show_chan_prefix = RADIO_CheckValidChannel(g_tx_vfo->channel_save, false, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gScannerEditState = SCAN_EDIT_STATE_DONE;
|
g_scanner_edit_state = SCAN_EDIT_STATE_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gScanCssState = SCAN_CSS_STATE_FOUND;
|
g_scan_css_state = SCAN_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;
|
||||||
@ -268,19 +268,19 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
{
|
{
|
||||||
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_SCANNER;
|
||||||
gScannerEditState = SCAN_EDIT_STATE_DONE;
|
g_scanner_edit_state = SCAN_EDIT_STATE_DONE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCAN_EDIT_STATE_DONE:
|
case SCAN_EDIT_STATE_DONE:
|
||||||
if (!g_scan_single_frequency)
|
if (!g_scan_single_frequency)
|
||||||
{
|
{
|
||||||
RADIO_InitInfo(g_tx_vfo, g_tx_vfo->channel_save, gScanFrequency);
|
RADIO_InitInfo(g_tx_vfo, g_tx_vfo->channel_save, g_scan_frequency);
|
||||||
|
|
||||||
if (gScanUseCssResult)
|
if (g_scan_use_css_result)
|
||||||
{
|
{
|
||||||
g_tx_vfo->freq_config_rx.code_type = gScanCssResultType;
|
g_tx_vfo->freq_config_rx.code_type = g_scan_css_result_type;
|
||||||
g_tx_vfo->freq_config_rx.code = gScanCssResultCode;
|
g_tx_vfo->freq_config_rx.code = g_scan_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;
|
||||||
@ -291,15 +291,15 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
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 = gScanCssResultType;
|
g_tx_vfo->freq_config_rx.code_type = g_scan_css_result_type;
|
||||||
g_tx_vfo->freq_config_rx.code = gScanCssResultCode;
|
g_tx_vfo->freq_config_rx.code = g_scan_css_result_code;
|
||||||
g_tx_vfo->freq_config_tx.code_type = gScanCssResultType;
|
g_tx_vfo->freq_config_tx.code_type = g_scan_css_result_type;
|
||||||
g_tx_vfo->freq_config_tx.code = gScanCssResultCode;
|
g_tx_vfo->freq_config_tx.code = g_scan_css_result_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
|
if (g_tx_vfo->channel_save <= USER_CHANNEL_LAST)
|
||||||
{
|
{
|
||||||
Channel = gScanChannel;
|
Channel = g_scan_channel;
|
||||||
g_eeprom.user_channel[g_eeprom.tx_vfo] = Channel;
|
g_eeprom.user_channel[g_eeprom.tx_vfo] = Channel;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -316,7 +316,7 @@ 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
|
||||||
|
|
||||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
|
||||||
|
|
||||||
g_request_display_screen = DISPLAY_SCANNER;
|
g_request_display_screen = DISPLAY_SCANNER;
|
||||||
break;
|
break;
|
||||||
@ -329,13 +329,12 @@ static void SCANNER_Key_MENU(bool key_pressed, bool key_held)
|
|||||||
|
|
||||||
static void SCANNER_Key_STAR(bool key_pressed, bool key_held)
|
static void SCANNER_Key_STAR(bool key_pressed, bool key_held)
|
||||||
{
|
{
|
||||||
if (!key_held && key_pressed)
|
if (key_held || !key_pressed)
|
||||||
{
|
return;
|
||||||
|
|
||||||
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
g_flag_start_scan = true;
|
g_flag_start_scan = true;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Direction)
|
static void SCANNER_Key_UP_DOWN(bool key_pressed, bool pKeyHeld, int8_t Direction)
|
||||||
{
|
{
|
||||||
@ -353,10 +352,10 @@ 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 (gScannerEditState == SCAN_EDIT_STATE_BUSY)
|
if (g_scanner_edit_state == SCAN_EDIT_STATE_BUSY)
|
||||||
{
|
{
|
||||||
gScanChannel = NUMBER_AddWithWraparound(gScanChannel, Direction, 0, USER_CHANNEL_LAST);
|
g_scan_channel = NUMBER_AddWithWraparound(g_scan_channel, Direction, 0, USER_CHANNEL_LAST);
|
||||||
g_show_chan_prefix = RADIO_CheckValidChannel(gScanChannel, false, 0);
|
g_show_chan_prefix = RADIO_CheckValidChannel(g_scan_channel, false, 0);
|
||||||
g_request_display_screen = DISPLAY_SCANNER;
|
g_request_display_screen = DISPLAY_SCANNER;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -434,17 +433,17 @@ void SCANNER_Start(void)
|
|||||||
|
|
||||||
if (g_scan_single_frequency)
|
if (g_scan_single_frequency)
|
||||||
{
|
{
|
||||||
gScanCssState = SCAN_CSS_STATE_SCANNING;
|
g_scan_css_state = SCAN_CSS_STATE_SCANNING;
|
||||||
gScanFrequency = g_rx_vfo->pRX->frequency;
|
g_scan_frequency = g_rx_vfo->pRX->frequency;
|
||||||
g_step_setting = g_rx_vfo->step_setting;
|
g_step_setting = g_rx_vfo->step_setting;
|
||||||
|
|
||||||
BK4819_PickRXFilterPathBasedOnFrequency(gScanFrequency);
|
BK4819_PickRXFilterPathBasedOnFrequency(g_scan_frequency);
|
||||||
BK4819_SetScanFrequency(gScanFrequency);
|
BK4819_SetScanFrequency(g_scan_frequency);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gScanCssState = SCAN_CSS_STATE_OFF;
|
g_scan_css_state = SCAN_CSS_STATE_OFF;
|
||||||
gScanFrequency = 0xFFFFFFFF;
|
g_scan_frequency = 0xFFFFFFFF;
|
||||||
|
|
||||||
BK4819_PickRXFilterPathBasedOnFrequency(0xFFFFFFFF);
|
BK4819_PickRXFilterPathBasedOnFrequency(0xFFFFFFFF);
|
||||||
BK4819_EnableFrequencyScan();
|
BK4819_EnableFrequencyScan();
|
||||||
@ -453,10 +452,10 @@ void SCANNER_Start(void)
|
|||||||
DTMF_clear_RX();
|
DTMF_clear_RX();
|
||||||
|
|
||||||
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
g_scan_delay_10ms = scan_freq_css_delay_10ms;
|
||||||
gScanCssResultCode = 0xFF;
|
g_scan_css_result_code = 0xFF;
|
||||||
gScanCssResultType = 0xFF;
|
g_scan_css_result_type = 0xFF;
|
||||||
gScanHitCount = 0;
|
g_scan_hit_count = 0;
|
||||||
gScanUseCssResult = false;
|
g_scan_use_css_result = false;
|
||||||
g_CxCSS_tail_found = false;
|
g_CxCSS_tail_found = false;
|
||||||
g_CDCSS_lost = false;
|
g_CDCSS_lost = false;
|
||||||
g_CDCSS_code_type = 0;
|
g_CDCSS_code_type = 0;
|
||||||
@ -465,8 +464,8 @@ void SCANNER_Start(void)
|
|||||||
g_vox_lost = false;
|
g_vox_lost = false;
|
||||||
#endif
|
#endif
|
||||||
g_squelch_lost = false;
|
g_squelch_lost = false;
|
||||||
gScannerEditState = SCAN_EDIT_STATE_NONE;
|
g_scanner_edit_state = SCAN_EDIT_STATE_NONE;
|
||||||
gScanProgressIndicator = 0;
|
g_scan_freq_css_timer_10ms = 0;
|
||||||
// g_flag_start_scan = false;
|
// g_flag_start_scan = false;
|
||||||
|
|
||||||
g_update_status = true;
|
g_update_status = true;
|
||||||
@ -477,11 +476,11 @@ void SCANNER_Stop(void)
|
|||||||
const uint8_t Previous = g_restore_channel;
|
const uint8_t Previous = g_restore_channel;
|
||||||
|
|
||||||
if (g_scan_state_dir == SCAN_OFF)
|
if (g_scan_state_dir == SCAN_OFF)
|
||||||
return; // but, but, we weren't !
|
return; // but, but, we weren't doing anything !
|
||||||
|
|
||||||
g_scan_state_dir = SCAN_OFF;
|
g_scan_state_dir = SCAN_OFF;
|
||||||
|
|
||||||
if (!bScanKeepFrequency)
|
if (!g_scan_keep_frequency)
|
||||||
{
|
{
|
||||||
if (g_next_channel <= USER_CHANNEL_LAST)
|
if (g_next_channel <= USER_CHANNEL_LAST)
|
||||||
{
|
{
|
||||||
@ -493,10 +492,13 @@ void SCANNER_Stop(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_rx_vfo->freq_config_rx.frequency = g_restore_frequency;
|
g_rx_vfo->freq_config_rx.frequency = g_restore_frequency;
|
||||||
|
|
||||||
RADIO_ApplyOffset(g_rx_vfo);
|
RADIO_ApplyOffset(g_rx_vfo);
|
||||||
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
|
RADIO_ConfigureSquelchAndOutputPower(g_rx_vfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
RADIO_SetupRegisters(true);
|
RADIO_SetupRegisters(true);
|
||||||
|
|
||||||
g_update_display = true;
|
g_update_display = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -20,45 +20,48 @@
|
|||||||
#include "dcs.h"
|
#include "dcs.h"
|
||||||
#include "driver/keyboard.h"
|
#include "driver/keyboard.h"
|
||||||
|
|
||||||
enum SCAN_CssState_e
|
enum scan_css_state_e
|
||||||
{
|
{
|
||||||
SCAN_CSS_STATE_OFF = 0,
|
SCAN_CSS_STATE_OFF = 0,
|
||||||
|
// SCAN_CSS_STATE_FREQ_SCANNING,
|
||||||
SCAN_CSS_STATE_SCANNING,
|
SCAN_CSS_STATE_SCANNING,
|
||||||
SCAN_CSS_STATE_FOUND,
|
SCAN_CSS_STATE_FOUND,
|
||||||
SCAN_CSS_STATE_FAILED
|
SCAN_CSS_STATE_FAILED,
|
||||||
|
SCAN_CSS_STATE_FREQ_FAILED
|
||||||
};
|
};
|
||||||
typedef enum SCAN_CssState_e SCAN_CssState_t;
|
typedef enum scan_css_state_e scan_css_state_t;
|
||||||
|
|
||||||
enum {
|
enum scan_state_dir_e {
|
||||||
SCAN_REV = -1,
|
SCAN_REV = -1,
|
||||||
SCAN_OFF = 0,
|
SCAN_OFF = 0,
|
||||||
SCAN_FWD = +1
|
SCAN_FWD = +1
|
||||||
};
|
};
|
||||||
|
typedef enum scan_state_dir_e scan_state_dir_t;
|
||||||
|
|
||||||
enum SCAN_edit_state_e {
|
enum scan_edit_state_e {
|
||||||
SCAN_EDIT_STATE_NONE = 0,
|
SCAN_EDIT_STATE_NONE = 0,
|
||||||
SCAN_EDIT_STATE_BUSY,
|
SCAN_EDIT_STATE_BUSY,
|
||||||
SCAN_EDIT_STATE_DONE
|
SCAN_EDIT_STATE_DONE
|
||||||
};
|
};
|
||||||
typedef enum SCAN_edit_state_e SCAN_edit_state_t;
|
typedef enum scan_edit_state_e scan_edit_state_t;
|
||||||
|
|
||||||
extern dcs_code_type_t gScanCssResultType;
|
extern dcs_code_type_t g_scan_css_result_type;
|
||||||
extern uint8_t gScanCssResultCode;
|
extern uint8_t g_scan_css_result_code;
|
||||||
extern bool g_flag_start_scan;
|
extern bool g_flag_start_scan;
|
||||||
extern bool g_flag_stop_scan;
|
extern bool g_flag_stop_scan;
|
||||||
extern bool g_scan_single_frequency;
|
extern bool g_scan_single_frequency;
|
||||||
extern SCAN_edit_state_t gScannerEditState;
|
extern scan_edit_state_t g_scanner_edit_state;
|
||||||
extern uint8_t gScanChannel;
|
extern uint8_t g_scan_channel;
|
||||||
extern uint32_t gScanFrequency;
|
extern uint32_t g_scan_frequency;
|
||||||
extern bool gScanPauseMode;
|
extern bool g_scan_pause_mode;
|
||||||
extern SCAN_CssState_t gScanCssState;
|
extern scan_css_state_t g_scan_css_state;
|
||||||
extern volatile bool g_schedule_scan_listen;
|
extern volatile bool g_schedule_scan_listen;
|
||||||
extern volatile uint16_t g_scan_pause_delay_in_10ms;
|
extern volatile uint16_t g_scan_pause_delay_in_10ms;
|
||||||
extern uint8_t gScanProgressIndicator;
|
extern uint16_t g_scan_freq_css_timer_10ms;
|
||||||
extern uint8_t gScanHitCount;
|
extern uint8_t g_scan_hit_count;
|
||||||
extern bool gScanUseCssResult;
|
extern bool g_scan_use_css_result;
|
||||||
extern int8_t g_scan_state_dir;
|
extern scan_state_dir_t g_scan_state_dir;
|
||||||
extern bool bScanKeepFrequency;
|
extern bool g_scan_keep_frequency;
|
||||||
|
|
||||||
void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held);
|
void SCANNER_ProcessKeys(key_code_t Key, bool key_pressed, bool key_held);
|
||||||
void SCANNER_Start(void);
|
void SCANNER_Start(void);
|
||||||
|
BIN
firmware.bin
Normal file
BIN
firmware.bin
Normal file
Binary file not shown.
BIN
firmware.packed.bin
Normal file
BIN
firmware.packed.bin
Normal file
Binary file not shown.
@ -209,7 +209,7 @@ void FUNCTION_Select(function_type_t Function)
|
|||||||
DTMF_Reply();
|
DTMF_Reply();
|
||||||
|
|
||||||
if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO)
|
if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO)
|
||||||
BK4819_PlaySingleTone(2525, 250, 0, g_eeprom.dtmf_side_tone);
|
BK4819_PlaySingleTone(APOLLO_TONE1_HZ, APOLLO_TONE_MS, 0, g_eeprom.dtmf_side_tone);
|
||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
if (g_alarm_state != ALARM_STATE_OFF)
|
if (g_alarm_state != ALARM_STATE_OFF)
|
||||||
|
1
misc.c
1
misc.c
@ -42,6 +42,7 @@ const uint16_t key_repeat_delay_10ms = 400 / 10; // 400ms
|
|||||||
const uint16_t key_repeat_10ms = 80 / 10; // 80ms .. MUST be less than 'key_repeat_delay'
|
const uint16_t key_repeat_10ms = 80 / 10; // 80ms .. MUST be less than 'key_repeat_delay'
|
||||||
const uint16_t key_debounce_10ms = 20 / 10; // 20ms
|
const uint16_t key_debounce_10ms = 20 / 10; // 20ms
|
||||||
|
|
||||||
|
const uint16_t scan_freq_css_timeout_10ms = 10000 / 10; // 10 seconds
|
||||||
const uint8_t scan_freq_css_delay_10ms = 210 / 10; // 210ms .. don't reduce this
|
const uint8_t scan_freq_css_delay_10ms = 210 / 10; // 210ms .. don't reduce this
|
||||||
|
|
||||||
const uint16_t dual_watch_count_after_tx_10ms = 3600 / 10; // 3.6 sec after TX ends
|
const uint16_t dual_watch_count_after_tx_10ms = 3600 / 10; // 3.6 sec after TX ends
|
||||||
|
7
misc.h
7
misc.h
@ -39,6 +39,12 @@
|
|||||||
#define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST)
|
#define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST)
|
||||||
#define IS_NOT_NOAA_CHANNEL(x) ((x) >= USER_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST)
|
#define IS_NOT_NOAA_CHANNEL(x) ((x) >= USER_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST)
|
||||||
|
|
||||||
|
// PTT key-up/key-down audio tone freq's used in NASA's apollo rides to the moon
|
||||||
|
#define APOLLO_TONE_MS 200 // slightly shorter tone length
|
||||||
|
//#define APOLLO_TONE_MS 250 // NASA tone length
|
||||||
|
#define APOLLO_TONE1_HZ 2525
|
||||||
|
#define APOLLO_TONE2_HZ 2475
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
USER_CHANNEL_FIRST = 0,
|
USER_CHANNEL_FIRST = 0,
|
||||||
USER_CHANNEL_LAST = 199u,
|
USER_CHANNEL_LAST = 199u,
|
||||||
@ -115,6 +121,7 @@ extern const uint16_t key_repeat_delay_10ms;
|
|||||||
extern const uint16_t key_repeat_10ms;
|
extern const uint16_t key_repeat_10ms;
|
||||||
extern const uint16_t key_debounce_10ms;
|
extern const uint16_t key_debounce_10ms;
|
||||||
|
|
||||||
|
extern const uint16_t scan_freq_css_timeout_10ms;
|
||||||
extern const uint8_t scan_freq_css_delay_10ms;
|
extern const uint8_t scan_freq_css_delay_10ms;
|
||||||
|
|
||||||
extern const uint16_t battery_save_count_10ms;
|
extern const uint16_t battery_save_count_10ms;
|
||||||
|
4
radio.c
4
radio.c
@ -93,7 +93,7 @@ bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t RADIO_FindNextChannel(uint8_t Channel, int8_t Direction, bool bCheckScanList, uint8_t VFO)
|
uint8_t RADIO_FindNextChannel(uint8_t Channel, scan_state_dir_t Direction, bool bCheckScanList, uint8_t VFO)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
@ -1090,7 +1090,7 @@ void RADIO_SendEndOfTransmission(void)
|
|||||||
BK4819_PlayRogerMDC();
|
BK4819_PlayRogerMDC();
|
||||||
|
|
||||||
if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO)
|
if (g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_APOLLO)
|
||||||
BK4819_PlaySingleTone(2475, 250, 28, g_eeprom.dtmf_side_tone);
|
BK4819_PlaySingleTone(APOLLO_TONE2_HZ, APOLLO_TONE_MS, 28, g_eeprom.dtmf_side_tone);
|
||||||
|
|
||||||
if (g_dtmf_call_state == DTMF_CALL_STATE_NONE &&
|
if (g_dtmf_call_state == DTMF_CALL_STATE_NONE &&
|
||||||
(g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH))
|
(g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_TX_DOWN || g_current_vfo->dtmf_ptt_id_tx_mode == PTT_ID_BOTH))
|
||||||
|
3
radio.h
3
radio.h
@ -20,6 +20,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "app/scanner.h"
|
||||||
#include "dcs.h"
|
#include "dcs.h"
|
||||||
#include "frequencies.h"
|
#include "frequencies.h"
|
||||||
|
|
||||||
@ -128,7 +129,7 @@ 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);
|
||||||
uint8_t RADIO_FindNextChannel(uint8_t ChNum, int8_t Direction, bool bCheckScanList, uint8_t RadioNum);
|
uint8_t RADIO_FindNextChannel(uint8_t ChNum, scan_state_dir_t Direction, bool bCheckScanList, uint8_t RadioNum);
|
||||||
void RADIO_InitInfo(vfo_info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency);
|
void RADIO_InitInfo(vfo_info_t *pInfo, const uint8_t ChannelSave, const uint32_t Frequency);
|
||||||
void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure);
|
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);
|
||||||
|
126
ui/scanner.c
126
ui/scanner.c
@ -26,62 +26,133 @@
|
|||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
#include "ui/helper.h"
|
#include "ui/helper.h"
|
||||||
#include "ui/scanner.h"
|
#include "ui/scanner.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
void UI_DisplayScanner(void)
|
void UI_DisplayScanner(void)
|
||||||
{
|
{
|
||||||
char String[16];
|
char String[16];
|
||||||
bool text_centered = false;
|
bool text_centered = false;
|
||||||
|
|
||||||
|
if (g_screen_to_display != DISPLAY_SCANNER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// clear display buffer
|
||||||
memset(g_frame_buffer, 0, sizeof(g_frame_buffer));
|
memset(g_frame_buffer, 0, sizeof(g_frame_buffer));
|
||||||
|
|
||||||
memset(String, 0, sizeof(String));
|
// ***********************************
|
||||||
if (g_scan_single_frequency || (gScanCssState != SCAN_CSS_STATE_OFF && gScanCssState != SCAN_CSS_STATE_FAILED))
|
// frequency text line
|
||||||
|
|
||||||
|
switch (g_scan_css_state)
|
||||||
{
|
{
|
||||||
const uint32_t freq = gScanFrequency;
|
default:
|
||||||
sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000);
|
case SCAN_CSS_STATE_OFF:
|
||||||
}
|
if (!g_scan_single_frequency)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
strcpy(String, "FREQ scanning");
|
strcpy(String, "FREQ scanning");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_SCANNING:
|
||||||
|
case SCAN_CSS_STATE_FOUND:
|
||||||
|
case SCAN_CSS_STATE_FAILED:
|
||||||
|
{
|
||||||
|
const uint32_t freq = g_scan_frequency;
|
||||||
|
sprintf(String, "FREQ %u.%05u", freq / 100000, freq % 100000);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||||
|
strcpy(String, "FREQ not found");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
UI_PrintString(String, 2, 0, 1, 8);
|
UI_PrintString(String, 2, 0, 1, 8);
|
||||||
|
|
||||||
memset(String, 0, sizeof(String));
|
// ***********************************
|
||||||
if (gScanCssState < SCAN_CSS_STATE_FOUND || !gScanUseCssResult)
|
// CODE text line
|
||||||
strcpy(String, "CODE scanning");
|
|
||||||
else
|
|
||||||
if (gScanCssResultType == CODE_TYPE_CONTINUOUS_TONE)
|
|
||||||
sprintf(String, " CTC %u.%uHz", CTCSS_OPTIONS[gScanCssResultCode] / 10, CTCSS_OPTIONS[gScanCssResultCode] % 10);
|
|
||||||
else
|
|
||||||
sprintf(String, " DCS D%03oN", DCS_OPTIONS[gScanCssResultCode]);
|
|
||||||
UI_PrintString(String, 2, 0, 3, 8);
|
|
||||||
|
|
||||||
memset(String, 0, sizeof(String));
|
memset(String, 0, sizeof(String));
|
||||||
switch (gScannerEditState)
|
|
||||||
|
switch (g_scan_css_state)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case SCAN_CSS_STATE_OFF:
|
||||||
|
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||||
|
strcpy(String, "CODE");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_SCANNING:
|
||||||
|
strcpy(String, "CODE scanning");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_FOUND:
|
||||||
|
|
||||||
|
switch (g_scan_css_result_type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case CODE_TYPE_OFF:
|
||||||
|
strcpy(String, "CODE ???");
|
||||||
|
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);
|
||||||
|
break;
|
||||||
|
case CODE_TYPE_DIGITAL:
|
||||||
|
case CODE_TYPE_REVERSE_DIGITAL:
|
||||||
|
sprintf(String, "CDCSS D%03oN", DCS_OPTIONS[g_scan_css_result_code]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_FAILED:
|
||||||
|
strcpy(String, "CODE not found");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
UI_PrintString(String, 2, 0, 3, 8);
|
||||||
|
|
||||||
|
// ***********************************
|
||||||
|
// bottom text line
|
||||||
|
|
||||||
|
memset(String, 0, sizeof(String));
|
||||||
|
|
||||||
|
switch (g_scanner_edit_state)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case SCAN_EDIT_STATE_NONE:
|
case SCAN_EDIT_STATE_NONE:
|
||||||
if (gScanCssState < SCAN_CSS_STATE_FOUND)
|
|
||||||
{ // rolling indicator
|
switch (g_scan_css_state)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case SCAN_CSS_STATE_OFF:
|
||||||
|
case SCAN_CSS_STATE_SCANNING: // rolling indicator
|
||||||
memset(String, 0, sizeof(String));
|
memset(String, 0, sizeof(String));
|
||||||
memset(String, '.', 15);
|
memset(String, '.', 15);
|
||||||
String[gScanProgressIndicator % 15] = '#';
|
String[(g_scan_freq_css_timer_10ms / 32) % 15] = '#';
|
||||||
}
|
break;
|
||||||
else
|
|
||||||
if (gScanCssState == SCAN_CSS_STATE_FOUND)
|
case SCAN_CSS_STATE_FOUND:
|
||||||
|
strcpy(String, "* repeat M save");
|
||||||
|
text_centered = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCAN_CSS_STATE_FAILED:
|
||||||
|
if (g_scan_single_frequency)
|
||||||
{
|
{
|
||||||
strcpy(String, "* repeat M save");
|
strcpy(String, "* repeat M save");
|
||||||
text_centered = true;
|
text_centered = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
case SCAN_CSS_STATE_FREQ_FAILED:
|
||||||
strcpy(String, "SCAN FAIL");
|
strcpy(String, "* repeat");
|
||||||
|
text_centered = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCAN_EDIT_STATE_BUSY:
|
case SCAN_EDIT_STATE_BUSY:
|
||||||
strcpy(String, "SAVE ");
|
strcpy(String, "SAVE ");
|
||||||
UI_GenerateChannelStringEx(String + 5, g_show_chan_prefix, gScanChannel);
|
UI_GenerateChannelStringEx(String + strlen(String), g_show_chan_prefix, g_scan_channel);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCAN_EDIT_STATE_DONE:
|
case SCAN_EDIT_STATE_DONE:
|
||||||
@ -89,7 +160,10 @@ void UI_DisplayScanner(void)
|
|||||||
strcpy(String, "SAVE ?");
|
strcpy(String, "SAVE ?");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
UI_PrintString(String, text_centered ? 0 : 2, text_centered ? 127 : 0, 5, 8);
|
UI_PrintString(String, text_centered ? 0 : 2, text_centered ? 127 : 0, 5, 8);
|
||||||
|
|
||||||
|
// ***********************************
|
||||||
|
|
||||||
ST7565_BlitFullScreen();
|
ST7565_BlitFullScreen();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user