0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-27 22:01:26 +03:00
This commit is contained in:
OneOfEleven 2023-11-10 08:22:03 +00:00
parent f20191568a
commit 51c883de0f
7 changed files with 66 additions and 30 deletions

View File

@ -190,7 +190,7 @@ int FM_check_frequency_lock(const uint16_t frequency, const uint16_t lower_limit
if (afc_railed || snr < 2 || rssi < 10 || abs(freq_offset) > 250) if (afc_railed || snr < 2 || rssi < 10 || abs(freq_offset) > 250)
goto Bail; goto Bail;
if (frequency >= lower_limit && abs(((int)BK1080_freq_base - frequency)) == 1) if (frequency >= lower_limit && abs(((int)BK1080_freq_base - (int)frequency)) == 1)
if (abs(BK1080_freq_offset) < 20) if (abs(BK1080_freq_offset) < 20)
goto Bail; goto Bail;

View File

@ -873,7 +873,8 @@ void MAIN_Key_STAR(bool key_pressed, bool key_held)
#ifdef ENABLE_SCAN_IGNORE_LIST #ifdef ENABLE_SCAN_IGNORE_LIST
if (scanning_paused()) if (scanning_paused())
{ {
FI_add_freq_ignored(g_rx_vfo->freq_config_rx.frequency); if (!FI_add_freq_ignored(g_rx_vfo->freq_config_rx.frequency))
g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; // not added for some reason
// immediately continue the scan // immediately continue the scan
g_scan_tick_10ms = 0; g_scan_tick_10ms = 0;

Binary file not shown.

Binary file not shown.

View File

@ -1,10 +1,14 @@
#include <stdlib.h> // abs()
#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
#include "freq_ignore.h" #include "freq_ignore.h"
#include "misc.h" #include "misc.h"
//#define FI_CLOSE_ENOUGH_HZ 300
// a list of frequencies to ignore/skip when scanning // a list of frequencies to ignore/skip when scanning
uint32_t ignore_frequencies[64]; uint32_t ignore_frequencies[64];
int ignore_frequencies_count = 0; int ignore_frequencies_count = 0;
@ -21,53 +25,70 @@ void FI_clear_freq_ignored(void)
int FI_freq_ignored(const uint32_t frequency) int FI_freq_ignored(const uint32_t frequency)
{ // return index of the ignored frequency { // return index of the ignored frequency
if (frequency == 0 || frequency == 0xffffffff || ignore_frequencies_count <= 0) #ifdef FI_CLOSE_ENOUGH_HZ
return -1; if (frequency <= FI_CLOSE_ENOUGH_HZ || frequency >= (0xffffffff - FI_CLOSE_ENOUGH_HZ) || ignore_frequencies_count <= 0)
return -1; // invalid frequency
#else
if (frequency == 0 || frequency == 0xffffffff || ignore_frequencies_count <= 0)
return -1; // invalid frequency
#endif
if (ignore_frequencies_count >= 8) if (ignore_frequencies_count >= 20)
{ // binary search .. becomes much faster than sequencial search when the list is bigger { // binary search becomes faster than sequencial as the list grows beyound a certain size
int low = 0; int low = 0;
int high = ignore_frequencies_count; int high = ignore_frequencies_count;
while (low < high) while (low < high)
{ {
register int mid = (low + high) / 2; register int mid = (low + high) / 2;
register uint32_t freq = ignore_frequencies[mid]; register uint32_t freq = ignore_frequencies[mid];
if (freq > frequency)
high = mid; #ifdef FI_CLOSE_ENOUGH_HZ
else if (abs((int32_t)frequency - (int32_t)freq) <= FI_CLOSE_ENOUGH_HZ)
if (freq < frequency) #else
low = mid + 1; if (frequency == freq)
else #endif
{ { // found it
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_printf("ignored bin %u %u\r\n", frequency, mid); UART_printf("ignored bin %u %u\r\n", frequency, mid);
#endif #endif
return mid; return mid;
} }
if (freq > frequency)
high = mid;
else
low = mid + 1;
} }
} }
else else
{ // sequencial search { // sequencial search
int i; register int i;
for (i = 0; i < ignore_frequencies_count; i++) for (i = 0; i < ignore_frequencies_count; i++)
{ {
register uint32_t freq = ignore_frequencies[i]; register uint32_t freq = ignore_frequencies[i];
if (frequency == freq)
#ifdef FI_CLOSE_ENOUGH_HZ
if (abs((int32_t)frequency - (int32_t)freq) <= FI_CLOSE_ENOUGH_HZ)
#else
if (frequency == freq)
#endif
{ // found it { // found it
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_printf("ignored seq %u %u\r\n", frequency, i); UART_printf("ignored seq %u %u\r\n", frequency, i);
#endif #endif
return i; return i;
} }
if (frequency < freq) if (frequency < freq)
return -1; // can exit loop early as the list is sorted by frequency return -1; // exit loop early as the list is sorted by frequency
} }
} }
return -1; // not found return -1; // not found
} }
void FI_add_freq_ignored(const uint32_t frequency) bool FI_add_freq_ignored(const uint32_t frequency)
{ // add a new frequency to the ignore list { // add a new frequency to the ignore list
int i; int i;
@ -76,31 +97,45 @@ void FI_add_freq_ignored(const uint32_t frequency)
UART_printf("ignore add %u\r\n", frequency); UART_printf("ignore add %u\r\n", frequency);
#endif #endif
if (frequency == 0 || frequency == 0xffffffff) #ifdef FI_CLOSE_ENOUGH_HZ
return; if (frequency <= FI_CLOSE_ENOUGH_HZ || frequency >= (0xffffffff - FI_CLOSE_ENOUGH_HZ))
return false; // invalid frequency
#else
if (frequency == 0 || frequency == 0xffffffff)
return false; // invalid frequency
#endif
if (ignore_frequencies_count >= (int)ARRAY_SIZE(ignore_frequencies)) if (ignore_frequencies_count >= (int)ARRAY_SIZE(ignore_frequencies))
{ // the list is full { // the list is full
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_SendText("ignore add full\r\n"); UART_SendText("ignore add full\r\n");
#endif #endif
return; return false; // failed
} }
for (i = 0; i < ignore_frequencies_count; i++) for (i = 0; i < ignore_frequencies_count; i++)
{ {
register uint32_t freq = ignore_frequencies[i]; register uint32_t freq = ignore_frequencies[i];
if (frequency == freq) #ifdef FI_CLOSE_ENOUGH_HZ
if (abs((int32_t)frequency - (int32_t)freq) <= FI_CLOSE_ENOUGH_HZ)
#else
if (frequency == freq)
#endif
{ // already in the list { // already in the list
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
UART_SendText("ignore add already\r\n"); UART_SendText("ignore add already\r\n");
#endif #endif
return; return true;
} }
if (frequency < freq) #ifdef FI_CLOSE_ENOUGH_HZ
break; if (frequency < (freq + FI_CLOSE_ENOUGH_HZ))
break; // exit loop early as the list is sorted by frequency
#else
if (frequency < freq)
break; // exit loop early as the list is sorted by frequency
#endif
} }
// found the location to store the new frequency - the list is kept sorted by frequency // found the location to store the new frequency - the list is kept sorted by frequency
@ -117,6 +152,8 @@ void FI_add_freq_ignored(const uint32_t frequency)
for (i = 0; i < ignore_frequencies_count; i++) for (i = 0; i < ignore_frequencies_count; i++)
UART_printf("%2u %10u\r\n", i, ignore_frequencies[i]); UART_printf("%2u %10u\r\n", i, ignore_frequencies[i]);
#endif #endif
return true;
} }
void FI_sub_freq_ignored(const uint32_t frequency) void FI_sub_freq_ignored(const uint32_t frequency)
@ -126,9 +163,6 @@ void FI_sub_freq_ignored(const uint32_t frequency)
UART_printf("ignore sub %u\r\n", frequency); UART_printf("ignore sub %u\r\n", frequency);
#endif #endif
if (frequency == 0 || frequency == 0xffffffff)
return;
int index = FI_freq_ignored(frequency); int index = FI_freq_ignored(frequency);
if (index < 0) if (index < 0)
return; return;

View File

@ -18,11 +18,12 @@
#define FREQ_IGNORE_H #define FREQ_IGNORE_H
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
#ifdef ENABLE_SCAN_IGNORE_LIST #ifdef ENABLE_SCAN_IGNORE_LIST
void FI_clear_freq_ignored(void); void FI_clear_freq_ignored(void);
int FI_freq_ignored(const uint32_t frequency); int FI_freq_ignored(const uint32_t frequency);
void FI_add_freq_ignored(const uint32_t frequency); bool FI_add_freq_ignored(const uint32_t frequency);
void FI_sub_freq_ignored(const uint32_t frequency); void FI_sub_freq_ignored(const uint32_t frequency);
#endif #endif

View File

@ -562,8 +562,8 @@ unsigned int SETTINGS_find_channel(const uint32_t frequency)
continue; continue;
if (freq == frequency) if (freq == frequency)
return chan; // found it return chan; // found it
// if (abs((int32_t)freq - frequency) < 5) // if (abs((int32_t)freq - (int32_t)frequency) < 300)
// return chan; // found a very close match // return chan; // found a close match
} }
return 0xffffffff; return 0xffffffff;