mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-06-19 22:58:04 +03:00
lots more step sizes added, though the QS config software will only use the original 7 step sizes.
This commit is contained in:
@ -14,15 +14,16 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "driver/uart.h"
|
||||
#include "frequencies.h"
|
||||
#include "misc.h"
|
||||
#include "settings.h"
|
||||
|
||||
// the default AIRCOPY frequency to use
|
||||
// the default AIRCOPY frequency
|
||||
uint32_t g_aircopy_freq = 41002500;
|
||||
|
||||
// FM broadcast band lower/upper limit
|
||||
const freq_band_table_t FM_RADIO_BAND = {760, 1080};
|
||||
const freq_band_table_t FM_RADIO_BAND = {880, 1080};
|
||||
|
||||
// the BK4819 has 2 bands it covers, 18MHz ~ 630MHz and 760MHz ~ 1300MHz
|
||||
const freq_band_table_t BX4819_BAND1 = { 1800000, 63000000};
|
||||
@ -45,7 +46,7 @@ const freq_band_table_t FREQ_BAND_TABLE[7] =
|
||||
{10800000, 13600000}, // band 2
|
||||
{13600000, 17400000}, // band 3
|
||||
{17400000, 35000000}, // band 4
|
||||
{35000000, 40000000}, // band 5
|
||||
{35000000, 40000000}, // band 5
|
||||
{40000000, 47000000}, // band 6
|
||||
{47000000, 60000000} // band 7
|
||||
#endif
|
||||
@ -67,22 +68,63 @@ const freq_band_table_t FREQ_BAND_TABLE[7] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_1250HZ_STEP
|
||||
// includes 1.25kHz step
|
||||
const uint16_t STEP_FREQ_TABLE[7] = {125, 250, 625, 1000, 1250, 2500, 833};
|
||||
// const uint16_t STEP_FREQ_TABLE[7] = {125, 250, 625, 1000, 1250, 2500, 833, 10, 50};
|
||||
#else
|
||||
// QS steps (*10 Hz)
|
||||
const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833};
|
||||
// const uint16_t STEP_FREQ_TABLE[7] = {250, 500, 625, 1000, 1250, 2500, 833, 10, 50};
|
||||
#endif
|
||||
// the first 7 values MUST remain in those same positions (to remain compatible with the QS config windows software)
|
||||
const uint16_t STEP_FREQ_TABLE[21] = {
|
||||
250, 500, 625, 1000, 1250, 2500, 833,
|
||||
1, 5, 10, 25, 50, 100, 125, 1500, 3000, 5000, 10000, 12500, 25000, 50000
|
||||
};
|
||||
uint16_t step_freq_table_sorted[ARRAY_SIZE(STEP_FREQ_TABLE)];
|
||||
|
||||
unsigned int FREQUENCY_get_step_index(const unsigned int step_size)
|
||||
{ // return the index into 'STEP_FREQ_TABLE' for the supplied step size
|
||||
unsigned int i;
|
||||
for (i = 0; i < ARRAY_SIZE(step_freq_table_sorted); i++)
|
||||
if (STEP_FREQ_TABLE[step_freq_table_sorted[i]] == step_size)
|
||||
return i;
|
||||
// not found, so default to 12.5kHz
|
||||
return 11;
|
||||
}
|
||||
|
||||
void FREQUENCY_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(step_freq_table_sorted); i++)
|
||||
step_freq_table_sorted[i] = i;
|
||||
|
||||
// sort according to step size
|
||||
for (i = 0; i < ARRAY_SIZE(step_freq_table_sorted) - 1; i++)
|
||||
{
|
||||
uint16_t step1 = STEP_FREQ_TABLE[step_freq_table_sorted[i]];
|
||||
unsigned int k;
|
||||
for (k = i + 1; k < ARRAY_SIZE(step_freq_table_sorted); k++)
|
||||
{
|
||||
const uint16_t step2 = STEP_FREQ_TABLE[step_freq_table_sorted[k]];
|
||||
if (step2 < step1)
|
||||
{ // swap
|
||||
const uint16_t temp = step_freq_table_sorted[i];
|
||||
step_freq_table_sorted[i] = step_freq_table_sorted[k];
|
||||
step_freq_table_sorted[k] = temp;
|
||||
step1 = STEP_FREQ_TABLE[step_freq_table_sorted[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
#if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG)
|
||||
UART_SendText("step ..\r\n");
|
||||
for (i = 0; i < ARRAY_SIZE(step_freq_table_sorted); i++)
|
||||
UART_printf("%2u %2u %5u\r\n", i, step_freq_table_sorted[i], STEP_FREQ_TABLE[step_freq_table_sorted[i]]);
|
||||
UART_SendText("\r\n");
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
|
||||
frequency_band_t FREQUENCY_GetBand(uint32_t Frequency)
|
||||
{
|
||||
int band;
|
||||
for (band = ARRAY_SIZE(FREQ_BAND_TABLE) - 1; band >= 0; band--)
|
||||
if (Frequency >= FREQ_BAND_TABLE[band].lower)
|
||||
// if (Frequency < FREQ_BAND_TABLE[band].upper)
|
||||
if (Frequency >= FREQ_BAND_TABLE[band].lower && Frequency < FREQ_BAND_TABLE[band].upper)
|
||||
// if (Frequency >= FREQ_BAND_TABLE[band].lower)
|
||||
return (frequency_band_t)band;
|
||||
|
||||
return BAND1_50MHz;
|
||||
@ -92,7 +134,7 @@ frequency_band_t FREQUENCY_GetBand(uint32_t Frequency)
|
||||
uint8_t FREQUENCY_CalculateOutputPower(uint8_t TxpLow, uint8_t TxpMid, uint8_t TxpHigh, int32_t LowerLimit, int32_t Middle, int32_t UpperLimit, int32_t Frequency)
|
||||
{
|
||||
uint8_t pwr = TxpMid;
|
||||
|
||||
|
||||
if (Frequency <= LowerLimit)
|
||||
return TxpLow;
|
||||
|
||||
@ -111,28 +153,28 @@ uint32_t FREQUENCY_FloorToStep(uint32_t Upper, uint32_t Step, uint32_t Lower)
|
||||
{
|
||||
#if 1
|
||||
uint32_t Index;
|
||||
|
||||
|
||||
if (Step == 833)
|
||||
{
|
||||
const uint32_t Delta = Upper - Lower;
|
||||
uint32_t Base = (Delta / 2500) * 2500;
|
||||
const uint32_t Index = ((Delta - Base) % 2500) / 833;
|
||||
|
||||
|
||||
if (Index == 2)
|
||||
Base++;
|
||||
|
||||
|
||||
return Lower + Base + (Index * 833);
|
||||
}
|
||||
|
||||
|
||||
Index = (Upper - Lower) / Step;
|
||||
|
||||
|
||||
return Lower + (Step * Index);
|
||||
#else
|
||||
return Lower + (((Upper - Lower) / Step) * Step);
|
||||
#endif
|
||||
}
|
||||
|
||||
int TX_freq_check(const uint32_t Frequency)
|
||||
int FREQUENCY_tx_freq_check(const uint32_t Frequency)
|
||||
{ // return '0' if TX frequency is allowed
|
||||
// otherwise return '-1'
|
||||
|
||||
@ -200,7 +242,7 @@ int TX_freq_check(const uint32_t Frequency)
|
||||
if (Frequency >= 40000000 && Frequency < 43800000)
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
||||
case FREQ_LOCK_446:
|
||||
if (Frequency >= 446.00625 && Frequency <= 446.19375)
|
||||
return 0;
|
||||
@ -222,7 +264,7 @@ int TX_freq_check(const uint32_t Frequency)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int RX_freq_check(const uint32_t Frequency)
|
||||
int FREQUENCY_rx_freq_check(const uint32_t Frequency)
|
||||
{ // return '0' if RX frequency is allowed
|
||||
// otherwise return '-1'
|
||||
|
||||
|
Reference in New Issue
Block a user