fix: boundary check of center/span

bandwidth
TT 6 years ago
parent e1ba0c77f0
commit c4edbee973

@ -846,44 +846,49 @@ set_sweep_frequency(int type, uint32_t freq)
} }
break; break;
case ST_CENTER: case ST_CENTER:
ensure_edit_config(); if (freq < START_MIN)
freq = START_MIN;
if (freq > STOP_MAX)
freq = STOP_MAX;
freq_mode_centerspan(); freq_mode_centerspan();
uint32_t center = frequency0/2 + frequency1/2; uint32_t center = frequency0/2 + frequency1/2;
if (center != freq) { if (center != freq) {
uint32_t span = frequency0 - frequency1; uint32_t span = frequency0 - frequency1;
ensure_edit_config(); ensure_edit_config();
frequency0 = freq + span/2; if (freq < START_MIN + span/2) {
frequency1 = freq - span/2; span = (freq - START_MIN) * 2;
if (frequency1 < START_MIN) {
frequency0 -= START_MIN - frequency1;
frequency1 = START_MIN;
} }
if (frequency0 > STOP_MAX) { if (freq > STOP_MAX - span/2) {
frequency1 += frequency0 - STOP_MAX; span = (STOP_MAX - freq) * 2;
frequency0 = STOP_MAX;
} }
frequency0 = freq + span/2;
frequency1 = freq - span/2;
update_frequencies(); update_frequencies();
} }
break; break;
case ST_SPAN: case ST_SPAN:
if (freq > STOP_MAX)
freq = STOP_MAX;
freq_mode_centerspan(); freq_mode_centerspan();
if (frequency0 - frequency1 != freq) { if (frequency0 - frequency1 != freq) {
ensure_edit_config(); ensure_edit_config();
uint32_t center = frequency0/2 + frequency1/2; uint32_t center = frequency0/2 + frequency1/2;
frequency1 = center - freq/2; if (center < START_MIN + freq/2) {
frequency0 = center + freq/2; center = START_MIN + freq/2;
if (frequency1 < START_MIN) {
frequency0 -= START_MIN - frequency1;
frequency1 = START_MIN;
} }
if (frequency0 > STOP_MAX) { if (center > STOP_MAX - freq/2) {
frequency1 += frequency0 - STOP_MAX; center = STOP_MAX - freq/2;
frequency0 = STOP_MAX;
} }
frequency1 = center - freq/2;
frequency0 = center + freq/2;
update_frequencies(); update_frequencies();
} }
break; break;
case ST_CW: case ST_CW:
if (freq < START_MIN)
freq = START_MIN;
if (freq > STOP_MAX)
freq = STOP_MAX;
freq_mode_centerspan(); freq_mode_centerspan();
if (frequency0 != freq || frequency1 != freq) { if (frequency0 != freq || frequency1 != freq) {
ensure_edit_config(); ensure_edit_config();

Loading…
Cancel
Save

Powered by TurnKey Linux.