diff --git a/Makefile b/Makefile index 188c37c..26eec57 100644 --- a/Makefile +++ b/Makefile @@ -3,46 +3,46 @@ # 0 = disable # 1 = enable # -ENABLE_CLANG := 0 -ENABLE_SWD := 0 -ENABLE_OVERLAY := 0 -ENABLE_LTO := 1 -ENABLE_UART := 1 -ENABLE_UART_DEBUG := 1 -ENABLE_AIRCOPY := 1 -ENABLE_AIRCOPY_FREQ := 1 -ENABLE_FMRADIO := 1 -ENABLE_NOAA := 0 -ENABLE_VOICE := 0 -ENABLE_MUTE_RADIO_FOR_VOICE := 1 -ENABLE_VOX := 1 -ENABLE_ALARM := 1 -ENABLE_TX1750 := 1 -ENABLE_PWRON_PASSWORD := 0 -ENABLE_RESET_AES_KEY := 1 -ENABLE_BIG_FREQ := 0 -ENABLE_SMALL_BOLD := 1 -ENABLE_KEEP_MEM_NAME := 1 -ENABLE_WIDE_RX := 1 -ENABLE_1250HZ_STEP := 1 -ENABLE_TX_WHEN_AM := 0 -ENABLE_F_CAL_MENU := 0 -ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 -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_AM_FIX := 1 -ENABLE_AM_FIX_SHOW_DATA := 1 -ENABLE_SQUELCH_MORE_SENSITIVE := 1 -ENABLE_FASTER_CHANNEL_SCAN := 1 -ENABLE_RSSI_BAR := 1 -ENABLE_SHOW_TX_TIMEOUT := 0 -ENABLE_AUDIO_BAR := 1 -ENABLE_COPY_CHAN_TO_VFO := 1 -#ENABLE_PANADAPTER := 0 -#ENABLE_SINGLE_VFO_CHAN := 0 +ENABLE_CLANG := 0 +ENABLE_SWD := 0 +ENABLE_OVERLAY := 0 +ENABLE_LTO := 1 +ENABLE_UART := 1 +ENABLE_UART_DEBUG := 1 +ENABLE_AIRCOPY := 1 +ENABLE_AIRCOPY_FREQ := 1 +ENABLE_FMRADIO := 1 +ENABLE_NOAA := 0 +ENABLE_VOICE := 0 +ENABLE_MUTE_RADIO_FOR_VOICE := 1 +ENABLE_VOX := 1 +ENABLE_ALARM := 1 +ENABLE_TX1750 := 1 +ENABLE_PWRON_PASSWORD := 0 +ENABLE_RESET_AES_KEY := 1 +ENABLE_BIG_FREQ := 0 +ENABLE_SMALL_BOLD := 1 +ENABLE_KEEP_MEM_NAME := 1 +ENABLE_WIDE_RX := 1 +ENABLE_1250HZ_STEP := 1 +ENABLE_TX_WHEN_AM := 0 +ENABLE_F_CAL_MENU := 0 +ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 +ENABLE_BOOT_BEEPS := 0 +ENABLE_SHOW_CHARGE_LEVEL := 0 +ENABLE_REVERSE_BAT_SYMBOL := 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 +ENABLE_FASTER_CHANNEL_SCAN := 1 +ENABLE_RSSI_BAR := 1 +ENABLE_SHOW_TX_TIMEOUT := 0 +ENABLE_AUDIO_BAR := 1 +ENABLE_COPY_CHAN_TO_VFO := 1 +#ENABLE_PANADAPTER := 0 +#ENABLE_SINGLE_VFO_CHAN := 0 ############################################################# @@ -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 diff --git a/README.md b/README.md index 0fe227b..5df7bb0 100644 --- a/README.md +++ b/README.md @@ -34,47 +34,46 @@ us to remove certain firmware features in order to make room in the flash for ot You'll find the options at the top of "Makefile" ('0' = disable, '1' = enable) .. ``` -ENABLE_CLANG := 0 **experimental, builds with clang instead of gcc (LTO will be disabled if you enable this) -ENABLE_SWD := 0 only needed if using CPU's SWD port (debugging/programming) -ENABLE_OVERLAY := 0 cpu FLASH stuff, not needed -ENABLE_LTO := 0 **experimental, reduces size of compiled firmware but might break EEPROM reads (OVERLAY will be disabled if you enable this) -ENABLE_UART := 1 without this you can't configure radio via PC -ENABLE_UART_DEBUG := 0 just for code debugging, it sends debug info along the USB serial connection (programming lead) -ENABLE_AIRCOPY := 1 clone radio-to-radio via RF -ENABLE_AIRCOPY_FREQ := 1 remember what you use for the aircopy frequency -ENABLE_FMRADIO := 1 WBFM VHF broadcast band receiver -ENABLE_NOAA := 1 everything NOAA (only of any use in the USA) -ENABLE_VOICE := 0 want to hear voices ? -ENABLE_MUTE_RADIO_FOR_VOICE := 1 mute the radios audio when a voice is playing -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_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 -ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though front-end/PA not designed for full range) -ENABLE_1250HZ_STEP := 1 enable smaller 1.25kHz frequency steps -ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM -ENABLE_F_CAL_MENU := 0 enable/disable the radios hidden frequency calibration menu -ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method -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_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 -ENABLE_FASTER_CHANNEL_SCAN := 1 increases the channel scan speed, but the squelch is also made more twitchy -ENABLE_RSSI_BAR := 1 enable a dBm/Sn RSSI bar graph level inplace of the little antenna symbols -ENABLE_SHOW_TX_TIMEOUT := 0 show the remainng TX time -ENABLE_AUDIO_BAR := 1 experimental, display an audo bar level when TX'ing, includes remaining TX time (in seconds) -ENABLE_COPY_CHAN_TO_VFO := 1 copy current channel into the other VFO. Long press Menu key ('M') -#ENABLE_BAND_SCOPE := 0 not yet implemented - spectrum/pan-adapter -#ENABLE_SINGLE_VFO_CHAN := 0 not yet implemented - single VFO on display when possible +ENABLE_CLANG := 0 **experimental, builds with clang instead of gcc (LTO will be disabled if you enable this) +ENABLE_SWD := 0 only needed if using CPU's SWD port (debugging/programming) +ENABLE_OVERLAY := 0 cpu FLASH stuff, not needed +ENABLE_LTO := 0 **experimental, reduces size of compiled firmware but might break EEPROM reads (OVERLAY will be disabled if you enable this) +ENABLE_UART := 1 without this you can't configure radio via PC +ENABLE_UART_DEBUG := 0 just for code debugging, it sends debug info along the USB serial connection (programming lead) +ENABLE_AIRCOPY := 1 clone radio-to-radio via RF +ENABLE_AIRCOPY_FREQ := 1 remember what you use for the aircopy frequency +ENABLE_FMRADIO := 1 WBFM VHF broadcast band receiver +ENABLE_NOAA := 1 everything NOAA (only of any use in the USA) +ENABLE_VOICE := 0 want to hear voices ? +ENABLE_MUTE_RADIO_FOR_VOICE := 1 mute the radios audio when a voice is playing +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 (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 +ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though front-end/PA not designed for full range) +ENABLE_1250HZ_STEP := 1 enable smaller 1.25kHz frequency steps +ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM +ENABLE_F_CAL_MENU := 0 enable/disable the radios hidden frequency calibration menu +ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method +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_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 +ENABLE_FASTER_CHANNEL_SCAN := 1 increases the channel scan speed, but the squelch is also made more twitchy +ENABLE_RSSI_BAR := 1 enable a dBm/Sn RSSI bar graph level inplace of the little antenna symbols +ENABLE_SHOW_TX_TIMEOUT := 0 show the remainng TX time +ENABLE_AUDIO_BAR := 1 experimental, display an audo bar level when TX'ing, includes remaining TX time (in seconds) +ENABLE_COPY_CHAN_TO_VFO := 1 copy current channel into the other VFO. Long press Menu key ('M') +#ENABLE_BAND_SCOPE := 0 not yet implemented - spectrum/pan-adapter +#ENABLE_SINGLE_VFO_CHAN := 0 not yet implemented - single VFO on display when possible ``` # New/modified function keys diff --git a/app/app.c b/app/app.c index 945d2eb..6b31e79 100644 --- a/app/app.c +++ b/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 @@ -1503,7 +1503,7 @@ void APP_CheckKeys(void) #else APP_ProcessKey(g_key_prev, true, g_key_held); #endif - + //g_update_status = true; //g_update_display = true; } @@ -1592,15 +1592,15 @@ void APP_TimeSlice10ms(void) { // we're TX'ing AIRCOPY_process_FSK_tx_10ms(); } - + APP_CheckKeys(); if (g_update_display) GUI_DisplayScreen(); - + if (g_update_status) UI_DisplayStatus(false); - + return; } #endif @@ -1755,14 +1755,34 @@ 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 - BK4819_DisableFrequencyScan(); - g_scan_css_state = SCAN_CSS_STATE_FREQ_FAILED; - g_update_status = true; - g_update_display = true; - break; - #endif + { // 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)) @@ -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,8 +1865,10 @@ 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; - g_update_status = true; - g_update_display = true; + + AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + g_update_status = true; + g_update_display = true; } } else @@ -1855,8 +1884,10 @@ void APP_TimeSlice10ms(void) { g_scan_css_state = SCAN_CSS_STATE_FOUND; g_scan_use_css_result = true; - g_update_status = true; - g_update_display = true; + + AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP); + g_update_status = true; + g_update_display = true; } } else @@ -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 :( diff --git a/app/menu.c b/app/menu.c index 77fb175..7b21193 100644 --- a/app/menu.c +++ b/app/menu.c @@ -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(); } diff --git a/app/scanner.c b/app/scanner.c index 96b48af..64bade8 100644 --- a/app/scanner.c +++ b/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; + 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; + 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: - g_scanner_edit_state = SCAN_EDIT_STATE_NONE; + case SCAN_EDIT_STATE_SAVE_CONFIRM: + g_scanner_edit_state = SCAN_EDIT_STATE_NONE; + #ifdef ENABLE_VOICE - g_another_voice_id = VOICE_ID_CANCEL; + 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: + 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; + 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; - g_scanner_edit_state = SCAN_EDIT_STATE_DONE; } - break; + +// break; - case SCAN_EDIT_STATE_DONE: + 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 - g_scanner_edit_state = SCAN_EDIT_STATE_NONE; + 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_request_display_screen = DISPLAY_SCANNER; + 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; diff --git a/app/scanner.h b/app/scanner.h index 4f9014b..8d2de3f 100644 --- a/app/scanner.h +++ b/app/scanner.h @@ -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; diff --git a/dcs.h b/dcs.h index 67185a7..f237f7a 100644 --- a/dcs.h +++ b/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 diff --git a/firmware.bin b/firmware.bin index 36a1913..c58326f 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 6ae0515..23b3a02 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/functions.c b/functions.c index e2cf6fb..9eecdca 100644 --- a/functions.c +++ b/functions.c @@ -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 diff --git a/radio.c b/radio.c index cbd85fc..600f99a 100644 --- a/radio.c +++ b/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: diff --git a/ui/menu.c b/ui/menu.c index 5c4e76c..38788fc 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -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(); diff --git a/ui/scanner.c b/ui/scanner.c index e77fb21..bc5e9b0 100644 --- a/ui/scanner.c +++ b/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); // ***********************************