usdx 1.02x版本是连续调谐,包含非业余波段。使用不是很方便,一是不满足验机标准,二是调整频率也不方便。修改代码如下,实现效果可跳过非业余波段,例如旋转旋钮可从7.2MHz跳转到10.1MHz
// ================= HAM BAND WRAP =================
typedef struct {
uint32_t lo;
uint32_t hi;
} ham_band_t;
// 业余波段表(按频率升序,必须保持顺序)
static const ham_band_t ham_bands[] = {
{ 3500000UL, 3900000UL }, // 80m
{ 5351500UL, 5366500UL }, // 60m
{ 7000000UL, 7200000UL }, // 40m
{10100000UL, 10150000UL }, // 30m
{14000000UL, 14350000UL }, // 20m
{18068000UL, 18168000UL }, // 17m
{21000000UL, 21450000UL }, // 15m
{28000000UL, 29700000UL } // 10m
};
static const uint8_t HAM_BAND_CNT =
sizeof(ham_bands) / sizeof(ham_bands[0]);
// step > 0 : 向上调频(超过 hi → 下一个 band.lo)
// step < 0 : 向下调频(低于 lo → 上一个 band.hi)
static inline uint32_t wrap_to_ham(uint32_t f, int8_t steps) {
const uint8_t N = sizeof(ham_bands) / sizeof(ham_bands[0]);
for (uint8_t i = 0; i < N; i++) {
if (f >= ham_bands.lo && f <= ham_bands.hi)
return f;
if (f < ham_bands[i].lo) {
// 向下调 → 跳到前一个业余波段末尾
if (steps < 0) {
if (i == 0) return ham_bands[N-1].hi; // 最前 → 跳到最后波段
return ham_bands[i-1].hi;
}
// 向上调 → 跳到该波段起始
return ham_bands[i].lo;
}
}
// 超过最后波段
if (steps < 0)
return ham_bands[N-1].hi;
return ham_bands[0].lo;
}
// =============== END HAM BAND WRAP ===============
void process_encoder_tuning_step(int8_t steps)
{
int32_t stepval = stepsizes[stepsize];
//if(stepsize < STEP_100) freq %= 1000; // when tuned and stepsize > 100Hz then forget fine-tuning details
if(rit){
rit += steps * stepval;
rit = max(-9999, min(9999, rit));
} else {
freq += steps * stepval;
freq = wrap_to_ham(freq, steps); //原来代码删除,修改为改行
}
change = true;
}

