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:
parent
f20191568a
commit
51c883de0f
2
app/fm.c
2
app/fm.c
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user