Merge pull request #1090 from veloman-yunkan/sweep_mode_bugfix

Bugfix in sweep mode when multiple blocks have to be read for each frequency
This commit is contained in:
Michael Ossmann
2022-05-30 12:15:54 -04:00
committed by GitHub

View File

@ -121,6 +121,7 @@ void sweep_mode(uint32_t seq) {
// //
// 7. Process repeats from step 1. // 7. Process repeats from step 1.
unsigned int blocks_queued = 0;
unsigned int phase = 0; unsigned int phase = 0;
bool odd = true; bool odd = true;
uint16_t range = 0; uint16_t range = 0;
@ -170,31 +171,34 @@ void sweep_mode(uint32_t seq) {
// Use other buffer next time. // Use other buffer next time.
phase = (phase + 1) % 2; phase = (phase + 1) % 2;
// Calculate next sweep frequency. if ( ++blocks_queued == dwell_blocks ) {
if(INTERLEAVED == style) { // Calculate next sweep frequency.
if(!odd && ((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY))) { if(INTERLEAVED == style) {
range = (range + 1) % num_ranges; if(!odd && ((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY))) {
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY; range = (range + 1) % num_ranges;
} else { sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
if(odd) {
sweep_freq += step_width/4;
} else { } else {
sweep_freq += 3*step_width/4; if(odd) {
sweep_freq += step_width/4;
} else {
sweep_freq += 3*step_width/4;
}
}
odd = !odd;
} else {
if((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY)) {
range = (range + 1) % num_ranges;
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
} else {
sweep_freq += step_width;
} }
} }
odd = !odd; // Retune to new frequency.
} else { nvic_disable_irq(NVIC_USB0_IRQ);
if((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY)) { set_freq(sweep_freq + offset);
range = (range + 1) % num_ranges; nvic_enable_irq(NVIC_USB0_IRQ);
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY; blocks_queued = 0;
} else {
sweep_freq += step_width;
}
} }
// Retune to new frequency.
nvic_disable_irq(NVIC_USB0_IRQ);
set_freq(sweep_freq + offset);
nvic_enable_irq(NVIC_USB0_IRQ);
// Wait for M0 to resume RX. // Wait for M0 to resume RX.
while (m0_state.active_mode != M0_MODE_RX) while (m0_state.active_mode != M0_MODE_RX)