diff options
Diffstat (limited to 'sw/eval-clock-cw-tx/src/state.rs')
-rw-r--r-- | sw/eval-clock-cw-tx/src/state.rs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/sw/eval-clock-cw-tx/src/state.rs b/sw/eval-clock-cw-tx/src/state.rs new file mode 100644 index 0000000..b3b0b7b --- /dev/null +++ b/sw/eval-clock-cw-tx/src/state.rs @@ -0,0 +1,83 @@ +const INITIAL_VFO : u32 = 10_100_000; + +// Defines which parameter is changed by the encoder +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum UISelection { + VFO, + Mode, +} + +#[derive(Clone, Copy)] +pub enum VFOSelection { + A, + B, +} + +#[derive(Clone)] +pub enum TuneSpeed { + Slow, + Mid, + Fast +} + +#[derive(PartialEq, Eq, Clone, Copy)] +pub enum CWMode { + StraightKey, + Iambic, +} + +#[derive(PartialEq, Eq, Clone, Copy)] +pub enum Mode { + CW(CWMode), +} + +#[derive(Clone, PartialEq, Eq)] +pub enum SequenceState { + Rx, + SwitchingCW, + TxCW, +} + +#[derive(Clone)] +pub struct State { + pub ui_sel : UISelection, + pub vfo_a : u32, + pub vfo_b : u32, + pub vfo_sel : VFOSelection, + pub mode : Mode, + pub tune_speed : TuneSpeed, + pub sequence_state : SequenceState, + pub update_disp_counter : u8, + pub cw_wpm : u32, +} + +impl State { + pub fn new() -> Self { + State { + ui_sel : UISelection::VFO, + mode : Mode::CW(CWMode::StraightKey), + vfo_sel : VFOSelection::A, + vfo_a : INITIAL_VFO, + vfo_b : INITIAL_VFO, + tune_speed : TuneSpeed::Mid, + sequence_state : SequenceState::Rx, + update_disp_counter : 0, + cw_wpm : 12, + } + } + + pub fn vfo(&self) -> u32 { + match self.vfo_sel { + VFOSelection::A => self.vfo_a, + VFOSelection::B => self.vfo_b, + } + } + + pub fn vfo_incr(&self) -> i32 { + match self.tune_speed { + TuneSpeed::Slow => 10, + TuneSpeed::Mid => 200, + TuneSpeed::Fast => 1000, + } + } +} |