0
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:
OneOfEleven
2023-10-18 16:17:41 +01:00
parent 2e880a61e1
commit ce4528b4ee
12 changed files with 160 additions and 171 deletions

View File

@ -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'