From aebd3972216485305f3f46f01a9cfc8f53f13407 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Fri, 10 Nov 2023 07:31:50 +0000 Subject: [PATCH] . --- README.md | 16 ++++++++----- app/app.c | 56 +++++++++++++++++++++----------------------- app/main.c | 12 +++++----- app/menu.c | 8 +++---- driver/bk4819.c | 11 +++++---- firmware.bin | Bin 61292 -> 61280 bytes firmware.packed.bin | Bin 61310 -> 61298 bytes misc.c | 53 +++++++++++++++++++++-------------------- misc.h | 2 +- radio.c | 4 ++-- radio.h | 2 +- 11 files changed, 85 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 45ea186..c304e3c 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the sta ENABLE_FREQ_SEARCH_LNA := 0 keep this disabled ENABLE_FREQ_SEARCH_TIMEOUT := 0 timeout if FREQ not found when using F+4 search function ENABLE_CODE_SEARCH_TIMEOUT := 0 timeout if CTCSS/CDCSS not found when using F+* search function -ENABLE_SCAN_IGNORE_LIST := 1 ignore selected frequencies when scanning - add freqs to list with short */scan button when scanning, remove freq from list with long press MENU when not scanning +ENABLE_SCAN_IGNORE_LIST := 1 ignore selected frequencies when scanning - add freqs to list with short */scan button when freq scanning, remove freq from list with long press MENU when not scanning ENABLE_SCAN_RANGES := 0 adds menu option to auto select frequency scan range/step depending on your initial frequency ENABLE_KILL_REVIVE := 0 include kill and revive code ENABLE_AM_FIX := 1 dynamically adjust the front end gains when in AM mode to help prevent AM demodulator saturation, ignore the on-screen RSSI level (for now) @@ -101,13 +101,17 @@ ENABLE_KEYLOCK := 1 enable keylock menu option + keylock # New/modified function keys -* Long-press 'M' .. Copy selected channel into same VFO, then switch VFO to frequency mode +* Long-press 'M' ... Remove current frequency from ignore list (only if it's in the ignore frequency list) +* Long-press 'M' ... Copy current frequency into a channel (takes you into the channel save menu) +* Long-press 'M' ... Copy current channel into the same VFO, then switch the VFO to frequency mode * -* Long-press '7' .. Toggle selected channel scanlist setting .. if VOX is disabled in Makefile +* Long-press '5' ... Toggle selected channel scanlist setting (if NOAA is disabled in Makefile) * or -* Long-press '5' .. Toggle selected channel scanlist setting .. if NOAA is disabled in Makefile +* Long-press '7' ... Toggle selected channel scanlist setting (if VOX is disabled in Makefile) * -* Long-press '*' .. Start scanning, then toggles the scanning between scanlists 1, 2 or ALL channels +* Long-press '*' ... Start scanning, then toggles the scanning between scanlists 1, 2 or ALL channels +* +* Short-press '*' .. Add current frequency to the frequency ignore list (only if in frequency scan mode) # Edit channel/memory name @@ -123,7 +127,7 @@ ENABLE_KEYLOCK := 1 enable keylock menu option + keylock Press the Exit button at any time to cancel the edit and return to the main menu. -Sounds a lot/complicated but once you done it a couple of times you'll be fine (hopefully). +Sounds complicated but once you done it a couple of times you'll be fine. When you're editing the name, you can enter digits (0 ~ 9) directly without having to use the up/down buttons to find them. diff --git a/app/app.c b/app/app.c index 65c83cf..66208ad 100644 --- a/app/app.c +++ b/app/app.c @@ -625,7 +625,7 @@ void APP_stop_scan(void) // find the first channel that contains this frequency g_rx_vfo->freq_in_channel = SETTINGS_find_channel(g_rx_vfo->freq_config_rx.frequency); - RADIO_ApplyOffset(g_rx_vfo, false); + RADIO_apply_offset(g_rx_vfo, false); RADIO_ConfigureSquelch(g_rx_vfo); RADIO_setup_registers(true); } @@ -637,7 +637,7 @@ void APP_stop_scan(void) if (g_rx_vfo->channel_save > USER_CHANNEL_LAST) { // frequency mode - RADIO_ApplyOffset(g_rx_vfo, false); + RADIO_apply_offset(g_rx_vfo, false); RADIO_ConfigureSquelch(g_rx_vfo); SETTINGS_save_channel(g_rx_vfo->channel_save, g_rx_vfo_num, g_rx_vfo, 1); return; @@ -692,8 +692,7 @@ static void APP_next_freq(void) #if 0 // original slower method - RADIO_ApplyOffset(g_tx_vfo, false); -// RADIO_ConfigureSquelch(g_tx_vfo); + RADIO_apply_offset(g_tx_vfo, false); RADIO_setup_registers(true); #ifdef ENABLE_FASTER_CHANNEL_SCAN @@ -708,12 +707,11 @@ static void APP_next_freq(void) BK4819_set_rf_frequency(g_tx_vfo->freq_config_rx.frequency, true); BK4819_set_rf_filter_path(g_tx_vfo->freq_config_rx.frequency); - RADIO_ApplyOffset(g_tx_vfo, false); -// RADIO_ConfigureSquelch(g_tx_vfo); + RADIO_apply_offset(g_tx_vfo, false); #ifdef ENABLE_FASTER_CHANNEL_SCAN //g_scan_tick_10ms = 10; // 100ms - g_scan_tick_10ms = 7; // 70ms + g_scan_tick_10ms = 6; // 60ms #else g_scan_tick_10ms = scan_pause_freq_10ms; #endif @@ -2163,8 +2161,8 @@ void APP_time_slice_500ms(void) } } - if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT) - APP_update_rssi(g_rx_vfo_num, false); +// if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT) +// APP_update_rssi(g_rx_vfo_num, false); if (g_low_battery) { @@ -2321,10 +2319,6 @@ void APP_time_slice_10ms(void) g_request_display_screen = DISPLAY_INVALID; } - // 1of11 - if (g_update_rssi) - APP_update_rssi(g_rx_vfo_num, false); - if (g_update_display) GUI_DisplayScreen(); @@ -2419,11 +2413,19 @@ void APP_time_slice_10ms(void) AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL); #endif + // 1of11 +// if (g_update_rssi) + if (g_current_function != FUNCTION_POWER_SAVE && g_current_function != FUNCTION_TRANSMIT) + if (!g_flag_save_channel) + APP_update_rssi(g_rx_vfo_num, false); + if (g_current_function != FUNCTION_POWER_SAVE || !g_rx_idle_mode) APP_process_radio_interrupts(); APP_process_functions(); + APP_process_flash_light_10ms(); + if (g_current_function == FUNCTION_TRANSMIT) { // transmitting #ifdef ENABLE_TX_AUDIO_BAR @@ -2440,8 +2442,6 @@ void APP_time_slice_10ms(void) } #endif - APP_process_flash_light_10ms(); - #ifdef ENABLE_FMRADIO if (g_fm_radio_mode && g_fm_radio_tick_500ms > 0) return; @@ -2461,6 +2461,15 @@ void APP_time_slice_10ms(void) APP_process_transmit(); #ifdef ENABLE_FMRADIO + if (g_fm_radio_mode && g_fm_restore_tick_10ms > 0) + { + if (--g_fm_restore_tick_10ms == 0) + { // switch back to FM radio mode + FM_turn_on(); + GUI_SelectNextDisplay(DISPLAY_FM); + } + } + if (g_fm_schedule && g_fm_scan_state_dir != FM_SCAN_STATE_DIR_OFF && !g_monitor_enabled && @@ -2474,17 +2483,6 @@ void APP_time_slice_10ms(void) APP_process_power_save(); - #ifdef ENABLE_FMRADIO - if (g_fm_radio_mode && g_fm_restore_tick_10ms > 0) - { - if (--g_fm_restore_tick_10ms == 0) - { // switch back to FM radio mode - FM_turn_on(); - GUI_SelectNextDisplay(DISPLAY_FM); - } - } - #endif - APP_process_scan(); APP_process_search(); @@ -2820,7 +2818,7 @@ Skip: MENU_AcceptSetting(); - g_flag_refresh_menu = true; + g_update_menu = true; g_flag_accept_setting = false; } @@ -2930,9 +2928,9 @@ Skip: g_flag_reconfigure_vfos = false; } - if (g_flag_refresh_menu) + if (g_update_menu) { - g_flag_refresh_menu = false; + g_update_menu = false; g_menu_tick_10ms = menu_timeout_500ms; MENU_ShowCurrentSetting(); diff --git a/app/main.c b/app/main.c index 1ea4a1e..3516987 100644 --- a/app/main.c +++ b/app/main.c @@ -141,7 +141,7 @@ void toggle_chan_scanlist(void) g_eeprom.config.setting.tx_vfo_num = vfo; RADIO_select_vfos(); - RADIO_ApplyOffset(g_tx_vfo, false); + RADIO_apply_offset(g_tx_vfo, false); RADIO_ConfigureSquelch(g_tx_vfo); // RADIO_ConfigureTXPower(g_tx_vfo); RADIO_setup_registers(true); @@ -186,7 +186,7 @@ void toggle_chan_scanlist(void) #endif g_sub_menu_selection = chan; - g_flag_refresh_menu = false; + g_update_menu = false; g_current_display_screen = DISPLAY_MENU; g_update_display = false; UI_DisplayMenu(); @@ -820,7 +820,7 @@ void MAIN_Key_MENU(const bool key_pressed, const bool key_held) if (flag) { - g_flag_refresh_menu = true; + g_update_menu = true; g_request_display_screen = DISPLAY_MENU; #ifdef ENABLE_VOICE @@ -962,7 +962,7 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio SETTINGS_save_channel(g_tx_vfo->channel_save, g_eeprom.config.setting.tx_vfo_num, g_tx_vfo, 1); - RADIO_ApplyOffset(g_tx_vfo, true); + RADIO_apply_offset(g_tx_vfo, true); #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) // UART_printf("save chan %u\r\n", g_rx_vfo->channel_save); @@ -1065,7 +1065,7 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio g_tx_vfo->freq_in_channel = 0xff; #if 0 - RADIO_ApplyOffset(g_tx_vfo, false); + RADIO_apply_offset(g_tx_vfo, false); RADIO_ConfigureSquelch(g_tx_vfo); // RADIO_ConfigureTXPower(g_tx_vfo); @@ -1091,7 +1091,7 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio BK4819_set_rf_frequency(freq, true); // set the VCO/PLL BK4819_set_rf_filter_path(freq); // set the proper LNA/PA filter path - RADIO_ApplyOffset(g_tx_vfo, false); + RADIO_apply_offset(g_tx_vfo, false); RADIO_ConfigureSquelch(g_tx_vfo); // RADIO_ConfigureTXPower(g_tx_vfo); #endif diff --git a/app/menu.c b/app/menu.c index 1ab4dfa..3ae9115 100644 --- a/app/menu.c +++ b/app/menu.c @@ -1404,7 +1404,7 @@ static void MENU_Key_0_to_9(key_code_t Key, bool key_pressed, bool key_held) if (value > 0 && value <= g_menu_list_count) { g_menu_cursor = value - 1; - g_flag_refresh_menu = true; + g_update_menu = true; return; } @@ -1421,7 +1421,7 @@ static void MENU_Key_0_to_9(key_code_t Key, bool key_pressed, bool key_held) if (value > 0 && value <= g_menu_list_count) { g_menu_cursor = value - 1; - g_flag_refresh_menu = true; + g_update_menu = true; return; } break; @@ -1581,7 +1581,7 @@ static void MENU_Key_EXIT(bool key_pressed, bool key_held) g_ask_for_confirmation = 0; g_in_sub_menu = false; g_input_box_index = 0; - g_flag_refresh_menu = true; + g_update_menu = true; #ifdef ENABLE_VOICE g_another_voice_id = VOICE_ID_CANCEL; @@ -1884,7 +1884,7 @@ static void MENU_Key_UP_DOWN(bool key_pressed, bool key_held, int8_t Direction) { g_menu_cursor = NUMBER_AddWithWraparound(g_menu_cursor, -Direction, 0, g_menu_list_count - 1); - g_flag_refresh_menu = true; + g_update_menu = true; g_request_display_screen = DISPLAY_MENU; diff --git a/driver/bk4819.c b/driver/bk4819.c index 0a01dc5..62ea4f6 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -306,9 +306,9 @@ void BK4819_DisableAGC(void) BK4819_write_reg(0x10, 0x007A); // 000000 00 011 11 010 BK4819_write_reg(0x14, 0x0019); // 000000 00 000 11 001 - // ??? - BK4819_write_reg(0x49, 0x2A38); - BK4819_write_reg(0x7B, 0x8420); + BK4819_write_reg(0x49, (0u << 14) | (84u << 7) | (56u << 0)); // 0x2A38 AGC thresholds + + BK4819_write_reg(0x7B, 0x8420); // RSSI table } void BK4819_EnableAGC(void) @@ -355,8 +355,9 @@ void BK4819_EnableAGC(void) //BK4819_write_reg(0x10, 0x007A); // 000000 00 011 11 010 //BK4819_write_reg(0x14, 0x0019); // 000000 00 000 11 001 - BK4819_write_reg(0x49, 0x2A38); - BK4819_write_reg(0x7B, 0x8420); + BK4819_write_reg(0x49, (0u << 14) | (84u << 7) | (56u << 0)); // 0x2A38 AGC thresholds + + BK4819_write_reg(0x7B, 0x8420); // RSSI table for (unsigned int i = 0; i < 8; i++) BK4819_write_reg(0x06, ((i & 7u) << 13) | (0x4A << 7) | (0x36 << 0)); diff --git a/firmware.bin b/firmware.bin index ee6dab1ba8509d4d8a465ba7cbd8f0448573bd0b..a26235e4d3d8d23612ce37c9b4c4f9e82ada7a8f 100644 GIT binary patch delta 9996 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 by<2YoT{g@wQ)n@o4_^}TlWZr}VvPPDW2h;N delta 9852 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 M!cE0itiu@nKQ9yY*#H0l diff --git a/firmware.packed.bin b/firmware.packed.bin index 45b1dc468f53d0ab9783a9ed62fe6e3cda33c516..25f922c103ccec3ac1cd4da37f4eb8aa2da1e59a 100644 GIT binary patch delta 19833 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 delta 19861 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ΜC9aLz-u4 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 JEGQ{g2y*|VbHe}t diff --git a/misc.c b/misc.c index 3f9ad31..a69ffe7 100644 --- a/misc.c +++ b/misc.c @@ -85,6 +85,8 @@ const uint32_t g_default_aes_key[4] = {0x4AA5CC60, 0x0312CC5F const uint8_t g_mic_gain_dB_2[5] = {3, 8, 16, 24, 31}; +uint8_t g_mic_sensitivity_tuning; + bool g_monitor_enabled; bool g_has_aes_key; @@ -118,10 +120,17 @@ uint8_t g_key_input_count_down; uint8_t g_key_lock_tick_500ms; #endif uint8_t g_rtte_count_down; -bool g_password_locked; + uint8_t g_update_status; +bool g_update_display; +bool g_update_rssi; +bool g_update_menu; + +bool g_password_locked; + uint8_t g_found_ctcss; uint8_t g_found_cdcss; + bool g_end_of_rx_detected_maybe; int16_t g_vfo_rssi[2]; @@ -129,8 +138,6 @@ uint8_t g_vfo_rssi_bar_level[2]; uint8_t g_reduced_service; uint8_t g_battery_voltage_index; -css_scan_mode_t g_css_scan_mode; -bool g_update_rssi; #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) alarm_state_t g_alarm_state; #endif @@ -143,18 +150,18 @@ uint8_t g_request_save_channel; bool g_request_save_settings; #ifdef ENABLE_FMRADIO bool g_request_save_fm; + bool g_flag_save_fm; #endif + bool g_flag_prepare_tx; bool g_flag_accept_setting; -bool g_flag_refresh_menu; bool g_flag_save_vfo; bool g_flag_save_settings; bool g_flag_save_channel; -#ifdef ENABLE_FMRADIO - bool g_flag_save_fm; -#endif + +css_scan_mode_t g_css_scan_mode; bool g_cdcss_lost; uint8_t g_cdcss_code_type; @@ -162,23 +169,23 @@ bool g_ctcss_lost; bool g_cxcss_tail_found; uint8_t g_ctcss_tail_phase_shift_rx; - #ifdef ENABLE_VOX bool g_vox_lost; bool g_vox_audio_detected; uint16_t g_vox_resume_tick_10ms; uint16_t g_vox_pause_tick_10ms; + volatile uint16_t g_vox_stop_tick_10ms; #endif bool g_squelch_open; +reception_mode_t g_rx_reception_mode; uint8_t g_flash_light_state; uint16_t g_flash_light_blink_tick_10ms; bool g_flag_end_tx; -uint16_t g_low_battery_tick_10ms; -reception_mode_t g_rx_reception_mode; +uint16_t g_low_battery_tick_10ms; uint32_t g_scan_initial_lower; uint32_t g_scan_initial_upper; @@ -198,6 +205,7 @@ bool g_rx_vfo_is_active; uint16_t g_alarm_tone_counter_10ms; uint16_t g_alarm_running_counter_10ms; #endif + uint8_t g_menu_list_count; uint8_t g_backup_cross_vfo; @@ -205,32 +213,27 @@ uint8_t g_backup_cross_vfo; #ifdef ENABLE_NOAA bool g_noaa_mode; uint8_t g_noaa_channel; + volatile uint16_t g_noaa_tick_10ms; + volatile bool g_schedule_noaa = true; #endif -bool g_update_display; - -bool g_unhide_hidden = false; +bool g_unhide_hidden; volatile bool g_next_time_slice; +volatile bool g_next_time_slice_40ms; + volatile uint8_t g_found_cdcss_tick_10ms; volatile uint8_t g_found_ctcss_tick_10ms; -#ifdef ENABLE_VOX - volatile uint16_t g_vox_stop_tick_10ms; -#endif -volatile bool g_next_time_slice_40ms; -#ifdef ENABLE_NOAA - volatile uint16_t g_noaa_tick_10ms = 0; - volatile bool g_schedule_noaa = true; -#endif + volatile bool g_flag_tail_tone_elimination_complete; volatile uint16_t g_boot_tick_10ms = 4000 / 10; // 4 seconds -int16_t g_current_rssi[2] = {0, 0}; -uint16_t g_current_glitch[2] = {0, 0}; -uint16_t g_current_noise[2] = {0, 0}; +int16_t g_current_rssi[2]; +uint16_t g_current_glitch[2]; +uint16_t g_current_noise[2]; -uint8_t g_mic_sensitivity_tuning; +// *************************** unsigned int get_RX_VFO(void) { diff --git a/misc.h b/misc.h index 9a54466..f4e7128 100644 --- a/misc.h +++ b/misc.h @@ -243,7 +243,7 @@ extern bool g_request_save_settings; extern bool g_flag_prepare_tx; extern bool g_flag_accept_setting; // accept menu setting -extern bool g_flag_refresh_menu; // refresh menu display +extern bool g_update_menu; // refresh menu display extern bool g_flag_save_vfo; extern bool g_flag_save_settings; diff --git a/radio.c b/radio.c index 60fddb3..01d2c0c 100644 --- a/radio.c +++ b/radio.c @@ -331,7 +331,7 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int configur p_vfo->channel.tx_offset = FREQUENCY_floor_to_step(p_vfo->channel.tx_offset + (p_vfo->step_freq / 2), p_vfo->step_freq, 0, p_vfo->channel.tx_offset + p_vfo->step_freq); } - RADIO_ApplyOffset(p_vfo, true); + RADIO_apply_offset(p_vfo, true); // channel name memset(&p_vfo->channel_name, 0, sizeof(p_vfo->channel_name)); @@ -575,7 +575,7 @@ void RADIO_ConfigureTXPower(vfo_info_t *p_vfo) p_vfo->p_tx->frequency); } -void RADIO_ApplyOffset(vfo_info_t *p_vfo, const bool set_pees) +void RADIO_apply_offset(vfo_info_t *p_vfo, const bool set_pees) { uint32_t Frequency = p_vfo->freq_config_rx.frequency; diff --git a/radio.h b/radio.h index 2476df7..6e5d72c 100644 --- a/radio.h +++ b/radio.h @@ -44,7 +44,7 @@ void RADIO_configure_channel(const unsigned int VFO, const unsigned int conf #endif void RADIO_ConfigureSquelch(vfo_info_t *p_vfo); void RADIO_ConfigureTXPower(vfo_info_t *p_vfo); -void RADIO_ApplyOffset(vfo_info_t *p_vfo, const bool set_pees); +void RADIO_apply_offset(vfo_info_t *p_vfo, const bool set_pees); void RADIO_select_vfos(void); void RADIO_setup_registers(bool switch_to_function_foreground); #ifdef ENABLE_NOAA