|
|
|
|
@ -928,59 +928,59 @@ extern int SI4432_offset_changed;
|
|
|
|
|
|
|
|
|
|
void set_freq(int V, unsigned long freq) // translate the requested frequency into a setting of the SI4432
|
|
|
|
|
{
|
|
|
|
|
if (old_freq[V] != freq) { // Do not change HW if not needed
|
|
|
|
|
if (V <= 1) {
|
|
|
|
|
SI4432_Sel = V;
|
|
|
|
|
if (freq < 240000000 || freq > 960000000) { // Impossible frequency, simply ignore, should never happen.
|
|
|
|
|
real_old_freq[V] = freq + 1; // No idea why this is done........
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (old_freq[V] == freq) // Do not change HW if not needed
|
|
|
|
|
return;
|
|
|
|
|
if (V <= 1) {
|
|
|
|
|
SI4432_Sel = V;
|
|
|
|
|
if (freq < 240000000 || freq > 960000000) { // Impossible frequency, simply ignore, should never happen.
|
|
|
|
|
real_old_freq[V] = freq + 1; // No idea why this is done........
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#if 1
|
|
|
|
|
if (setting.step_delay_mode == SD_FAST) { // If in extra fast scanning mode
|
|
|
|
|
int delta = freq - real_old_freq[V];
|
|
|
|
|
if (setting.step_delay_mode == SD_FAST) { // If in extra fast scanning mode
|
|
|
|
|
int delta = freq - real_old_freq[V];
|
|
|
|
|
|
|
|
|
|
if (real_old_freq[V] >= 480000000) // 480MHz, high band
|
|
|
|
|
delta = delta >> 1;
|
|
|
|
|
if (delta > OFFSET_LOWER_BOUND && delta < 80000) { // and requested frequency can be reached by using the offset registers
|
|
|
|
|
if (real_old_freq[V] >= 480000000) // 480MHz, high band
|
|
|
|
|
delta = delta >> 1;
|
|
|
|
|
if (delta > OFFSET_LOWER_BOUND && delta < 80000) { // and requested frequency can be reached by using the offset registers
|
|
|
|
|
#if 0
|
|
|
|
|
if (real_old_freq[V] >= 480000000)
|
|
|
|
|
shell_printf("%d: Offs %q HW %d\r\n", SI4432_Sel, (uint32_t)(real_old_freq[V]+delta*2), real_old_freq[V]);
|
|
|
|
|
else
|
|
|
|
|
shell_printf("%d: Offs %q HW %d\r\n", SI4432_Sel, (uint32_t)(real_old_freq[V]+delta*1), real_old_freq[V]);
|
|
|
|
|
if (real_old_freq[V] >= 480000000)
|
|
|
|
|
shell_printf("%d: Offs %q HW %d\r\n", SI4432_Sel, (uint32_t)(real_old_freq[V]+delta*2), real_old_freq[V]);
|
|
|
|
|
else
|
|
|
|
|
shell_printf("%d: Offs %q HW %d\r\n", SI4432_Sel, (uint32_t)(real_old_freq[V]+delta*1), real_old_freq[V]);
|
|
|
|
|
#endif
|
|
|
|
|
delta = delta * 4 / 625; // = 156.25; // Calculate and set the offset register i.s.o programming a new frequency
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, (uint8_t)(delta & 0xff));
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, (uint8_t)((delta >> 8) & 0x03));
|
|
|
|
|
SI4432_offset_changed = true; // Signal offset changed so RSSI retrieval is delayed for frequency settling
|
|
|
|
|
old_freq[V] = freq;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
delta = delta * 4 / 625; // = 156.25; // Calculate and set the offset register i.s.o programming a new frequency
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, (uint8_t)(delta & 0xff));
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, (uint8_t)((delta >> 8) & 0x03));
|
|
|
|
|
SI4432_offset_changed = true; // Signal offset changed so RSSI retrieval is delayed for frequency settling
|
|
|
|
|
old_freq[V] = freq;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef __WIDE_OFFSET__
|
|
|
|
|
uint32_t target_f; // Impossible to use offset so set SI4432 to new frequency
|
|
|
|
|
if (freq >= 480000000) {
|
|
|
|
|
target_f = freq + 160000;
|
|
|
|
|
} else {
|
|
|
|
|
target_f = freq + 80000;
|
|
|
|
|
}
|
|
|
|
|
SI4432_Set_Frequency(target_f);
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, 0); // set offset to most negative
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, 0x02);
|
|
|
|
|
real_old_freq[V] = target_f;
|
|
|
|
|
uint32_t target_f; // Impossible to use offset so set SI4432 to new frequency
|
|
|
|
|
if (freq >= 480000000) {
|
|
|
|
|
target_f = freq + 160000;
|
|
|
|
|
} else {
|
|
|
|
|
target_f = freq + 80000;
|
|
|
|
|
}
|
|
|
|
|
SI4432_Set_Frequency(target_f);
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, 0); // set offset to most negative
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, 0x02);
|
|
|
|
|
real_old_freq[V] = target_f;
|
|
|
|
|
#else
|
|
|
|
|
SI4432_Set_Frequency(freq); // Impossible to use offset so set SI4432 to new frequency
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, 0); // set offset to zero
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, 0);
|
|
|
|
|
real_old_freq[V] = freq;
|
|
|
|
|
SI4432_Set_Frequency(freq); // Impossible to use offset so set SI4432 to new frequency
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET1, 0); // set offset to zero
|
|
|
|
|
SI4432_Write_Byte(SI4432_FREQ_OFFSET2, 0);
|
|
|
|
|
real_old_freq[V] = freq;
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef __ULTRA_SA__
|
|
|
|
|
} else {
|
|
|
|
|
ADF4351_set_frequency(V-2,freq,3);
|
|
|
|
|
} else {
|
|
|
|
|
ADF4351_set_frequency(V-2,freq,3);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
old_freq[V] = freq;
|
|
|
|
|
}
|
|
|
|
|
old_freq[V] = freq;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set_switch_transmit(void) {
|
|
|
|
|
|