fix: boundary check of center/span

This commit is contained in:
TT 2020-01-18 14:25:37 +09:00
parent e1ba0c77f0
commit c4edbee973

39
main.c
View file

@ -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();
if (freq < START_MIN + span/2) {
span = (freq - START_MIN) * 2;
}
if (freq > STOP_MAX - span/2) {
span = (STOP_MAX - freq) * 2;
}
frequency0 = freq + span/2; frequency0 = freq + span/2;
frequency1 = freq - span/2; frequency1 = freq - span/2;
if (frequency1 < START_MIN) {
frequency0 -= START_MIN - frequency1;
frequency1 = START_MIN;
}
if (frequency0 > STOP_MAX) {
frequency1 += frequency0 - STOP_MAX;
frequency0 = STOP_MAX;
}
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;
if (center < START_MIN + freq/2) {
center = START_MIN + freq/2;
}
if (center > STOP_MAX - freq/2) {
center = STOP_MAX - freq/2;
}
frequency1 = center - freq/2; frequency1 = center - freq/2;
frequency0 = center + freq/2; frequency0 = center + freq/2;
if (frequency1 < START_MIN) {
frequency0 -= START_MIN - frequency1;
frequency1 = START_MIN;
}
if (frequency0 > STOP_MAX) {
frequency1 += frequency0 - STOP_MAX;
frequency0 = STOP_MAX;
}
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();