mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 14:21:25 +03:00
panadapter add vco/pll/rssi settle delay
This commit is contained in:
parent
f64afe2910
commit
2e4cd3d135
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
31
panadapter.c
31
panadapter.c
@ -24,10 +24,11 @@ bool g_panadapter_enabled;
|
|||||||
uint32_t g_panadapter_peak_freq;
|
uint32_t g_panadapter_peak_freq;
|
||||||
#endif
|
#endif
|
||||||
int g_panadapter_vfo_mode; // > 0 if we're currently sampling the VFO
|
int g_panadapter_vfo_mode; // > 0 if we're currently sampling the VFO
|
||||||
uint8_t g_panadapter_rssi[PANADAPTER_BINS + 1 + PANADAPTER_BINS];
|
|
||||||
uint8_t g_panadapter_max_rssi;
|
uint8_t g_panadapter_max_rssi;
|
||||||
uint8_t g_panadapter_min_rssi;
|
uint8_t g_panadapter_min_rssi;
|
||||||
|
uint8_t g_panadapter_rssi[PANADAPTER_BINS + 1 + PANADAPTER_BINS];
|
||||||
int panadapter_rssi_index;
|
int panadapter_rssi_index;
|
||||||
|
int panadapter_delay;
|
||||||
|
|
||||||
const uint8_t panadapter_min_rssi = (-147 + 160) * 2; // min of -147dBm (S0)
|
const uint8_t panadapter_min_rssi = (-147 + 160) * 2; // min of -147dBm (S0)
|
||||||
|
|
||||||
@ -40,7 +41,7 @@ void PAN_update_min_max(void)
|
|||||||
{ // compute the min/max RSSI values
|
{ // compute the min/max RSSI values
|
||||||
|
|
||||||
register unsigned int i;
|
register unsigned int i;
|
||||||
register uint8_t *p = g_panadapter_rssi;
|
register const uint8_t *p = g_panadapter_rssi;
|
||||||
register uint8_t max_rssi = *p;
|
register uint8_t max_rssi = *p;
|
||||||
register uint8_t min_rssi = *p++;
|
register uint8_t min_rssi = *p++;
|
||||||
|
|
||||||
@ -64,9 +65,11 @@ void PAN_update_min_max(void)
|
|||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
uint8_t peak_rssi = 0;
|
|
||||||
uint8_t threshold_rssi;
|
uint8_t threshold_rssi;
|
||||||
|
uint8_t peak_rssi = 0;
|
||||||
|
uint32_t peak_freq = 0;
|
||||||
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;
|
||||||
threshold_rssi = g_panadapter_min_rssi + (span_rssi / 4);
|
threshold_rssi = g_panadapter_min_rssi + (span_rssi / 4);
|
||||||
@ -74,17 +77,17 @@ void PAN_update_min_max(void)
|
|||||||
// limit the step size
|
// limit the step size
|
||||||
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;
|
||||||
|
|
||||||
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++)
|
||||||
{
|
{
|
||||||
const uint8_t rssi = g_panadapter_rssi[i];
|
const uint8_t rssi = g_panadapter_rssi[i];
|
||||||
if (peak_rssi < rssi && rssi >= threshold_rssi && (i < (PANADAPTER_BINS - 1) || i > (PANADAPTER_BINS + 1)))
|
if (peak_rssi < rssi && rssi >= threshold_rssi && (i < (PANADAPTER_BINS - 1) || i > (PANADAPTER_BINS + 1)))
|
||||||
{
|
{
|
||||||
peak_rssi = rssi;
|
peak_rssi = rssi;
|
||||||
g_panadapter_peak_freq = center_freq + (step_size * (i - PANADAPTER_BINS));
|
peak_freq = center_freq + (step_size * (i - PANADAPTER_BINS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_panadapter_peak_freq = peak_freq;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -164,6 +167,7 @@ void PAN_process_10ms(void)
|
|||||||
// g_panadapter_min_rssi = 0;
|
// g_panadapter_min_rssi = 0;
|
||||||
// memset(g_panadapter_rssi, 0, sizeof(g_panadapter_rssi));
|
// memset(g_panadapter_rssi, 0, sizeof(g_panadapter_rssi));
|
||||||
panadapter_rssi_index = 0;
|
panadapter_rssi_index = 0;
|
||||||
|
panadapter_delay = 3; // give the VCO/PLL/RSSI more time to settle
|
||||||
g_panadapter_enabled = true;
|
g_panadapter_enabled = true;
|
||||||
PAN_set_freq();
|
PAN_set_freq();
|
||||||
|
|
||||||
@ -189,18 +193,33 @@ void PAN_process_10ms(void)
|
|||||||
|
|
||||||
g_panadapter_vfo_mode = g_squelch_open ? 40 : g_panadapter_vfo_mode - 1;
|
g_panadapter_vfo_mode = g_squelch_open ? 40 : g_panadapter_vfo_mode - 1;
|
||||||
|
|
||||||
|
if (g_panadapter_vfo_mode <= 0)
|
||||||
|
{
|
||||||
|
PAN_set_freq();
|
||||||
|
panadapter_delay = 3; // give the VCO/PLL/RSSI more time to settle
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// scanning/sweeping
|
// scanning/sweeping
|
||||||
|
|
||||||
|
if (panadapter_delay > 0)
|
||||||
|
{
|
||||||
|
panadapter_delay--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// save the current RSSI value
|
// save the current RSSI value
|
||||||
const uint16_t rssi = BK4819_GetRSSI();
|
const uint16_t rssi = BK4819_GetRSSI();
|
||||||
g_panadapter_rssi[panadapter_rssi_index] = (rssi > 255) ? 255 : (rssi < panadapter_min_rssi) ? panadapter_min_rssi : rssi;
|
g_panadapter_rssi[panadapter_rssi_index] = (rssi > 255) ? 255 : (rssi < panadapter_min_rssi) ? panadapter_min_rssi : rssi;
|
||||||
|
|
||||||
// next frequency
|
// next frequency
|
||||||
if (++panadapter_rssi_index >= (int)ARRAY_SIZE(g_panadapter_rssi))
|
if (++panadapter_rssi_index >= (int)ARRAY_SIZE(g_panadapter_rssi))
|
||||||
|
{
|
||||||
panadapter_rssi_index = 0;
|
panadapter_rssi_index = 0;
|
||||||
|
panadapter_delay = 3; // give the VCO/PLL/RSSI more time to settle
|
||||||
|
}
|
||||||
|
|
||||||
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/center frequency for 100ms once every 400ms
|
{ // switch back to the VFO/center frequency for 100ms once every 400ms
|
||||||
|
Loading…
x
Reference in New Issue
Block a user