mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-29 06:41:25 +03:00
panadapter update
This commit is contained in:
parent
6160394f0f
commit
1352448528
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
54
panadapter.c
54
panadapter.c
@ -2,6 +2,7 @@
|
|||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
#include "am_fix.h"
|
#include "am_fix.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "app/dtmf.h"
|
||||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||||
#include "driver/uart.h"
|
#include "driver/uart.h"
|
||||||
#endif
|
#endif
|
||||||
@ -14,6 +15,7 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
#include "ui/inputbox.h"
|
||||||
#include "ui/main.h"
|
#include "ui/main.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
|
||||||
@ -35,18 +37,14 @@ bool PAN_scanning(void)
|
|||||||
void PAN_set_freq(void)
|
void PAN_set_freq(void)
|
||||||
{ // set the frequency
|
{ // set the frequency
|
||||||
|
|
||||||
uint32_t freq = g_tx_vfo->p_rx->frequency;
|
int32_t freq = g_tx_vfo->p_rx->frequency;
|
||||||
|
|
||||||
uint32_t step_size = g_tx_vfo->step_freq;
|
int32_t step_size = g_tx_vfo->step_freq;
|
||||||
step_size = (step_size < PANADAPTER_MIN_STEP) ? PANADAPTER_MIN_STEP : (step_size > PANADAPTER_MAX_STEP) ? PANADAPTER_MAX_STEP : step_size;
|
step_size = (step_size < PANADAPTER_MIN_STEP) ? PANADAPTER_MIN_STEP : (step_size > PANADAPTER_MAX_STEP) ? PANADAPTER_MAX_STEP : step_size;
|
||||||
|
|
||||||
if (g_panadapter_enabled && g_panadapter_vfo_mode <= 0)
|
if (g_panadapter_enabled && g_panadapter_vfo_mode <= 0)
|
||||||
{ // panadapter mode .. add the bin offset
|
{ // panadapter mode .. add the bin offset
|
||||||
if (panadapter_rssi_index < PANADAPTER_BINS)
|
freq += step_size * ((int)panadapter_rssi_index - PANADAPTER_BINS);
|
||||||
freq -= step_size * (PANADAPTER_BINS - panadapter_rssi_index);
|
|
||||||
else
|
|
||||||
if (panadapter_rssi_index > PANADAPTER_BINS)
|
|
||||||
freq += step_size * (panadapter_rssi_index - PANADAPTER_BINS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BK4819_set_rf_frequency(freq, true); // set the VCO/PLL
|
BK4819_set_rf_frequency(freq, true); // set the VCO/PLL
|
||||||
@ -67,13 +65,18 @@ void PAN_process_10ms(void)
|
|||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
g_fm_radio_mode ||
|
g_fm_radio_mode ||
|
||||||
#endif
|
#endif
|
||||||
|
// g_single_vfo < 0 ||
|
||||||
g_reduced_service ||
|
g_reduced_service ||
|
||||||
g_monitor_enabled ||
|
g_monitor_enabled ||
|
||||||
g_current_function == FUNCTION_TRANSMIT ||
|
g_current_function == FUNCTION_TRANSMIT ||
|
||||||
g_current_function == FUNCTION_POWER_SAVE ||
|
g_current_function == FUNCTION_POWER_SAVE ||
|
||||||
g_current_display_screen == DISPLAY_SEARCH ||
|
g_current_display_screen == DISPLAY_SEARCH ||
|
||||||
g_css_scan_mode != CSS_SCAN_MODE_OFF ||
|
g_css_scan_mode != CSS_SCAN_MODE_OFF ||
|
||||||
g_scan_state_dir != SCAN_STATE_DIR_OFF)
|
g_scan_state_dir != SCAN_STATE_DIR_OFF ||
|
||||||
|
g_dtmf_call_state != DTMF_CALL_STATE_NONE ||
|
||||||
|
g_dtmf_is_tx ||
|
||||||
|
g_dtmf_input_mode ||
|
||||||
|
g_input_box_index > 0)
|
||||||
{
|
{
|
||||||
if (g_panadapter_enabled)
|
if (g_panadapter_enabled)
|
||||||
{ // disable the panadapter
|
{ // disable the panadapter
|
||||||
@ -81,8 +84,8 @@ void PAN_process_10ms(void)
|
|||||||
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
||||||
g_panadapter_peak_freq = 0;
|
g_panadapter_peak_freq = 0;
|
||||||
#endif
|
#endif
|
||||||
g_panadapter_vfo_mode = 1;
|
g_panadapter_vfo_mode = 1;
|
||||||
g_panadapter_enabled = false;
|
g_panadapter_enabled = false;
|
||||||
PAN_set_freq();
|
PAN_set_freq();
|
||||||
|
|
||||||
g_update_display = true;
|
g_update_display = true;
|
||||||
@ -97,12 +100,12 @@ void PAN_process_10ms(void)
|
|||||||
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
||||||
g_panadapter_peak_freq = 0;
|
g_panadapter_peak_freq = 0;
|
||||||
#endif
|
#endif
|
||||||
g_panadapter_vfo_mode = 0;
|
g_panadapter_vfo_mode = 0;
|
||||||
// g_panadapter_max_rssi = 0;
|
// g_panadapter_max_rssi = 0;
|
||||||
// g_panadapter_min_rssi = 0;
|
// g_panadapter_min_rssi = 0;
|
||||||
panadapter_rssi_index = 0;
|
panadapter_rssi_index = 0;
|
||||||
// memset(g_panadapter_rssi, 0, sizeof(g_panadapter_rssi));
|
// memset(g_panadapter_rssi, 0, sizeof(g_panadapter_rssi));
|
||||||
g_panadapter_enabled = true;
|
g_panadapter_enabled = true;
|
||||||
PAN_set_freq();
|
PAN_set_freq();
|
||||||
|
|
||||||
g_update_display = true;
|
g_update_display = true;
|
||||||
@ -116,7 +119,7 @@ void PAN_process_10ms(void)
|
|||||||
const int16_t rssi = g_current_rssi[g_eeprom.config.setting.tx_vfo_num];
|
const int16_t rssi = g_current_rssi[g_eeprom.config.setting.tx_vfo_num];
|
||||||
g_panadapter_rssi[PANADAPTER_BINS] = (rssi > 255) ? 255 : (rssi < 0) ? 0 : rssi;
|
g_panadapter_rssi[PANADAPTER_BINS] = (rssi > 255) ? 255 : (rssi < 0) ? 0 : rssi;
|
||||||
|
|
||||||
g_panadapter_vfo_mode = 50; // pause scanning for at least another 500ms
|
g_panadapter_vfo_mode = 40; // pause scanning for at least another 400ms
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,16 +135,16 @@ void PAN_process_10ms(void)
|
|||||||
panadapter_rssi_index = 0;
|
panadapter_rssi_index = 0;
|
||||||
|
|
||||||
if (g_tx_vfo->channel.mod_mode == MOD_MODE_FM)
|
if (g_tx_vfo->channel.mod_mode == MOD_MODE_FM)
|
||||||
{ // switch back to the VFO frequency for 90ms once every 250ms
|
{ // switch back to the VFO frequency for 100ms once every 500ms
|
||||||
g_panadapter_vfo_mode = ((panadapter_rssi_index % 25) == 0) ? 9 : 0;
|
g_panadapter_vfo_mode = ((panadapter_rssi_index % 50) == 0) ? 10 : 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // switch back to the VFO frequency for 90ms once each scan cycle
|
{ // switch back to the VFO frequency for 100ms once each scan cycle
|
||||||
g_panadapter_vfo_mode = (panadapter_rssi_index == 0) ? 9 : 0;
|
g_panadapter_vfo_mode = (panadapter_rssi_index == 0) ? 10 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // checking the VFO frequency for a signal .. we periodically do this
|
{ // checking the VFO frequency for a signal
|
||||||
g_panadapter_vfo_mode--;
|
g_panadapter_vfo_mode--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,6 +155,7 @@ void PAN_process_10ms(void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
// compute the min/max RSSI values
|
||||||
g_panadapter_max_rssi = g_panadapter_rssi[0];
|
g_panadapter_max_rssi = g_panadapter_rssi[0];
|
||||||
g_panadapter_min_rssi = g_panadapter_rssi[0];
|
g_panadapter_min_rssi = g_panadapter_rssi[0];
|
||||||
for (i = 1; i < (int)ARRAY_SIZE(g_panadapter_rssi); i++)
|
for (i = 1; i < (int)ARRAY_SIZE(g_panadapter_rssi); i++)
|
||||||
@ -165,20 +169,20 @@ void PAN_process_10ms(void)
|
|||||||
|
|
||||||
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
#ifdef ENABLE_PANADAPTER_PEAK_FREQ
|
||||||
{ // find the peak freq
|
{ // find the peak freq
|
||||||
|
|
||||||
const int32_t center_freq = g_tx_vfo->p_rx->frequency;
|
const int32_t center_freq = g_tx_vfo->p_rx->frequency;
|
||||||
int32_t step_size = g_tx_vfo->step_freq;
|
int32_t step_size = g_tx_vfo->step_freq;
|
||||||
|
|
||||||
uint8_t peak_rssi = 0;
|
uint8_t peak_rssi = 0;
|
||||||
uint8_t threshold_rssi;
|
uint8_t threshold_rssi;
|
||||||
|
|
||||||
uint8_t span_rssi = g_panadapter_max_rssi - g_panadapter_min_rssi;
|
uint8_t span_rssi = g_panadapter_max_rssi - g_panadapter_min_rssi;
|
||||||
if (span_rssi < 80)
|
if (span_rssi < 80)
|
||||||
span_rssi = 80;
|
span_rssi = 80;
|
||||||
|
|
||||||
step_size = (step_size < PANADAPTER_MIN_STEP) ? PANADAPTER_MIN_STEP : (step_size > PANADAPTER_MAX_STEP) ? PANADAPTER_MAX_STEP : step_size;
|
|
||||||
|
|
||||||
threshold_rssi = g_panadapter_min_rssi + (span_rssi / 4);
|
threshold_rssi = g_panadapter_min_rssi + (span_rssi / 4);
|
||||||
|
|
||||||
|
// limit the step size
|
||||||
|
step_size = (step_size < PANADAPTER_MIN_STEP) ? PANADAPTER_MIN_STEP : (step_size > PANADAPTER_MAX_STEP) ? PANADAPTER_MAX_STEP : step_size;
|
||||||
|
|
||||||
g_panadapter_peak_freq = 0;
|
g_panadapter_peak_freq = 0;
|
||||||
|
|
||||||
for (i = 0; i < (int)ARRAY_SIZE(g_panadapter_rssi); i++)
|
for (i = 0; i < (int)ARRAY_SIZE(g_panadapter_rssi); i++)
|
||||||
|
13
ui/main.c
13
ui/main.c
@ -428,6 +428,13 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || g_dtmf_is_tx || g_dtmf_input_mode)
|
||||||
|
return; // DTMF call
|
||||||
|
|
||||||
|
// if (g_input_box_index > 0 && IS_FREQ_CHANNEL(scrn_chan))
|
||||||
|
if (g_input_box_index > 0)
|
||||||
|
return; // user is entering a frequency
|
||||||
|
|
||||||
// auto vertical scale
|
// auto vertical scale
|
||||||
max_rssi = g_panadapter_max_rssi;
|
max_rssi = g_panadapter_max_rssi;
|
||||||
min_rssi = g_panadapter_min_rssi;
|
min_rssi = g_panadapter_min_rssi;
|
||||||
@ -476,7 +483,7 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
|
|||||||
rssi = (rssi < ((-129 + 160) * 2)) ? 0 : rssi - ((-129 + 160) * 2); // min of -129dBm (S3)
|
rssi = (rssi < ((-129 + 160) * 2)) ? 0 : rssi - ((-129 + 160) * 2); // min of -129dBm (S3)
|
||||||
rssi = rssi >> 2;
|
rssi = rssi >> 2;
|
||||||
#else
|
#else
|
||||||
rssi = ((uint16_t)(rssi - min_rssi) * 20) / span_rssi; // 0 ~ 20
|
rssi = ((uint16_t)(rssi - min_rssi) * 21) / span_rssi; // 0 ~ 21
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rssi += 2; // offset from the bottom
|
rssi += 2; // offset from the bottom
|
||||||
@ -545,7 +552,9 @@ void UI_DisplayMain(void)
|
|||||||
if (g_eeprom.config.setting.panadapter && g_panadapter_enabled)
|
if (g_eeprom.config.setting.panadapter && g_panadapter_enabled)
|
||||||
//if (!g_squelch_open && !g_monitor_enabled)
|
//if (!g_squelch_open && !g_monitor_enabled)
|
||||||
if (!g_monitor_enabled)
|
if (!g_monitor_enabled)
|
||||||
single_vfo = g_eeprom.config.setting.tx_vfo_num;
|
if (g_dtmf_call_state == DTMF_CALL_STATE_NONE && !g_dtmf_is_tx && !g_dtmf_input_mode)
|
||||||
|
if (g_input_box_index == 0)
|
||||||
|
single_vfo = g_eeprom.config.setting.tx_vfo_num;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (vfo_num = 0; vfo_num < 2; vfo_num++)
|
for (vfo_num = 0; vfo_num < 2; vfo_num++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user