diff --git a/Makefile b/Makefile index 6aa6696..02b87c7 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ ENABLE_NOAA := 0 ENABLE_VOICE := 0 ENABLE_MUTE_RADIO_FOR_VOICE := 0 # Tx on Voice 1.0 kB -ENABLE_VOX := 1 +ENABLE_VOX := 0 ENABLE_VOX_MORE_SENSITIVE := 1 ENABLE_REDUCE_LOW_MID_TX_POWER := 1 # Tx Alarm 600 B @@ -82,7 +82,7 @@ ENABLE_TX_AUDIO_BAR := 0 ENABLE_SIDE_BUTT_MENU := 0 # Key Lock 400 B ENABLE_KEYLOCK := 1 -ENABLE_PANADAPTER := 0 +ENABLE_PANADAPTER := 1 #ENABLE_SINGLE_VFO_CHAN := 0 ############################################################# diff --git a/firmware.bin b/firmware.bin index 84c43c8..d16da2a 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index d6302b8..2b59236 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/panadapter.c b/panadapter.c index bfaf226..bf9689d 100644 --- a/panadapter.c +++ b/panadapter.c @@ -17,10 +17,10 @@ #include "ui/main.h" #include "ui/ui.h" -bool g_pan_enabled; -int g_panadapter_vfo_mode; // > 0 if we're currently sampling the VFO -uint8_t g_panadapter_rssi[PANADAPTER_BINS + 1 + PANADAPTER_BINS]; -int g_panadapter_rssi_index; +bool g_pan_enabled; +int g_panadapter_vfo_mode; // > 0 if we're currently sampling the VFO +uint8_t g_panadapter_rssi[PANADAPTER_BINS + 1 + PANADAPTER_BINS]; +unsigned int panadapter_rssi_index; bool PAN_scanning(void) { @@ -35,11 +35,11 @@ void PAN_set_freq(void) if (g_pan_enabled && g_panadapter_vfo_mode <= 0) { // panadapter mode .. add the bin offset - if (g_panadapter_rssi_index < PANADAPTER_BINS) - freq -= step_size * (PANADAPTER_BINS - g_panadapter_rssi_index); + if (panadapter_rssi_index < PANADAPTER_BINS) + freq -= step_size * (PANADAPTER_BINS - panadapter_rssi_index); else - if (g_panadapter_rssi_index > PANADAPTER_BINS) - freq += step_size * (g_panadapter_rssi_index - PANADAPTER_BINS); + if (panadapter_rssi_index > PANADAPTER_BINS) + freq += step_size * (panadapter_rssi_index - PANADAPTER_BINS); } BK4819_set_rf_frequency(freq, true); // set the VCO/PLL @@ -78,7 +78,6 @@ void PAN_process_10ms(void) PAN_set_freq(); g_update_display = true; - //UI_DisplayMain_pan(true); } return; @@ -88,45 +87,50 @@ void PAN_process_10ms(void) { // enable the panadapter g_panadapter_vfo_mode = 0; - g_panadapter_rssi_index = 0; + panadapter_rssi_index = 0; // memset(g_panadapter_rssi, 0, sizeof(g_panadapter_rssi)); g_pan_enabled = true; PAN_set_freq(); g_update_display = true; - //UI_DisplayMain_pan(true); + return; + } + if (g_panadapter_vfo_mode > 0 && g_squelch_open) + { // we have a signal on the VFO frequency + g_panadapter_vfo_mode = 50; // pause scanning for at least another 500ms return; } - if (g_panadapter_vfo_mode <= 0) - { // save the current RSSI value - const uint16_t rssi = BK4819_GetRSSI(); - g_panadapter_rssi[g_panadapter_rssi_index] = (rssi <= 255) ? rssi : 255; - } - if (g_panadapter_vfo_mode <= 0) { // scanning - if (++g_panadapter_rssi_index >= (int)ARRAY_SIZE(g_panadapter_rssi)) - g_panadapter_rssi_index = 0; + + // save the current RSSI value + const uint16_t rssi = BK4819_GetRSSI(); + g_panadapter_rssi[panadapter_rssi_index] = (rssi <= 255) ? rssi : 255; + + // next frequency + if (++panadapter_rssi_index >= ARRAY_SIZE(g_panadapter_rssi)) + panadapter_rssi_index = 0; if (g_tx_vfo->channel.mod_mode == MOD_MODE_FM) - // switch back to the VFO frequency once every 16 frequency steps .. if in FM mode - g_panadapter_vfo_mode = ((g_panadapter_rssi_index & 15u) == 0) ? 1 : 0; + { // switch back to the VFO frequency for 90ms once every 250ms + g_panadapter_vfo_mode = ((panadapter_rssi_index % 25) == 0) ? 9 : 0; + } else - // switch back to the VFO frequency once each scan cycle if not in FM mode - g_panadapter_vfo_mode = (g_panadapter_rssi_index == 0) ? 1 : 0; + { // switch back to the VFO frequency for 90ms once each scan cycle + g_panadapter_vfo_mode = (panadapter_rssi_index == 0) ? 9 : 0; + } } else - { // checking the VFO frequency for a signal .. we do this this periodically - if (++g_panadapter_vfo_mode >= 9) // monitor the VFO frequency for 90ms before continuing our scan - g_panadapter_vfo_mode = 0; + { // checking the VFO frequency for a signal .. we periodically do this + g_panadapter_vfo_mode--; } PAN_set_freq(); // the last bin value .. draw the panadapter once each scan cycle - if (g_panadapter_rssi_index == 0 && g_panadapter_vfo_mode <= 1) + if (panadapter_rssi_index == 0) UI_DisplayMain_pan(true); //g_update_display = true; } diff --git a/ui/main.c b/ui/main.c index e326f32..246fceb 100644 --- a/ui/main.c +++ b/ui/main.c @@ -412,18 +412,20 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int { const unsigned int line = (g_eeprom.config.setting.tx_vfo_num == 0) ? 4 : 0; uint8_t *base_line = g_frame_buffer[line + 2]; - uint8_t max_rssi = g_panadapter_rssi[0]; - uint8_t min_rssi = g_panadapter_rssi[0]; + uint8_t max_rssi; + uint8_t min_rssi; uint8_t span_rssi; unsigned int i; - if (!g_eeprom.config.setting.panadapter || !g_pan_enabled || g_panadapter_vfo_mode > 0) + if (!g_eeprom.config.setting.panadapter || !g_pan_enabled) return; - if (single_vfo < 0 || g_current_display_screen != DISPLAY_MAIN) - return; - if (g_squelch_open || g_monitor_enabled) + if (single_vfo < 0 || g_current_display_screen != DISPLAY_MAIN || g_monitor_enabled) return; +// if (g_squelch_open) +// return; + max_rssi = g_panadapter_rssi[0]; + min_rssi = g_panadapter_rssi[0]; for (i = 1; i < ARRAY_SIZE(g_panadapter_rssi); i++) { const uint8_t rssi = g_panadapter_rssi[i]; @@ -434,21 +436,20 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int } span_rssi = max_rssi - min_rssi; - if (span_rssi < 20) // minimum vertical range + if (span_rssi < 40) // minimum vertical range { - span_rssi = 20; + span_rssi = 40; if (min_rssi > (255 - span_rssi)) min_rssi = 255 - span_rssi; max_rssi = min_rssi + span_rssi; } if (now) - { - memset(g_frame_buffer[line + 0], 0, LCD_WIDTH); - memset(g_frame_buffer[line + 1], 0, LCD_WIDTH); - memset(g_frame_buffer[line + 2], 0, LCD_WIDTH); + { // clear our assigned screen area + memset(g_frame_buffer[line], 0, LCD_WIDTH * 3); } + // draw the bins for (i = 0; i < ARRAY_SIZE(g_panadapter_rssi); i++) { uint8_t rssi = g_panadapter_rssi[i]; @@ -477,7 +478,7 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int base_line[(ARRAY_SIZE(g_panadapter_rssi) / 2) - (LCD_WIDTH * 2)] = 0xAA; // top horizontal line - for (i = 0; i < ARRAY_SIZE(g_panadapter_rssi); i += 2) + for (i = 0; i < ARRAY_SIZE(g_panadapter_rssi); i += 4) base_line[i - (LCD_WIDTH * 2)] |= 1u; // sprintf(str, "r %3d g %3u n %3u", rssi, glitch, noise); @@ -507,13 +508,6 @@ void UI_DisplayMain(void) if (g_eeprom.config.setting.dual_watch != DUAL_WATCH_OFF && g_rx_vfo_is_active) current_vfo_num = g_rx_vfo_num; // we're currently monitoring the other VFO -#ifdef ENABLE_PANADAPTER - if (g_eeprom.config.setting.dual_watch == DUAL_WATCH_OFF && g_eeprom.config.setting.cross_vfo == CROSS_BAND_OFF) - if (g_eeprom.config.setting.panadapter && g_pan_enabled) - if (!g_squelch_open && !g_monitor_enabled) - single_vfo = g_eeprom.config.setting.tx_vfo_num; -#endif - // clear the screen memset(g_frame_buffer, 0, sizeof(g_frame_buffer)); @@ -539,6 +533,14 @@ void UI_DisplayMain(void) } #endif + #ifdef ENABLE_PANADAPTER + if (g_eeprom.config.setting.dual_watch == DUAL_WATCH_OFF && g_eeprom.config.setting.cross_vfo == CROSS_BAND_OFF) + if (g_eeprom.config.setting.panadapter && g_pan_enabled) + //if (!g_squelch_open && !g_monitor_enabled) + if (!g_monitor_enabled) + single_vfo = g_eeprom.config.setting.tx_vfo_num; + #endif + for (vfo_num = 0; vfo_num < 2; vfo_num++) { const unsigned int scrn_chan = g_eeprom.config.setting.indices.vfo[vfo_num].screen; @@ -1140,7 +1142,8 @@ void UI_DisplayMain(void) } #ifdef ENABLE_PANADAPTER - UI_DisplayMain_pan(false); + //if (single_vfo >= 0) + UI_DisplayMain_pan(false); #endif ST7565_BlitFullScreen();