diff --git a/app/action.c b/app/action.c index f4639be..ca6fc89 100644 --- a/app/action.c +++ b/app/action.c @@ -265,8 +265,9 @@ void ACTION_Scan(bool bRestart) #ifdef ENABLE_SCAN_RANGES if (IS_FREQ_CHANNEL(g_tx_vfo->channel_save) && g_eeprom.config.setting.scan_ranges_enable) { - const uint32_t freq = g_tx_vfo->freq_config_rx.frequency; + uint32_t freq = g_tx_vfo->freq_config_rx.frequency; FREQUENCY_scan_range(freq, &g_scan_initial_lower, &g_scan_initial_upper, &g_scan_initial_step_size); +// freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); } } #endif diff --git a/app/app.c b/app/app.c index ccf0e3c..ecc1dc0 100644 --- a/app/app.c +++ b/app/app.c @@ -180,6 +180,9 @@ static void APP_process_new_receive(void) { bool flag; + if (!g_squelch_open) + BK4819_set_AFC(0); + if (!g_squelch_open && !g_monitor_enabled) { // squelch is closed @@ -190,11 +193,24 @@ static void APP_process_new_receive(void) { FUNCTION_Select(FUNCTION_FOREGROUND); g_update_display = true; +// g_update_status = true; } return; } + switch (g_rx_vfo->channel.mod_mode) + { + case MOD_MODE_FM: + case MOD_MODE_AM: + BK4819_set_AFC(2); + break; + default: + case MOD_MODE_DSB: + BK4819_set_AFC(0); + break; + } + flag = (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_current_code_type == CODE_TYPE_NONE); #ifdef ENABLE_NOAA @@ -220,7 +236,7 @@ static void APP_process_new_receive(void) return; if (g_scan_state_dir == SCAN_STATE_DIR_OFF && g_css_scan_mode == CSS_SCAN_MODE_OFF) - { // not code scanning + { // not scanning #ifdef ENABLE_KILL_REVIVE if (g_rx_vfo->channel.dtmf_decoding_enable || g_eeprom.config.setting.radio_disabled) @@ -240,7 +256,6 @@ static void APP_process_new_receive(void) g_update_status = true; g_update_display = true; - return; } } @@ -264,6 +279,9 @@ static void APP_process_rx(void) // APP_update_rssi(g_rx_vfo_num); g_update_rssi = true; +// if (!g_squelch_open) +// BK4819_set_AFC(0); + if (g_flag_tail_tone_elimination_complete) { Mode = END_OF_RX_MODE_END; @@ -476,6 +494,18 @@ bool APP_start_listening(void) // clear the other vfo's rssi level (to hide the antenna symbol) g_vfo_rssi_bar_level[(chan + 1) & 1u] = 0; + switch (g_rx_vfo->channel.mod_mode) + { + case MOD_MODE_FM: + case MOD_MODE_AM: + BK4819_set_AFC(2); + break; + default: + case MOD_MODE_DSB: + BK4819_set_AFC(0); + break; + } + if (g_scan_state_dir != SCAN_STATE_DIR_OFF) { // we're RF scanning @@ -674,7 +704,10 @@ static void APP_next_freq(void) // round #ifdef ENABLE_SCAN_RANGES if (g_eeprom.config.setting.scan_ranges_enable) - freq = g_scan_initial_lower + ((((freq - g_scan_initial_lower) + (g_scan_initial_step_size / 2)) / g_scan_initial_step_size) * g_scan_initial_step_size); + //freq = g_scan_initial_lower + ((((freq - g_scan_initial_lower) + (g_scan_initial_step_size / 2)) / g_scan_initial_step_size) * g_scan_initial_step_size); + freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); + #else + //freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); #endif #ifdef ENABLE_SCAN_IGNORE_LIST diff --git a/app/main.c b/app/main.c index da1d74f..c9a8290 100644 --- a/app/main.c +++ b/app/main.c @@ -1016,11 +1016,11 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio if (IS_FREQ_CHANNEL(Channel)) { // frequency mode - uint32_t freq = g_tx_vfo->freq_config_rx.frequency; + uint32_t freq = g_tx_vfo->freq_config_rx.frequency; + const frequency_band_t band = FREQUENCY_GetBand(freq); if (key_pressed && !key_held) { // just pressed - const frequency_band_t band = FREQUENCY_GetBand(freq); g_scan_initial_upper = FREQ_BAND_TABLE[band].upper; g_scan_initial_lower = FREQ_BAND_TABLE[band].lower; @@ -1028,8 +1028,14 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio #ifdef ENABLE_SCAN_RANGES //if (g_eeprom.config.setting.scan_ranges_enable) + //{ // FREQUENCY_scan_range(freq, &g_scan_initial_lower, &g_scan_initial_upper, &g_scan_initial_step_size); + // freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); + //} #endif + +// if (band == BAND2_108MHz) +// freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); } freq += g_scan_initial_step_size * direction; @@ -1046,9 +1052,13 @@ void MAIN_Key_UP_DOWN(bool key_pressed, bool key_held, scan_state_dir_t directio // round #ifdef ENABLE_SCAN_RANGES //if (key_held) - // freq = g_scan_initial_lower + ((((freq - g_scan_initial_lower) + (g_scan_initial_step_size / 2)) / g_scan_initial_step_size) * g_scan_initial_step_size); + // //freq = g_scan_initial_lower + ((((freq - g_scan_initial_lower) + (g_scan_initial_step_size / 2)) / g_scan_initial_step_size) * g_scan_initial_step_size); + // freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); #endif + if (band == BAND2_108MHz) + freq = FREQUENCY_floor_to_step(freq, g_scan_initial_step_size, g_scan_initial_lower, g_scan_initial_upper); + if (FREQUENCY_rx_freq_check(freq) < 0) { // frequency not allowed g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; diff --git a/app/menu.c b/app/menu.c index 71657fd..e386ce8 100644 --- a/app/menu.c +++ b/app/menu.c @@ -1060,7 +1060,8 @@ void MENU_ShowCurrentSetting(void) case MENU_AUTO_BACKLITE: g_sub_menu_selection = g_eeprom.config.setting.backlight_time; - BACKLIGHT_turn_on(0); +// BACKLIGHT_turn_on(0); + BACKLIGHT_turn_on(5); break; case MENU_AUTO_BACKLITE_ON_TX_RX: diff --git a/audio.c b/audio.c index 6e11ff7..010ef1b 100644 --- a/audio.c +++ b/audio.c @@ -81,7 +81,7 @@ void AUDIO_set_mod_mode(const mod_mode_t mode) { BK4819_af_type_t af_mode; switch (mode) - { + { default: case MOD_MODE_FM: af_mode = BK4819_AF_FM; break; case MOD_MODE_AM: af_mode = BK4819_AF_AM; break; diff --git a/driver/bk4819.c b/driver/bk4819.c index 62ea4f6..54f0389 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -229,14 +229,19 @@ void BK4819_write_16(uint16_t Data) } } -void BK4819_EnableAFC(void) +void BK4819_set_AFC(unsigned int level) { - BK4819_write_reg(0x73, (0u << 11) | (0u << 4)); + if (level > 8) + level = 8; + + if (level == 0) + BK4819_write_reg(0x73, BK4819_read_reg(0x73) | (1u << 4)); // disable + else + BK4819_write_reg(0x73, ((8u - level) << 11) | (0u << 4)); } void BK4819_DisableAFC(void) { - BK4819_write_reg(0x73, (0u << 11) | (1u << 4)); } void BK4819_DisableAGC(void) diff --git a/driver/bk4819.h b/driver/bk4819.h index 75ca739..982587c 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -67,8 +67,7 @@ void BK4819_write_reg(const uint8_t Register, uint16_t Data); void BK4819_write_8(uint8_t Data); void BK4819_write_16(uint16_t Data); -void BK4819_EnableAFC(void); -void BK4819_DisableAFC(void); +void BK4819_set_AFC(unsigned int level); void BK4819_DisableAGC(void); void BK4819_EnableAGC(void); diff --git a/firmware.bin b/firmware.bin index 441f2c0..17453c3 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index b8efa85..07021da 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/frequencies.c b/frequencies.c index c81e644..94f27be 100644 --- a/frequencies.c +++ b/frequencies.c @@ -168,34 +168,32 @@ uint32_t FREQUENCY_floor_to_step(uint32_t freq, const uint32_t step_size, const if (delta < step_size) return lower; - + if (step_size == 833) { - uint32_t base = (delta / 2500) * 2500; // 25kHz step - const unsigned int index = ((delta - base) % 2500) / step_size; - - if (index == 2) + uint32_t base = (delta / 2500) * 2500; // 25kHz step + const uint32_t index = ((delta - base) % 2500) / step_size; + if (index >= 2) base++; - freq = lower + base + (step_size * index); } else freq = lower + ((delta / step_size) * step_size); - + return freq; } uint32_t FREQUENCY_wrap_to_step_band(uint32_t freq, const uint32_t step_size, const unsigned int band) { - const uint32_t upper = FREQ_BAND_TABLE[band].upper; - const uint32_t lower = FREQ_BAND_TABLE[band].lower; - + const uint32_t upper = FREQ_BAND_TABLE[band].upper; + const uint32_t lower = FREQ_BAND_TABLE[band].lower; + if (freq < lower) return FREQUENCY_floor_to_step(upper, step_size, lower, upper); - + if (freq >= upper) freq = lower; - + return freq; } @@ -227,7 +225,7 @@ uint32_t FREQUENCY_wrap_to_step_band(uint32_t freq, const uint32_t step_size, co { const frequency_band_t band = FREQUENCY_GetBand(freq); unsigned int i; - + for (i = 0; i < ARRAY_SIZE(FREQ_SCAN_RANGE_TABLE); i++) { const uint32_t _upper = FREQ_SCAN_RANGE_TABLE[i].upper; diff --git a/radio.c b/radio.c index 01d2c0c..3d17ac0 100644 --- a/radio.c +++ b/radio.c @@ -437,7 +437,7 @@ void RADIO_ConfigureSquelch(vfo_info_t *p_vfo) // 64 30 2D 29 26 23 20 1D 1A 17 FF FF FF FF FF FF // close noise // 5A 14 11 0E 0B 08 03 02 02 02 FF FF FF FF FF FF // open glitch // 64 11 0E 0B 08 05 05 04 04 04 FF FF FF FF FF FF // close glitch - // + // // bands 123 // 32 68 6B 6E 6F 72 75 77 79 7B FF FF FF FF FF FF // open rssi // 28 64 67 6A 6C 6E 71 73 76 78 FF FF FF FF FF FF // close rssi @@ -625,6 +625,44 @@ void RADIO_select_vfos(void) g_current_vfo = (g_eeprom.config.setting.cross_vfo == CROSS_BAND_OFF) ? g_rx_vfo : &g_vfo_info[g_eeprom.config.setting.tx_vfo_num]; } +BK4819_filter_bandwidth_t RADIO_set_bandwidth(BK4819_filter_bandwidth_t bandwidth, const int mode) +{ + switch (bandwidth) + { + default: + bandwidth = BK4819_FILTER_BW_WIDE; + + // Fallthrough + + case BK4819_FILTER_BW_WIDE: + case BK4819_FILTER_BW_NARROW: + case BK4819_FILTER_BW_NARROWER: + break; + } + + switch (mode) + { + case MOD_MODE_FM: + //BK4819_set_AFC(2); + BK4819_set_AFC(0); + break; + + case MOD_MODE_AM: + //BK4819_set_AFC(2); + BK4819_set_AFC(0); + break; + + case MOD_MODE_DSB: + bandwidth = BK4819_FILTER_BW_NARROWER; + BK4819_set_AFC(0); + break; + } + + BK4819_SetFilterBandwidth(bandwidth); + + return bandwidth; +} + void RADIO_setup_registers(bool switch_to_function_foreground) { BK4819_filter_bandwidth_t Bandwidth = g_rx_vfo->channel.channel_bandwidth; @@ -642,40 +680,7 @@ void RADIO_setup_registers(bool switch_to_function_foreground) // turn green LED off BK4819_set_GPIO_pin(BK4819_GPIO6_PIN2_GREEN, false); - switch (Bandwidth) - { - default: - Bandwidth = BK4819_FILTER_BW_WIDE; - - // Fallthrough - - case BK4819_FILTER_BW_WIDE: - case BK4819_FILTER_BW_NARROW: - #ifdef ENABLE_AM_FIX - #if 0 - BK4819_SetFilterBandwidth(Bandwidth); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - #else - if (g_rx_vfo->channel.mod_mode != MOD_MODE_FM) - { - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER); // sideband - BK4819_DisableAFC(); - } - else - { - BK4819_SetFilterBandwidth(Bandwidth); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - } - #endif - #else - BK4819_SetFilterBandwidth(Bandwidth, false); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - #endif - break; - } + Bandwidth = RADIO_set_bandwidth(Bandwidth, g_rx_vfo->channel.mod_mode); BK4819_write_reg(0x30, 0); BK4819_write_reg(0x30, @@ -916,40 +921,7 @@ void RADIO_enableTX(const bool fsk_tx) BK4819_set_GPIO_pin(BK4819_GPIO0_PIN28_RX_ENABLE, false); - switch (Bandwidth) - { - default: - Bandwidth = BK4819_FILTER_BW_WIDE; - - // Fallthrough - - case BK4819_FILTER_BW_WIDE: - case BK4819_FILTER_BW_NARROW: - #ifdef ENABLE_AM_FIX - #if 0 - BK4819_SetFilterBandwidth(Bandwidth); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - #else - if (g_current_vfo->channel.mod_mode == MOD_MODE_DSB) - { - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER); // sideband - BK4819_DisableAFC(); - } - else - { - BK4819_SetFilterBandwidth(Bandwidth); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - } - #endif - #else - BK4819_SetFilterBandwidth(Bandwidth); -// BK4819_EnableAFC(); - BK4819_DisableAFC(); - #endif - break; - } + Bandwidth = RADIO_set_bandwidth(Bandwidth, g_current_vfo->channel.mod_mode); // if DTMF is enabled when TX'ing, it changes the TX audio filtering ! .. 1of11 // so MAKE SURE that DTMF is disabled - until needed @@ -1030,7 +1002,7 @@ void RADIO_PrepareTX(void) #ifdef ENABLE_ALARM if (g_alarm_state == ALARM_STATE_TXALARM && g_eeprom.config.setting.alarm_mode != ALARM_MODE_TONE) { // enable the alarm tone but not the TX - + g_alarm_state = ALARM_STATE_ALARM; GUI_DisplayScreen(); BK4819_start_tone(500, 28, g_current_function == FUNCTION_TRANSMIT, false); diff --git a/ui/menu.c b/ui/menu.c index a64289b..770f0ae 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -717,6 +717,7 @@ void UI_DisplayMenu(void) case MENU_AUTO_BACKLITE: strcpy(str, "BACKLITE\n"); strcat(str, g_sub_menu_backlight[g_sub_menu_selection]); + BACKLIGHT_turn_on(5); break; case MENU_AUTO_BACKLITE_ON_TX_RX: @@ -989,7 +990,7 @@ void UI_DisplayMenu(void) #endif case MENU_ANI_ID: - strcpy(str, "YOUR ID\n"); + strcpy(str, "DTMF ID\n"); strcat(str, g_eeprom.config.setting.dtmf.ani_id); break;