0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-06-18 22:29:50 +03:00

panadapter update

This commit is contained in:
OneOfEleven
2023-11-19 11:42:41 +00:00
parent 735e507cdc
commit 6160394f0f
5 changed files with 29 additions and 20 deletions

Binary file not shown.

Binary file not shown.

View File

@ -35,8 +35,10 @@ bool PAN_scanning(void)
void PAN_set_freq(void) void PAN_set_freq(void)
{ // set the frequency { // set the frequency
const uint32_t step_size = g_tx_vfo->step_freq; uint32_t freq = g_tx_vfo->p_rx->frequency;
uint32_t freq = g_tx_vfo->p_rx->frequency;
uint32_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;
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
@ -163,15 +165,22 @@ 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 step_size = g_tx_vfo->step_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;
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);
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++)
{ {
const uint8_t rssi = g_panadapter_rssi[i]; const uint8_t rssi = g_panadapter_rssi[i];

View File

@ -25,6 +25,9 @@
// number of bins either side of the VFO RX frequency // number of bins either side of the VFO RX frequency
#define PANADAPTER_BINS ((LCD_WIDTH / 2) - 1) #define PANADAPTER_BINS ((LCD_WIDTH / 2) - 1)
#define PANADAPTER_MAX_STEP 2500
#define PANADAPTER_MIN_STEP 625
extern bool g_panadapter_enabled; extern bool g_panadapter_enabled;
extern uint32_t g_panadapter_peak_freq; extern uint32_t g_panadapter_peak_freq;
extern int g_panadapter_vfo_mode; extern int g_panadapter_vfo_mode;

View File

@ -424,14 +424,11 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
g_current_function == FUNCTION_TRANSMIT || g_current_function == FUNCTION_TRANSMIT ||
g_current_function == FUNCTION_POWER_SAVE || g_current_function == FUNCTION_POWER_SAVE ||
g_monitor_enabled) g_monitor_enabled)
{ { // don't draw the panadapter
return; return;
} }
// if (g_squelch_open) // auto vertical scale
// return;
// auto 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;
span_rssi = max_rssi - min_rssi; span_rssi = max_rssi - min_rssi;
@ -450,7 +447,7 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
#ifdef ENABLE_PANADAPTER_PEAK_FREQ #ifdef ENABLE_PANADAPTER_PEAK_FREQ
if (g_panadapter_peak_freq > 0) if (g_panadapter_peak_freq > 0)
{ { // print the peak frequency
char str[16]; char str[16];
sprintf(str, "%u.%05u", g_panadapter_peak_freq / 100000, g_panadapter_peak_freq % 100000); sprintf(str, "%u.%05u", g_panadapter_peak_freq / 100000, g_panadapter_peak_freq % 100000);
NUMBER_trim_trailing_zeros(str); NUMBER_trim_trailing_zeros(str);
@ -458,10 +455,10 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
} }
#endif #endif
// center marker (the VFO frequency) // draw top center vertical marker (the VFO frequency)
base_line[PANADAPTER_BINS - (LCD_WIDTH * 2)] = 0x07; base_line[PANADAPTER_BINS - (LCD_WIDTH * 2)] = 0x0F;
// top horizontal line // draw top horizontal dotted line
for (i = 0; i < PANADAPTER_BINS; i += 4) for (i = 0; i < PANADAPTER_BINS; i += 4)
{ {
const unsigned int k = PANADAPTER_BINS - (LCD_WIDTH * 2); const unsigned int k = PANADAPTER_BINS - (LCD_WIDTH * 2);
@ -469,25 +466,25 @@ void big_freq(const uint32_t frequency, const unsigned int x, const unsigned int
base_line[k + i] |= 1u; base_line[k + i] |= 1u;
} }
// draw the vertical bins // draw the panadapter vertical bins
for (i = 0; i < ARRAY_SIZE(g_panadapter_rssi); i++) for (i = 0; i < ARRAY_SIZE(g_panadapter_rssi); i++)
{ {
uint8_t rssi = g_panadapter_rssi[i];
uint32_t pixels; uint32_t pixels;
uint8_t rssi = g_panadapter_rssi[i];
#if 0 #if 0
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 = ((rssi - min_rssi) * 20) / span_rssi; // 0 ~ 20 rssi = ((uint16_t)(rssi - min_rssi) * 20) / span_rssi; // 0 ~ 20
#endif #endif
rssi += 2; rssi += 2; // offset from the bottom
if (rssi > 21) if (rssi > 22)
rssi = 21; rssi = 22; // limit peak value
pixels = (1u << rssi) - 1; pixels = (1u << rssi) - 1; // set the line pixels
pixels &= 0xfffffffe; pixels &= 0xfffffffe; // clear the bottom line
base_line[i - (LCD_WIDTH * 2)] |= bit_reverse_8(pixels >> 16); base_line[i - (LCD_WIDTH * 2)] |= bit_reverse_8(pixels >> 16);
base_line[i - (LCD_WIDTH * 1)] |= bit_reverse_8(pixels >> 8); base_line[i - (LCD_WIDTH * 1)] |= bit_reverse_8(pixels >> 8);