aboutsummaryrefslogtreecommitdiffstats
path: root/sw/eval-clock-cw-tx/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'sw/eval-clock-cw-tx/src/state.rs')
-rw-r--r--sw/eval-clock-cw-tx/src/state.rs83
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,
+ }
+ }
+}