diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2021-03-20 11:45:23 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2021-03-20 11:45:23 +0100 |
commit | 2071c8485241e0b95de891e8855542d7c51915ab (patch) | |
tree | 77a634e97775b3552705855a60f6b4eadc7de2ac /sw/eval-clock-cw-tx/src/state.rs | |
parent | 336048a49af662684a76871a4974f8fb93239b99 (diff) | |
download | picardy-2071c8485241e0b95de891e8855542d7c51915ab.tar.gz picardy-2071c8485241e0b95de891e8855542d7c51915ab.tar.bz2 picardy-2071c8485241e0b95de891e8855542d7c51915ab.zip |
Create eval-clock-cw-tx sw
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, + } + } +} |