mirror of
https://github.com/DualTachyon/uv-k5-firmware.git
synced 2024-11-27 08:59:52 +08:00
2e4cc7409a
If NOAA is not enabled then IS_NOAA_CHANNEL will never be used. The NOAA channels are no longer in the list of channels. If NOAA is enabled, the size of the array is taken into account, instead of magic number 10.
208 lines
4.1 KiB
C
208 lines
4.1 KiB
C
/* Copyright 2023 Dual Tachyon
|
|
* https://github.com/DualTachyon
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "frequencies.h"
|
|
#include "misc.h"
|
|
#include "settings.h"
|
|
|
|
const uint32_t LowerLimitFrequencyBandTable[7] = {
|
|
5000000,
|
|
10800000,
|
|
13600000,
|
|
17400000,
|
|
35000000,
|
|
40000000,
|
|
47000000,
|
|
};
|
|
|
|
const uint32_t MiddleFrequencyBandTable[7] = {
|
|
6500000,
|
|
12200000,
|
|
15000000,
|
|
26000000,
|
|
37000000,
|
|
43500000,
|
|
55000000,
|
|
};
|
|
|
|
const uint32_t UpperLimitFrequencyBandTable[7] = {
|
|
7600000,
|
|
13599990,
|
|
17399990,
|
|
34999990,
|
|
39999990,
|
|
46999990,
|
|
60000000,
|
|
};
|
|
|
|
#if defined(ENABLE_NOAA)
|
|
const uint32_t NoaaFrequencyTable[10] = {
|
|
16255000,
|
|
16240000,
|
|
16247500,
|
|
16242500,
|
|
16245000,
|
|
16250000,
|
|
16252500,
|
|
16152500,
|
|
16177500,
|
|
16327500,
|
|
};
|
|
#endif
|
|
|
|
const uint16_t StepFrequencyTable[7] = {
|
|
250,
|
|
500,
|
|
625,
|
|
1000,
|
|
1250,
|
|
2500,
|
|
833,
|
|
};
|
|
|
|
FREQUENCY_Band_t FREQUENCY_GetBand(uint32_t Frequency)
|
|
{
|
|
if (Frequency >= 5000000 && Frequency <= 7600000) {
|
|
return BAND1_50MHz;
|
|
}
|
|
if (Frequency >= 10800000 && Frequency <= 13599990) {
|
|
return BAND2_108MHz;
|
|
}
|
|
if (Frequency >= 13600000 && Frequency <= 17399990) {
|
|
return BAND3_136MHz;
|
|
}
|
|
if (Frequency >= 17400000 && Frequency <= 34999990) {
|
|
return BAND4_174MHz;
|
|
}
|
|
if (Frequency >= 35000000 && Frequency <= 39999990) {
|
|
return BAND5_350MHz;
|
|
}
|
|
if (Frequency >= 40000000 && Frequency <= 46999990) {
|
|
return BAND6_400MHz;
|
|
}
|
|
if (Frequency >= 47000000 && Frequency <= 60000000) {
|
|
return BAND7_470MHz;
|
|
}
|
|
|
|
return BAND6_400MHz;
|
|
}
|
|
|
|
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)
|
|
{
|
|
if (Frequency <= LowerLimit) {
|
|
return TxpLow;
|
|
}
|
|
if (UpperLimit <= Frequency) {
|
|
return TxpHigh;
|
|
}
|
|
if (Frequency <= Middle) {
|
|
TxpMid += ((TxpMid - TxpLow) * (Frequency - LowerLimit)) / (Middle - LowerLimit);
|
|
return TxpMid;
|
|
}
|
|
|
|
TxpMid += ((TxpHigh - TxpMid) * (Frequency - Middle)) / (UpperLimit - Middle);
|
|
return TxpMid;
|
|
}
|
|
|
|
uint32_t FREQUENCY_FloorToStep(uint32_t Upper, uint32_t Step, uint32_t Lower)
|
|
{
|
|
uint32_t Index;
|
|
|
|
Index = (Upper - Lower) / Step;
|
|
return Lower + (Step * Index);
|
|
}
|
|
|
|
int FREQUENCY_Check(VFO_Info_t *pInfo)
|
|
{
|
|
uint32_t Frequency;
|
|
|
|
if (pInfo->CHANNEL_SAVE > FREQ_CHANNEL_LAST) {
|
|
return -1;
|
|
}
|
|
Frequency = pInfo->pTX->Frequency;
|
|
switch (gSetting_F_LOCK) {
|
|
case F_LOCK_FCC:
|
|
if (Frequency >= 14400000 && Frequency <= 14799990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 42000000 && Frequency <= 44999990) {
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
case F_LOCK_CE:
|
|
if (Frequency >= 14400000 && Frequency <= 14599990) {
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
case F_LOCK_GB:
|
|
if (Frequency >= 14400000 && Frequency <= 14799990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 43000000 && Frequency <= 43999990) {
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
case F_LOCK_430:
|
|
if (Frequency >= 13600000 && Frequency <= 17399990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 40000000 && Frequency <= 42999990) {
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
case F_LOCK_438:
|
|
if (Frequency >= 13600000 && Frequency <= 17399990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 40000000 && Frequency <= 43799990) {
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (Frequency >= 13600000 && Frequency <= 17399990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 35000000 && Frequency <= 39999990) {
|
|
if (gSetting_350TX && gSetting_350EN) {
|
|
return 0;
|
|
}
|
|
}
|
|
if (Frequency >= 40000000 && Frequency <= 46999990) {
|
|
return 0;
|
|
}
|
|
if (Frequency >= 17400000 && Frequency <= 34999990) {
|
|
if (gSetting_200TX) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (Frequency >= 47000000 && Frequency <= 60000000) {
|
|
if (gSetting_500TX) {
|
|
return 0;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|