pub struct CodeSwitchController { /* private fields */ }Expand description
Immediate-up / conservative-down controller that turns a stream of fed-back
loss_q8 samples into code-switch decisions under a CodePolicy.
Up-switches (to the stronger high-loss RS code) fire the instant the loss
sustains above the up threshold for up_hold samples; down-switches (back
to RLC) require down_hold sustained-below samples, a longer streak, so a
brief lull does not strip the stronger code while loss is still bursty.
Implementations§
Source§impl CodeSwitchController
impl CodeSwitchController
Sourcepub fn new(policy: CodePolicy, up_hold: u32, down_hold: u32) -> Self
pub fn new(policy: CodePolicy, up_hold: u32, down_hold: u32) -> Self
A controller under policy, starting on the policy’s initial code.
up_hold consecutive over-threshold samples confirm an up-switch;
down_hold (typically larger) under-threshold samples confirm the
relax back to RLC.
Sourcepub fn with_policy(policy: CodePolicy) -> Self
pub fn with_policy(policy: CodePolicy) -> Self
A controller with sensible default holds: an up-switch confirms in 3 feedback intervals (loss spiked and held, robust to window noise), a down-switch in 8 (loss must stay low a while before dropping the stronger code).
Sourcepub fn observe(&mut self, loss_q8: u8) -> Option<SensCode>
pub fn observe(&mut self, loss_q8: u8) -> Option<SensCode>
Feed one fed-back forward-loss sample (loss_q8 = loss * 256). Returns
Some(new_code) exactly on the sample that confirms a switch, else
None. A forced policy never switches.
Sourcepub fn force(&mut self, to: SensCode) -> bool
pub fn force(&mut self, to: SensCode) -> bool
Align the controller to to for a switch driven OUTSIDE observe (the
flow-block escape), counting it and resetting the hysteresis streaks so the
band restarts from the new code. Returns whether it switched: a forced
policy stays put (returns false), as does an already-on-to controller.
Trait Implementations§
Source§impl Clone for CodeSwitchController
impl Clone for CodeSwitchController
Source§fn clone(&self) -> CodeSwitchController
fn clone(&self) -> CodeSwitchController
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more