[fix](trx-server): scope decoder resets by mode
Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -946,14 +946,30 @@ fn invalidate_main_decoder_windows_on_freq_change(state: &mut RigState, prev_fre
|
|||||||
if state.status.freq.hz == prev_freq_hz {
|
if state.status.freq.hz == prev_freq_hz {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
match state.status.mode {
|
||||||
|
RigMode::PKT => {
|
||||||
state.aprs_decode_reset_seq += 1;
|
state.aprs_decode_reset_seq += 1;
|
||||||
|
}
|
||||||
|
RigMode::DIG => {
|
||||||
state.hf_aprs_decode_reset_seq += 1;
|
state.hf_aprs_decode_reset_seq += 1;
|
||||||
state.cw_decode_reset_seq += 1;
|
|
||||||
state.ft8_decode_reset_seq += 1;
|
state.ft8_decode_reset_seq += 1;
|
||||||
state.ft4_decode_reset_seq += 1;
|
state.ft4_decode_reset_seq += 1;
|
||||||
state.ft2_decode_reset_seq += 1;
|
state.ft2_decode_reset_seq += 1;
|
||||||
state.wspr_decode_reset_seq += 1;
|
state.wspr_decode_reset_seq += 1;
|
||||||
}
|
}
|
||||||
|
RigMode::USB => {
|
||||||
|
state.ft8_decode_reset_seq += 1;
|
||||||
|
state.ft4_decode_reset_seq += 1;
|
||||||
|
state.ft2_decode_reset_seq += 1;
|
||||||
|
state.wspr_decode_reset_seq += 1;
|
||||||
|
}
|
||||||
|
RigMode::CW | RigMode::CWR => {
|
||||||
|
state.cw_decode_reset_seq += 1;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn sync_machine_state(machine: &mut RigStateMachine, state: &RigState) {
|
fn sync_machine_state(machine: &mut RigStateMachine, state: &RigState) {
|
||||||
let desired = desired_machine_state(state);
|
let desired = desired_machine_state(state);
|
||||||
@@ -1093,8 +1109,9 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn freq_change_invalidates_all_main_decoder_windows() {
|
fn pkt_freq_change_only_invalidates_aprs() {
|
||||||
let mut state = RigState::new_uninitialized();
|
let mut state = RigState::new_uninitialized();
|
||||||
|
state.apply_mode(RigMode::PKT);
|
||||||
let prev_freq_hz = state.status.freq.hz;
|
let prev_freq_hz = state.status.freq.hz;
|
||||||
state.apply_freq(Freq {
|
state.apply_freq(Freq {
|
||||||
hz: prev_freq_hz + 2_700,
|
hz: prev_freq_hz + 2_700,
|
||||||
@@ -1103,14 +1120,61 @@ mod tests {
|
|||||||
invalidate_main_decoder_windows_on_freq_change(&mut state, prev_freq_hz);
|
invalidate_main_decoder_windows_on_freq_change(&mut state, prev_freq_hz);
|
||||||
|
|
||||||
assert_eq!(state.aprs_decode_reset_seq, 1);
|
assert_eq!(state.aprs_decode_reset_seq, 1);
|
||||||
|
assert_eq!(state.hf_aprs_decode_reset_seq, 0);
|
||||||
|
assert_eq!(state.cw_decode_reset_seq, 0);
|
||||||
|
assert_eq!(state.ft8_decode_reset_seq, 0);
|
||||||
|
assert_eq!(state.ft4_decode_reset_seq, 0);
|
||||||
|
assert_eq!(state.ft2_decode_reset_seq, 0);
|
||||||
|
assert_eq!(state.wspr_decode_reset_seq, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn dig_freq_change_invalidates_digital_decoders() {
|
||||||
|
let mut state = RigState::new_uninitialized();
|
||||||
|
state.apply_mode(RigMode::DIG);
|
||||||
|
let prev_freq_hz = state.status.freq.hz;
|
||||||
|
state.apply_freq(Freq {
|
||||||
|
hz: prev_freq_hz + 2_700,
|
||||||
|
});
|
||||||
|
|
||||||
|
invalidate_main_decoder_windows_on_freq_change(&mut state, prev_freq_hz);
|
||||||
|
|
||||||
|
assert_eq!(state.aprs_decode_reset_seq, 0);
|
||||||
assert_eq!(state.hf_aprs_decode_reset_seq, 1);
|
assert_eq!(state.hf_aprs_decode_reset_seq, 1);
|
||||||
assert_eq!(state.cw_decode_reset_seq, 1);
|
assert_eq!(state.cw_decode_reset_seq, 0);
|
||||||
assert_eq!(state.ft8_decode_reset_seq, 1);
|
assert_eq!(state.ft8_decode_reset_seq, 1);
|
||||||
assert_eq!(state.ft4_decode_reset_seq, 1);
|
assert_eq!(state.ft4_decode_reset_seq, 1);
|
||||||
assert_eq!(state.ft2_decode_reset_seq, 1);
|
assert_eq!(state.ft2_decode_reset_seq, 1);
|
||||||
assert_eq!(state.wspr_decode_reset_seq, 1);
|
assert_eq!(state.wspr_decode_reset_seq, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn wfm_freq_change_does_not_touch_main_decoders() {
|
||||||
|
let mut state = RigState::new_uninitialized();
|
||||||
|
state.apply_mode(RigMode::WFM);
|
||||||
|
state.aprs_decode_reset_seq = 2;
|
||||||
|
state.hf_aprs_decode_reset_seq = 3;
|
||||||
|
state.cw_decode_reset_seq = 4;
|
||||||
|
state.ft8_decode_reset_seq = 5;
|
||||||
|
state.ft4_decode_reset_seq = 6;
|
||||||
|
state.ft2_decode_reset_seq = 7;
|
||||||
|
state.wspr_decode_reset_seq = 8;
|
||||||
|
let prev_freq_hz = state.status.freq.hz;
|
||||||
|
state.apply_freq(Freq {
|
||||||
|
hz: prev_freq_hz + 200_000,
|
||||||
|
});
|
||||||
|
|
||||||
|
invalidate_main_decoder_windows_on_freq_change(&mut state, prev_freq_hz);
|
||||||
|
|
||||||
|
assert_eq!(state.aprs_decode_reset_seq, 2);
|
||||||
|
assert_eq!(state.hf_aprs_decode_reset_seq, 3);
|
||||||
|
assert_eq!(state.cw_decode_reset_seq, 4);
|
||||||
|
assert_eq!(state.ft8_decode_reset_seq, 5);
|
||||||
|
assert_eq!(state.ft4_decode_reset_seq, 6);
|
||||||
|
assert_eq!(state.ft2_decode_reset_seq, 7);
|
||||||
|
assert_eq!(state.wspr_decode_reset_seq, 8);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn unchanged_freq_keeps_decoder_windows_intact() {
|
fn unchanged_freq_keeps_decoder_windows_intact() {
|
||||||
let mut state = RigState::new_uninitialized();
|
let mut state = RigState::new_uninitialized();
|
||||||
|
|||||||
Reference in New Issue
Block a user